{"owner":"0xPlaygrounds","repo":"rig","hasSkills":true,"totalSkillsCount":7,"totalTokensCount":4251,"categories":["root-instruction","anthropic-skill","cursor-rule"],"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md","tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml","tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml","tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml","tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml","tests/cassettes/cohere/tools/tool_call_roundtrip.yaml",".cursorrules (playwright-accessibility-testing-cursorrules-prompt-file.mdc)"],"skills":{"AGENTS.md":"# AGENTS.md\n\nOperational instructions for AI coding agents working in Rig. Contributor\npolicy and PR etiquette live in [CONTRIBUTING.md](CONTRIBUTING.md); verification,\nreview, and publication in [DEVELOPING.md](DEVELOPING.md); test conventions and\ncommands in [tests/README.md](tests/README.md).\nThis file states rules, not APIs: read the code and manifests for names,\nsignatures, module paths, and feature flags.\n\n## First Principles\n\n- Read the existing implementation before changing code.\n- Keep changes scoped to the user's request.\n- Prefer existing Rig traits, builders, modules, and error types over new abstractions.\n- Do not add TODOs, stubs, placeholder implementations, speculative APIs, or backwards compatibility shims.\n- Do not make commits, comments, stage changes, push branches, or open PRs unless the user explicitly asks.\n- Do not discard user changes.\n\n## Fast Loop\n\n- Iterate with `cargo nextest run --locked --profile local -p <crate> [filter]`;\n  leave workspace-wide and facade `--all-features` runs to CI.\n- Before pushing, run `cargo xtask verify --affected --base origin/main`: every\n  test of the changed packages and of the packages depending on them.\n- Keep incremental compilation on.\n\n## Efficient Investigation\n\n- Reuse instructions and unchanged source already in context. Read the relevant\n  sections of linked documents, not every document for every task.\n- Use the repository map below to narrow searches to the owning crate or test\n  target. Read complete relevant constructs; widen only when needed.\n- Check actual signatures and existing test conventions before writing examples\n  or smoke programs, rather than discovering APIs through compiler errors.\n- Keep commands and edits on the intended worktree. Confirm the language server\n  indexes it before trusting references; empty results outside its workspace\n  are not proof of no callers. Inspect native/WASM branches explicitly.\n- Request only decision-relevant output. Recover missing diagnostic context from\n  truncated output rather than dumping or fetching the entire log again.\n\n## Repository Shape\n\n- Root facade crate: `rig` (re-exports the core crate, exposes companion crates behind feature flags)\n- Core crate: `crates/rig-core`\n- Companion provider, vector-store, memory, and integration crates: `crates/rig-*`\n- Derive macros: `crates/rig-derive`\n- The rig coding agent: its core `crates/rig-harness` (on `crates/rig-ecs` and `crates/rig-tools`), its plugin crates `plugins/rig-*`, their shared test support `test-support/rig-harness-test-support`, and `test-support/rig-defaults-test-support` (the default plugins for tests, and the test that each can be left out); all but the two test-support crates are published\n- The plugin corpus `corpus/*`: plugins written against the harness's public API that shaped and prove the kernel, one per module (`src/<plugin>.rs` with its tests in `src/<plugin>/tests.rs`) of a few `publish = false` packages named `corpus-<directory>` (`shared`, which the others build on; `base`; one per held-out series; `library`, programs with no Bevy), so their tests link nine binaries, not one per plugin. CI builds, lints and tests every one, so a kernel change that breaks one fails CI\n- Verification planner and source-tree checks: `xtask/`\n- Workspace example packages: `examples/*`; per-crate examples: `crates/<crate>/examples/`\n- Root integration test targets: `tests/*.rs`\n- Record/replay home: `crates/rig-cassette` — the engine (`src/`), the provider cassette corpus (`fixtures/cassettes/<provider>/`), the effect-log golden corpus (`fixtures/effects/`), every cassette-backed provider target (`tests/<provider>.rs` with `tests/providers/<provider>/` and the shared drivers in `tests/common/`), the cache-prefix guard, and the effect-bus verification target `verify`. Corpora and `tests/` are excluded from the published package.\n- Live-only provider test modules stay in the facade: `tests/providers/<provider>/`, driven by `tests/<provider>.rs`\n- External-service integration tests: `tests/integrations/`\n- Unpublished vector-store test runner: `test-support/service-tests`\n\nCheck the root manifest and facade source before documenting or changing\nexposed features, integrations, or module paths. When adding or exposing a\ncompanion crate, update the root dependency, feature, facade re-export,\nexamples, README, and crate docs as applicable.\n\n## WASM Compatibility\n\nRig supports WebAssembly targets. Use Rig's WASM-compatible `WasmSend`/`WasmSync`\nalias bounds instead of raw `Send` and `Sync`, and its WASM-compatible boxed\nfuture alias for boxed futures. When an error type stores boxed errors, gate\nthe `Send + Sync` bound on `target_family = \"wasm\"` the way existing error\ntypes do.\n\n## Error Handling\n\n- Do not use `String` as an error type for new fallible APIs;\n- Workspace clippy lints forbid `unwrap`, `expect`, `todo`, and `unimplemented`.\n- Tests are linted too: `indexing_slicing` and `panic_in_result_fn` apply in test code, so index with `.get(..)`, and do not assert in a test that returns `Result`.\n- Prefer `?` and meaningful error conversions.\n\n## Documentation\n\n- Keep examples current with actual APIs, model constants, module paths, and feature flags; mark examples `no_run` when they require external credentials or services.\n- Do not document integrations, features, model constants, or crate paths without checking the code and manifests.\n- Keep root README, crate READMEs, and crate-level Rust docs consistent when changing public-facing behavior.\n\n## Release Documents Are Generated\n\n- Never edit `CHANGELOG.md`, `crates/*/CHANGELOG.md`, `MIGRATING.md`, or `docs/migrations/`. CI rejects the PR.\n- Put changelog bullets and migration notes in the PR description under `## Changelog` and `## Migration`, following the PR template. When the user asks to \"update the changelog\" or \"add a migration note\", that is what it means. The repository squash-merges, so those sections become the merge commit body.\n- These files are regenerated on the release PR by `scripts/release-notes.sh` and the editorial pass in `scripts/release-notes-prompt.md`. Only touch them when the user explicitly says the branch is a release PR.\n\n## Provider Changes\n\nBefore implementing or modifying a provider, study the closest existing\nprovider implementation and mirror it. Providers whose wire format is a\ndialect of an existing one (OpenAI-chat-compatible, Anthropic-compatible) MUST\nreuse the shared generic completion model for that dialect and express their\ndifferences through its extension hooks — never a hand-rolled completion\nmodel, request struct, or message conversion.\n\n## Vector Store Changes\n\nVector stores should live in companion crates. Implement both the scored-document and the\nid-only search methods, use an appropriate backend-specific filter type,\nreturn the vector-store error enum's variants instead of ad hoc string\nerrors, and use the WASM-compatible bounds.\n\n## Style\n\n- Module docs state the module's purpose in at most three paragraphs and include\n  one short example when there is a public entry point. No headers, tables,\n  history, or rhetorical phrasing.\n- Item docs state the contract, inputs, outputs, errors, and caller invariants.\n  Allow one sentence of non-obvious rationale. No issue numbers, bug narratives,\n  or comparisons with other providers.\n- Inline comments explain a non-obvious why in one or two sentences. Delete\n  restated code, control-flow narration, and design discussions.\n- Use short sentences and no em-dashes. Keep true `# Safety` and `# Panics`\n  sections. Doc examples must compile with current APIs; use `no_run` for\n  credentials, network access, or services.\n- Move needed design rationale to the crate's CONTRACT.md or README, checking\n  for and merging existing coverage rather than duplicating it.\n- Follow local naming, module layout, and test patterns.\n- Test modules are sibling files, never inline blocks: write\n  `#[cfg(test)] mod tests;` and put the body in `foo/tests.rs` (for `foo.rs`)\n  or `tests.rs` beside `mod.rs`/`lib.rs`. `cargo xtask check-test-layout`\n  enforces this in CI.\n- Avoid unrelated refactors.\n- Prefer the cleanest implementation.\n- Break things if the result is better.\n\n## Cassette Regression Tests\n\nProvider regressions should usually include cassette-backed tests. Follow\n[tests/README.md](tests/README.md#cassette-provider-tests) for replay/record\ncommands and fixture safety review; never record or rewrite fixtures merely\nto make verification pass.\n\n## Verification\n\nFollow [DEVELOPING.md](DEVELOPING.md) for check selection, independent review,\nand authorized publication. Run the smallest useful local check; docs-only\nedits get diff and link review, not Rust builds. Keep progress reports outside\nthe repository and never claim merge readiness with required checks pending.\n","tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml)","tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml)","tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml)","tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml)","tests/cassettes/cohere/tools/tool_call_roundtrip.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/tool_call_roundtrip.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/tool_call_roundtrip.yaml)",".cursorrules (playwright-accessibility-testing-cursorrules-prompt-file.mdc)":"---\ndescription: \"Cursor rules for Playwright development with accessibility testing.\"\nglobs: **/*\nalwaysApply: false\n---\n# Persona\n\nYou are an expert QA engineer specializing in accessibility testing with Playwright and TypeScript, dedicated to ensuring web applications are usable by people with disabilities.\n\n# Auto-detect TypeScript Usage\n\nBefore creating tests, check if the project uses TypeScript by looking for:\n- tsconfig.json file\n- .ts file extensions in test directories\n- TypeScript dependencies in package.json\nAdjust file extensions (.ts/.js) and syntax based on this detection.\n\n# Accessibility Testing Focus\n\nUse @axe-core/playwright for automated WCAG compliance testing\nFocus on testing critical user flows for accessibility issues\nTests should verify compliance with WCAG 2.1 AA standards\nCreate comprehensive reports highlighting potential accessibility issues\nDocument remediation steps for common accessibility violations\n\n# Best Practices\n\n**1** **Comprehensive Coverage**: Test all critical user flows for accessibility violations\n**2** **Multiple Viewport Testing**: Test accessibility across different screen sizes and devices\n**3** **Rule Configuration**: Configure axe-core rules based on project-specific requirements\n**4** **Manual Verification**: Complement automated tests with manual keyboard navigation testing\n**5** **Semantic Markup**: Verify proper use of ARIA attributes and semantic HTML elements\n**6** **Color Contrast**: Ensure sufficient contrast ratios for text and interactive elements\n**7** **Focus Management**: Test keyboard focus visibility and logical tab order\n**8** **Screen Reader Compatibility**: Verify compatibility with screen readers\n**9** **Descriptive Reporting**: Generate clear, actionable reports of accessibility violations\n\n# Input/Output Expectations\n\n**Input**: A description of a web page or user flow to test for accessibility\n**Output**: A Playwright test file with automated accessibility checks for the described page or flow\n\n# Example Accessibility Test\n\nWhen testing a login page for accessibility, implement the following pattern:\n\n```js\nimport { test, expect } from '@playwright/test';\nimport { injectAxe, checkA11y, configureAxe } from 'axe-playwright';\n\ntest.describe('Login Page Accessibility', () => {\n  test.beforeEach(async ({ page }) => {\n    await page.goto('/login');\n    await injectAxe(page);\n    \n    // Configure axe rules if needed\n    await configureAxe(page, {\n      rules: [\n        { id: 'color-contrast', enabled: true },\n        { id: 'label', enabled: true }\n      ]\n    });\n  });\n\n  test('should have no accessibility violations', async ({ page }) => {\n    // Run accessibility checks\n    await checkA11y(page, null, {\n      detailedReport: true,\n      detailedReportOptions: { html: true }\n    });\n  });\n\n  test('should be navigable by keyboard', async ({ page }) => {\n    // Send Tab key to navigate through elements\n    await page.keyboard.press('Tab');\n    let hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'username'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'password'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'login-button'\n    );\n    expect(hasFocus).toBeTruthy();\n  });\n\n  test('should have proper ARIA attributes', async ({ page }) => {\n    // Check form has proper ARIA attributes\n    const form = await page.locator('form');\n    expect(await form.getAttribute('aria-labelledby')).toBeTruthy();\n    \n    // Check error messages are properly associated\n    const errorMessage = await page.locator('.error-message');\n    expect(await errorMessage.getAttribute('aria-live')).toBe('assertive');\n  });\n});\n```\n"},"files":{"AGENTS.md":"# AGENTS.md\n\nOperational instructions for AI coding agents working in Rig. Contributor\npolicy and PR etiquette live in [CONTRIBUTING.md](CONTRIBUTING.md); verification,\nreview, and publication in [DEVELOPING.md](DEVELOPING.md); test conventions and\ncommands in [tests/README.md](tests/README.md).\nThis file states rules, not APIs: read the code and manifests for names,\nsignatures, module paths, and feature flags.\n\n## First Principles\n\n- Read the existing implementation before changing code.\n- Keep changes scoped to the user's request.\n- Prefer existing Rig traits, builders, modules, and error types over new abstractions.\n- Do not add TODOs, stubs, placeholder implementations, speculative APIs, or backwards compatibility shims.\n- Do not make commits, comments, stage changes, push branches, or open PRs unless the user explicitly asks.\n- Do not discard user changes.\n\n## Fast Loop\n\n- Iterate with `cargo nextest run --locked --profile local -p <crate> [filter]`;\n  leave workspace-wide and facade `--all-features` runs to CI.\n- Before pushing, run `cargo xtask verify --affected --base origin/main`: every\n  test of the changed packages and of the packages depending on them.\n- Keep incremental compilation on.\n\n## Efficient Investigation\n\n- Reuse instructions and unchanged source already in context. Read the relevant\n  sections of linked documents, not every document for every task.\n- Use the repository map below to narrow searches to the owning crate or test\n  target. Read complete relevant constructs; widen only when needed.\n- Check actual signatures and existing test conventions before writing examples\n  or smoke programs, rather than discovering APIs through compiler errors.\n- Keep commands and edits on the intended worktree. Confirm the language server\n  indexes it before trusting references; empty results outside its workspace\n  are not proof of no callers. Inspect native/WASM branches explicitly.\n- Request only decision-relevant output. Recover missing diagnostic context from\n  truncated output rather than dumping or fetching the entire log again.\n\n## Repository Shape\n\n- Root facade crate: `rig` (re-exports the core crate, exposes companion crates behind feature flags)\n- Core crate: `crates/rig-core`\n- Companion provider, vector-store, memory, and integration crates: `crates/rig-*`\n- Derive macros: `crates/rig-derive`\n- The rig coding agent: its core `crates/rig-harness` (on `crates/rig-ecs` and `crates/rig-tools`), its plugin crates `plugins/rig-*`, their shared test support `test-support/rig-harness-test-support`, and `test-support/rig-defaults-test-support` (the default plugins for tests, and the test that each can be left out); all but the two test-support crates are published\n- The plugin corpus `corpus/*`: plugins written against the harness's public API that shaped and prove the kernel, one per module (`src/<plugin>.rs` with its tests in `src/<plugin>/tests.rs`) of a few `publish = false` packages named `corpus-<directory>` (`shared`, which the others build on; `base`; one per held-out series; `library`, programs with no Bevy), so their tests link nine binaries, not one per plugin. CI builds, lints and tests every one, so a kernel change that breaks one fails CI\n- Verification planner and source-tree checks: `xtask/`\n- Workspace example packages: `examples/*`; per-crate examples: `crates/<crate>/examples/`\n- Root integration test targets: `tests/*.rs`\n- Record/replay home: `crates/rig-cassette` — the engine (`src/`), the provider cassette corpus (`fixtures/cassettes/<provider>/`), the effect-log golden corpus (`fixtures/effects/`), every cassette-backed provider target (`tests/<provider>.rs` with `tests/providers/<provider>/` and the shared drivers in `tests/common/`), the cache-prefix guard, and the effect-bus verification target `verify`. Corpora and `tests/` are excluded from the published package.\n- Live-only provider test modules stay in the facade: `tests/providers/<provider>/`, driven by `tests/<provider>.rs`\n- External-service integration tests: `tests/integrations/`\n- Unpublished vector-store test runner: `test-support/service-tests`\n\nCheck the root manifest and facade source before documenting or changing\nexposed features, integrations, or module paths. When adding or exposing a\ncompanion crate, update the root dependency, feature, facade re-export,\nexamples, README, and crate docs as applicable.\n\n## WASM Compatibility\n\nRig supports WebAssembly targets. Use Rig's WASM-compatible `WasmSend`/`WasmSync`\nalias bounds instead of raw `Send` and `Sync`, and its WASM-compatible boxed\nfuture alias for boxed futures. When an error type stores boxed errors, gate\nthe `Send + Sync` bound on `target_family = \"wasm\"` the way existing error\ntypes do.\n\n## Error Handling\n\n- Do not use `String` as an error type for new fallible APIs;\n- Workspace clippy lints forbid `unwrap`, `expect`, `todo`, and `unimplemented`.\n- Tests are linted too: `indexing_slicing` and `panic_in_result_fn` apply in test code, so index with `.get(..)`, and do not assert in a test that returns `Result`.\n- Prefer `?` and meaningful error conversions.\n\n## Documentation\n\n- Keep examples current with actual APIs, model constants, module paths, and feature flags; mark examples `no_run` when they require external credentials or services.\n- Do not document integrations, features, model constants, or crate paths without checking the code and manifests.\n- Keep root README, crate READMEs, and crate-level Rust docs consistent when changing public-facing behavior.\n\n## Release Documents Are Generated\n\n- Never edit `CHANGELOG.md`, `crates/*/CHANGELOG.md`, `MIGRATING.md`, or `docs/migrations/`. CI rejects the PR.\n- Put changelog bullets and migration notes in the PR description under `## Changelog` and `## Migration`, following the PR template. When the user asks to \"update the changelog\" or \"add a migration note\", that is what it means. The repository squash-merges, so those sections become the merge commit body.\n- These files are regenerated on the release PR by `scripts/release-notes.sh` and the editorial pass in `scripts/release-notes-prompt.md`. Only touch them when the user explicitly says the branch is a release PR.\n\n## Provider Changes\n\nBefore implementing or modifying a provider, study the closest existing\nprovider implementation and mirror it. Providers whose wire format is a\ndialect of an existing one (OpenAI-chat-compatible, Anthropic-compatible) MUST\nreuse the shared generic completion model for that dialect and express their\ndifferences through its extension hooks — never a hand-rolled completion\nmodel, request struct, or message conversion.\n\n## Vector Store Changes\n\nVector stores should live in companion crates. Implement both the scored-document and the\nid-only search methods, use an appropriate backend-specific filter type,\nreturn the vector-store error enum's variants instead of ad hoc string\nerrors, and use the WASM-compatible bounds.\n\n## Style\n\n- Module docs state the module's purpose in at most three paragraphs and include\n  one short example when there is a public entry point. No headers, tables,\n  history, or rhetorical phrasing.\n- Item docs state the contract, inputs, outputs, errors, and caller invariants.\n  Allow one sentence of non-obvious rationale. No issue numbers, bug narratives,\n  or comparisons with other providers.\n- Inline comments explain a non-obvious why in one or two sentences. Delete\n  restated code, control-flow narration, and design discussions.\n- Use short sentences and no em-dashes. Keep true `# Safety` and `# Panics`\n  sections. Doc examples must compile with current APIs; use `no_run` for\n  credentials, network access, or services.\n- Move needed design rationale to the crate's CONTRACT.md or README, checking\n  for and merging existing coverage rather than duplicating it.\n- Follow local naming, module layout, and test patterns.\n- Test modules are sibling files, never inline blocks: write\n  `#[cfg(test)] mod tests;` and put the body in `foo/tests.rs` (for `foo.rs`)\n  or `tests.rs` beside `mod.rs`/`lib.rs`. `cargo xtask check-test-layout`\n  enforces this in CI.\n- Avoid unrelated refactors.\n- Prefer the cleanest implementation.\n- Break things if the result is better.\n\n## Cassette Regression Tests\n\nProvider regressions should usually include cassette-backed tests. Follow\n[tests/README.md](tests/README.md#cassette-provider-tests) for replay/record\ncommands and fixture safety review; never record or rewrite fixtures merely\nto make verification pass.\n\n## Verification\n\nFollow [DEVELOPING.md](DEVELOPING.md) for check selection, independent review,\nand authorized publication. Run the smallest useful local check; docs-only\nedits get diff and link review, not Rust builds. Keep progress reports outside\nthe repository and never claim merge readiness with required checks pending.\n","tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml)","tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml)","tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml)","tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml)","tests/cassettes/cohere/tools/tool_call_roundtrip.yaml":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/tool_call_roundtrip.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/tool_call_roundtrip.yaml)",".cursorrules (playwright-accessibility-testing-cursorrules-prompt-file.mdc)":"---\ndescription: \"Cursor rules for Playwright development with accessibility testing.\"\nglobs: **/*\nalwaysApply: false\n---\n# Persona\n\nYou are an expert QA engineer specializing in accessibility testing with Playwright and TypeScript, dedicated to ensuring web applications are usable by people with disabilities.\n\n# Auto-detect TypeScript Usage\n\nBefore creating tests, check if the project uses TypeScript by looking for:\n- tsconfig.json file\n- .ts file extensions in test directories\n- TypeScript dependencies in package.json\nAdjust file extensions (.ts/.js) and syntax based on this detection.\n\n# Accessibility Testing Focus\n\nUse @axe-core/playwright for automated WCAG compliance testing\nFocus on testing critical user flows for accessibility issues\nTests should verify compliance with WCAG 2.1 AA standards\nCreate comprehensive reports highlighting potential accessibility issues\nDocument remediation steps for common accessibility violations\n\n# Best Practices\n\n**1** **Comprehensive Coverage**: Test all critical user flows for accessibility violations\n**2** **Multiple Viewport Testing**: Test accessibility across different screen sizes and devices\n**3** **Rule Configuration**: Configure axe-core rules based on project-specific requirements\n**4** **Manual Verification**: Complement automated tests with manual keyboard navigation testing\n**5** **Semantic Markup**: Verify proper use of ARIA attributes and semantic HTML elements\n**6** **Color Contrast**: Ensure sufficient contrast ratios for text and interactive elements\n**7** **Focus Management**: Test keyboard focus visibility and logical tab order\n**8** **Screen Reader Compatibility**: Verify compatibility with screen readers\n**9** **Descriptive Reporting**: Generate clear, actionable reports of accessibility violations\n\n# Input/Output Expectations\n\n**Input**: A description of a web page or user flow to test for accessibility\n**Output**: A Playwright test file with automated accessibility checks for the described page or flow\n\n# Example Accessibility Test\n\nWhen testing a login page for accessibility, implement the following pattern:\n\n```js\nimport { test, expect } from '@playwright/test';\nimport { injectAxe, checkA11y, configureAxe } from 'axe-playwright';\n\ntest.describe('Login Page Accessibility', () => {\n  test.beforeEach(async ({ page }) => {\n    await page.goto('/login');\n    await injectAxe(page);\n    \n    // Configure axe rules if needed\n    await configureAxe(page, {\n      rules: [\n        { id: 'color-contrast', enabled: true },\n        { id: 'label', enabled: true }\n      ]\n    });\n  });\n\n  test('should have no accessibility violations', async ({ page }) => {\n    // Run accessibility checks\n    await checkA11y(page, null, {\n      detailedReport: true,\n      detailedReportOptions: { html: true }\n    });\n  });\n\n  test('should be navigable by keyboard', async ({ page }) => {\n    // Send Tab key to navigate through elements\n    await page.keyboard.press('Tab');\n    let hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'username'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'password'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'login-button'\n    );\n    expect(hasFocus).toBeTruthy();\n  });\n\n  test('should have proper ARIA attributes', async ({ page }) => {\n    // Check form has proper ARIA attributes\n    const form = await page.locator('form');\n    expect(await form.getAttribute('aria-labelledby')).toBeTruthy();\n    \n    // Check error messages are properly associated\n    const errorMessage = await page.locator('.error-message');\n    expect(await errorMessage.getAttribute('aria-live')).toBe('assertive');\n  });\n});\n```\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AGENTS.md\n\nOperational instructions for AI coding agents working in Rig. Contributor\npolicy and PR etiquette live in [CONTRIBUTING.md](CONTRIBUTING.md); verification,\nreview, and publication in [DEVELOPING.md](DEVELOPING.md); test conventions and\ncommands in [tests/README.md](tests/README.md).\nThis file states rules, not APIs: read the code and manifests for names,\nsignatures, module paths, and feature flags.\n\n## First Principles\n\n- Read the existing implementation before changing code.\n- Keep changes scoped to the user's request.\n- Prefer existing Rig traits, builders, modules, and error types over new abstractions.\n- Do not add TODOs, stubs, placeholder implementations, speculative APIs, or backwards compatibility shims.\n- Do not make commits, comments, stage changes, push branches, or open PRs unless the user explicitly asks.\n- Do not discard user changes.\n\n## Fast Loop\n\n- Iterate with `cargo nextest run --locked --profile local -p <crate> [filter]`;\n  leave workspace-wide and facade `--all-features` runs to CI.\n- Before pushing, run `cargo xtask verify --affected --base origin/main`: every\n  test of the changed packages and of the packages depending on them.\n- Keep incremental compilation on.\n\n## Efficient Investigation\n\n- Reuse instructions and unchanged source already in context. Read the relevant\n  sections of linked documents, not every document for every task.\n- Use the repository map below to narrow searches to the owning crate or test\n  target. Read complete relevant constructs; widen only when needed.\n- Check actual signatures and existing test conventions before writing examples\n  or smoke programs, rather than discovering APIs through compiler errors.\n- Keep commands and edits on the intended worktree. Confirm the language server\n  indexes it before trusting references; empty results outside its workspace\n  are not proof of no callers. Inspect native/WASM branches explicitly.\n- Request only decision-relevant output. Recover missing diagnostic context from\n  truncated output rather than dumping or fetching the entire log again.\n\n## Repository Shape\n\n- Root facade crate: `rig` (re-exports the core crate, exposes companion crates behind feature flags)\n- Core crate: `crates/rig-core`\n- Companion provider, vector-store, memory, and integration crates: `crates/rig-*`\n- Derive macros: `crates/rig-derive`\n- The rig coding agent: its core `crates/rig-harness` (on `crates/rig-ecs` and `crates/rig-tools`), its plugin crates `plugins/rig-*`, their shared test support `test-support/rig-harness-test-support`, and `test-support/rig-defaults-test-support` (the default plugins for tests, and the test that each can be left out); all but the two test-support crates are published\n- The plugin corpus `corpus/*`: plugins written against the harness's public API that shaped and prove the kernel, one per module (`src/<plugin>.rs` with its tests in `src/<plugin>/tests.rs`) of a few `publish = false` packages named `corpus-<directory>` (`shared`, which the others build on; `base`; one per held-out series; `library`, programs with no Bevy), so their tests link nine binaries, not one per plugin. CI builds, lints and tests every one, so a kernel change that breaks one fails CI\n- Verification planner and source-tree checks: `xtask/`\n- Workspace example packages: `examples/*`; per-crate examples: `crates/<crate>/examples/`\n- Root integration test targets: `tests/*.rs`\n- Record/replay home: `crates/rig-cassette` — the engine (`src/`), the provider cassette corpus (`fixtures/cassettes/<provider>/`), the effect-log golden corpus (`fixtures/effects/`), every cassette-backed provider target (`tests/<provider>.rs` with `tests/providers/<provider>/` and the shared drivers in `tests/common/`), the cache-prefix guard, and the effect-bus verification target `verify`. Corpora and `tests/` are excluded from the published package.\n- Live-only provider test modules stay in the facade: `tests/providers/<provider>/`, driven by `tests/<provider>.rs`\n- External-service integration tests: `tests/integrations/`\n- Unpublished vector-store test runner: `test-support/service-tests`\n\nCheck the root manifest and facade source before documenting or changing\nexposed features, integrations, or module paths. When adding or exposing a\ncompanion crate, update the root dependency, feature, facade re-export,\nexamples, README, and crate docs as applicable.\n\n## WASM Compatibility\n\nRig supports WebAssembly targets. Use Rig's WASM-compatible `WasmSend`/`WasmSync`\nalias bounds instead of raw `Send` and `Sync`, and its WASM-compatible boxed\nfuture alias for boxed futures. When an error type stores boxed errors, gate\nthe `Send + Sync` bound on `target_family = \"wasm\"` the way existing error\ntypes do.\n\n## Error Handling\n\n- Do not use `String` as an error type for new fallible APIs;\n- Workspace clippy lints forbid `unwrap`, `expect`, `todo`, and `unimplemented`.\n- Tests are linted too: `indexing_slicing` and `panic_in_result_fn` apply in test code, so index with `.get(..)`, and do not assert in a test that returns `Result`.\n- Prefer `?` and meaningful error conversions.\n\n## Documentation\n\n- Keep examples current with actual APIs, model constants, module paths, and feature flags; mark examples `no_run` when they require external credentials or services.\n- Do not document integrations, features, model constants, or crate paths without checking the code and manifests.\n- Keep root README, crate READMEs, and crate-level Rust docs consistent when changing public-facing behavior.\n\n## Release Documents Are Generated\n\n- Never edit `CHANGELOG.md`, `crates/*/CHANGELOG.md`, `MIGRATING.md`, or `docs/migrations/`. CI rejects the PR.\n- Put changelog bullets and migration notes in the PR description under `## Changelog` and `## Migration`, following the PR template. When the user asks to \"update the changelog\" or \"add a migration note\", that is what it means. The repository squash-merges, so those sections become the merge commit body.\n- These files are regenerated on the release PR by `scripts/release-notes.sh` and the editorial pass in `scripts/release-notes-prompt.md`. Only touch them when the user explicitly says the branch is a release PR.\n\n## Provider Changes\n\nBefore implementing or modifying a provider, study the closest existing\nprovider implementation and mirror it. Providers whose wire format is a\ndialect of an existing one (OpenAI-chat-compatible, Anthropic-compatible) MUST\nreuse the shared generic completion model for that dialect and express their\ndifferences through its extension hooks — never a hand-rolled completion\nmodel, request struct, or message conversion.\n\n## Vector Store Changes\n\nVector stores should live in companion crates. Implement both the scored-document and the\nid-only search methods, use an appropriate backend-specific filter type,\nreturn the vector-store error enum's variants instead of ad hoc string\nerrors, and use the WASM-compatible bounds.\n\n## Style\n\n- Module docs state the module's purpose in at most three paragraphs and include\n  one short example when there is a public entry point. No headers, tables,\n  history, or rhetorical phrasing.\n- Item docs state the contract, inputs, outputs, errors, and caller invariants.\n  Allow one sentence of non-obvious rationale. No issue numbers, bug narratives,\n  or comparisons with other providers.\n- Inline comments explain a non-obvious why in one or two sentences. Delete\n  restated code, control-flow narration, and design discussions.\n- Use short sentences and no em-dashes. Keep true `# Safety` and `# Panics`\n  sections. Doc examples must compile with current APIs; use `no_run` for\n  credentials, network access, or services.\n- Move needed design rationale to the crate's CONTRACT.md or README, checking\n  for and merging existing coverage rather than duplicating it.\n- Follow local naming, module layout, and test patterns.\n- Test modules are sibling files, never inline blocks: write\n  `#[cfg(test)] mod tests;` and put the body in `foo/tests.rs` (for `foo.rs`)\n  or `tests.rs` beside `mod.rs`/`lib.rs`. `cargo xtask check-test-layout`\n  enforces this in CI.\n- Avoid unrelated refactors.\n- Prefer the cleanest implementation.\n- Break things if the result is better.\n\n## Cassette Regression Tests\n\nProvider regressions should usually include cassette-backed tests. Follow\n[tests/README.md](tests/README.md#cassette-provider-tests) for replay/record\ncommands and fixture safety review; never record or rewrite fixtures merely\nto make verification pass.\n\n## Verification\n\nFollow [DEVELOPING.md](DEVELOPING.md) for check selection, independent review,\nand authorized publication. Run the smallest useful local check; docs-only\nedits get diff and link review, not Rust builds. Keep progress reports outside\nthe repository and never claim merge readiness with required checks pending.\n","isInternal":false,"tokens":1959,"sizeBytes":8832},{"name":"none_tool_choice_without_tools_returns_text.yaml","path":"tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml","rawUrl":"https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml)","tokens":300,"sizeBytes":266},{"name":"required_tool_choice_is_accepted.yaml","path":"tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml","rawUrl":"https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml)","tokens":300,"sizeBytes":244},{"name":"required_tool_choice_selects_from_multiple_tools.yaml","path":"tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml","rawUrl":"https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml)","tokens":300,"sizeBytes":276},{"name":"strict_required_tool_choice_is_accepted.yaml","path":"tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml","rawUrl":"https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml)","tokens":300,"sizeBytes":258},{"name":"tool_call_roundtrip.yaml","path":"tests/cassettes/cohere/tools/tool_call_roundtrip.yaml","rawUrl":"https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/tool_call_roundtrip.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/tool_call_roundtrip.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/tool_call_roundtrip.yaml)","tokens":300,"sizeBytes":218},{"name":".cursorrules","path":".cursorrules (playwright-accessibility-testing-cursorrules-prompt-file.mdc)","rawUrl":"https://raw.githubusercontent.com/PatrickJS/awesome-cursorrules/main/rules/playwright-accessibility-testing-cursorrules-prompt-file.mdc","title":"Awesome Cursorrules: playwright accessibility testing","category":"cursor-rule","format":"markdown","content":"---\ndescription: \"Cursor rules for Playwright development with accessibility testing.\"\nglobs: **/*\nalwaysApply: false\n---\n# Persona\n\nYou are an expert QA engineer specializing in accessibility testing with Playwright and TypeScript, dedicated to ensuring web applications are usable by people with disabilities.\n\n# Auto-detect TypeScript Usage\n\nBefore creating tests, check if the project uses TypeScript by looking for:\n- tsconfig.json file\n- .ts file extensions in test directories\n- TypeScript dependencies in package.json\nAdjust file extensions (.ts/.js) and syntax based on this detection.\n\n# Accessibility Testing Focus\n\nUse @axe-core/playwright for automated WCAG compliance testing\nFocus on testing critical user flows for accessibility issues\nTests should verify compliance with WCAG 2.1 AA standards\nCreate comprehensive reports highlighting potential accessibility issues\nDocument remediation steps for common accessibility violations\n\n# Best Practices\n\n**1** **Comprehensive Coverage**: Test all critical user flows for accessibility violations\n**2** **Multiple Viewport Testing**: Test accessibility across different screen sizes and devices\n**3** **Rule Configuration**: Configure axe-core rules based on project-specific requirements\n**4** **Manual Verification**: Complement automated tests with manual keyboard navigation testing\n**5** **Semantic Markup**: Verify proper use of ARIA attributes and semantic HTML elements\n**6** **Color Contrast**: Ensure sufficient contrast ratios for text and interactive elements\n**7** **Focus Management**: Test keyboard focus visibility and logical tab order\n**8** **Screen Reader Compatibility**: Verify compatibility with screen readers\n**9** **Descriptive Reporting**: Generate clear, actionable reports of accessibility violations\n\n# Input/Output Expectations\n\n**Input**: A description of a web page or user flow to test for accessibility\n**Output**: A Playwright test file with automated accessibility checks for the described page or flow\n\n# Example Accessibility Test\n\nWhen testing a login page for accessibility, implement the following pattern:\n\n```js\nimport { test, expect } from '@playwright/test';\nimport { injectAxe, checkA11y, configureAxe } from 'axe-playwright';\n\ntest.describe('Login Page Accessibility', () => {\n  test.beforeEach(async ({ page }) => {\n    await page.goto('/login');\n    await injectAxe(page);\n    \n    // Configure axe rules if needed\n    await configureAxe(page, {\n      rules: [\n        { id: 'color-contrast', enabled: true },\n        { id: 'label', enabled: true }\n      ]\n    });\n  });\n\n  test('should have no accessibility violations', async ({ page }) => {\n    // Run accessibility checks\n    await checkA11y(page, null, {\n      detailedReport: true,\n      detailedReportOptions: { html: true }\n    });\n  });\n\n  test('should be navigable by keyboard', async ({ page }) => {\n    // Send Tab key to navigate through elements\n    await page.keyboard.press('Tab');\n    let hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'username'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'password'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'login-button'\n    );\n    expect(hasFocus).toBeTruthy();\n  });\n\n  test('should have proper ARIA attributes', async ({ page }) => {\n    // Check form has proper ARIA attributes\n    const form = await page.locator('form');\n    expect(await form.getAttribute('aria-labelledby')).toBeTruthy();\n    \n    // Check error messages are properly associated\n    const errorMessage = await page.locator('.error-message');\n    expect(await errorMessage.getAttribute('aria-live')).toBe('assertive');\n  });\n});\n```\n","tokens":792,"sizeBytes":3887}],"systemPromptSnippet":"<yakaai_skills repo=\"0xPlaygrounds/rig\">\n<!-- File: AGENTS.md (Tokens: ~1959 | Category: root-instruction) -->\n# AGENTS.md\n\nOperational instructions for AI coding agents working in Rig. Contributor\npolicy and PR etiquette live in [CONTRIBUTING.md](CONTRIBUTING.md); verification,\nreview, and publication in [DEVELOPING.md](DEVELOPING.md); test conventions and\ncommands in [tests/README.md](tests/README.md).\nThis file states rules, not APIs: read the code and manifests for names,\nsignatures, module paths, and feature flags.\n\n## First Principles\n\n- Read the existing implementation before changing code.\n- Keep changes scoped to the user's request.\n- Prefer existing Rig traits, builders, modules, and error types over new abstractions.\n- Do not add TODOs, stubs, placeholder implementations, speculative APIs, or backwards compatibility shims.\n- Do not make commits, comments, stage changes, push branches, or open PRs unless the user explicitly asks.\n- Do not discard user changes.\n\n## Fast Loop\n\n- Iterate with `cargo nextest run --locked --profile local -p <crate> [filter]`;\n  leave workspace-wide and facade `--all-features` runs to CI.\n- Before pushing, run `cargo xtask verify --affected --base origin/main`: every\n  test of the changed packages and of the packages depending on them.\n- Keep incremental compilation on.\n\n## Efficient Investigation\n\n- Reuse instructions and unchanged source already in context. Read the relevant\n  sections of linked documents, not every document for every task.\n- Use the repository map below to narrow searches to the owning crate or test\n  target. Read complete relevant constructs; widen only when needed.\n- Check actual signatures and existing test conventions before writing examples\n  or smoke programs, rather than discovering APIs through compiler errors.\n- Keep commands and edits on the intended worktree. Confirm the language server\n  indexes it before trusting references; empty results outside its workspace\n  are not proof of no callers. Inspect native/WASM branches explicitly.\n- Request only decision-relevant output. Recover missing diagnostic context from\n  truncated output rather than dumping or fetching the entire log again.\n\n## Repository Shape\n\n- Root facade crate: `rig` (re-exports the core crate, exposes companion crates behind feature flags)\n- Core crate: `crates/rig-core`\n- Companion provider, vector-store, memory, and integration crates: `crates/rig-*`\n- Derive macros: `crates/rig-derive`\n- The rig coding agent: its core `crates/rig-harness` (on `crates/rig-ecs` and `crates/rig-tools`), its plugin crates `plugins/rig-*`, their shared test support `test-support/rig-harness-test-support`, and `test-support/rig-defaults-test-support` (the default plugins for tests, and the test that each can be left out); all but the two test-support crates are published\n- The plugin corpus `corpus/*`: plugins written against the harness's public API that shaped and prove the kernel, one per module (`src/<plugin>.rs` with its tests in `src/<plugin>/tests.rs`) of a few `publish = false` packages named `corpus-<directory>` (`shared`, which the others build on; `base`; one per held-out series; `library`, programs with no Bevy), so their tests link nine binaries, not one per plugin. CI builds, lints and tests every one, so a kernel change that breaks one fails CI\n- Verification planner and source-tree checks: `xtask/`\n- Workspace example packages: `examples/*`; per-crate examples: `crates/<crate>/examples/`\n- Root integration test targets: `tests/*.rs`\n- Record/replay home: `crates/rig-cassette` — the engine (`src/`), the provider cassette corpus (`fixtures/cassettes/<provider>/`), the effect-log golden corpus (`fixtures/effects/`), every cassette-backed provider target (`tests/<provider>.rs` with `tests/providers/<provider>/` and the shared drivers in `tests/common/`), the cache-prefix guard, and the effect-bus verification target `verify`. Corpora and `tests/` are excluded from the published package.\n- Live-only provider test modules stay in the facade: `tests/providers/<provider>/`, driven by `tests/<provider>.rs`\n- External-service integration tests: `tests/integrations/`\n- Unpublished vector-store test runner: `test-support/service-tests`\n\nCheck the root manifest and facade source before documenting or changing\nexposed features, integrations, or module paths. When adding or exposing a\ncompanion crate, update the root dependency, feature, facade re-export,\nexamples, README, and crate docs as applicable.\n\n## WASM Compatibility\n\nRig supports WebAssembly targets. Use Rig's WASM-compatible `WasmSend`/`WasmSync`\nalias bounds instead of raw `Send` and `Sync`, and its WASM-compatible boxed\nfuture alias for boxed futures. When an error type stores boxed errors, gate\nthe `Send + Sync` bound on `target_family = \"wasm\"` the way existing error\ntypes do.\n\n## Error Handling\n\n- Do not use `String` as an error type for new fallible APIs;\n- Workspace clippy lints forbid `unwrap`, `expect`, `todo`, and `unimplemented`.\n- Tests are linted too: `indexing_slicing` and `panic_in_result_fn` apply in test code, so index with `.get(..)`, and do not assert in a test that returns `Result`.\n- Prefer `?` and meaningful error conversions.\n\n## Documentation\n\n- Keep examples current with actual APIs, model constants, module paths, and feature flags; mark examples `no_run` when they require external credentials or services.\n- Do not document integrations, features, model constants, or crate paths without checking the code and manifests.\n- Keep root README, crate READMEs, and crate-level Rust docs consistent when changing public-facing behavior.\n\n## Release Documents Are Generated\n\n- Never edit `CHANGELOG.md`, `crates/*/CHANGELOG.md`, `MIGRATING.md`, or `docs/migrations/`. CI rejects the PR.\n- Put changelog bullets and migration notes in the PR description under `## Changelog` and `## Migration`, following the PR template. When the user asks to \"update the changelog\" or \"add a migration note\", that is what it means. The repository squash-merges, so those sections become the merge commit body.\n- These files are regenerated on the release PR by `scripts/release-notes.sh` and the editorial pass in `scripts/release-notes-prompt.md`. Only touch them when the user explicitly says the branch is a release PR.\n\n## Provider Changes\n\nBefore implementing or modifying a provider, study the closest existing\nprovider implementation and mirror it. Providers whose wire format is a\ndialect of an existing one (OpenAI-chat-compatible, Anthropic-compatible) MUST\nreuse the shared generic completion model for that dialect and express their\ndifferences through its extension hooks — never a hand-rolled completion\nmodel, request struct, or message conversion.\n\n## Vector Store Changes\n\nVector stores should live in companion crates. Implement both the scored-document and the\nid-only search methods, use an appropriate backend-specific filter type,\nreturn the vector-store error enum's variants instead of ad hoc string\nerrors, and use the WASM-compatible bounds.\n\n## Style\n\n- Module docs state the module's purpose in at most three paragraphs and include\n  one short example when there is a public entry point. No headers, tables,\n  history, or rhetorical phrasing.\n- Item docs state the contract, inputs, outputs, errors, and caller invariants.\n  Allow one sentence of non-obvious rationale. No issue numbers, bug narratives,\n  or comparisons with other providers.\n- Inline comments explain a non-obvious why in one or two sentences. Delete\n  restated code, control-flow narration, and design discussions.\n- Use short sentences and no em-dashes. Keep true `# Safety` and `# Panics`\n  sections. Doc examples must compile with current APIs; use `no_run` for\n  credentials, network access, or services.\n- Move needed design rationale to the crate's CONTRACT.md or README, checking\n  for and merging existing coverage rather than duplicating it.\n- Follow local naming, module layout, and test patterns.\n- Test modules are sibling files, never inline blocks: write\n  `#[cfg(test)] mod tests;` and put the body in `foo/tests.rs` (for `foo.rs`)\n  or `tests.rs` beside `mod.rs`/`lib.rs`. `cargo xtask check-test-layout`\n  enforces this in CI.\n- Avoid unrelated refactors.\n- Prefer the cleanest implementation.\n- Break things if the result is better.\n\n## Cassette Regression Tests\n\nProvider regressions should usually include cassette-backed tests. Follow\n[tests/README.md](tests/README.md#cassette-provider-tests) for replay/record\ncommands and fixture safety review; never record or rewrite fixtures merely\nto make verification pass.\n\n## Verification\n\nFollow [DEVELOPING.md](DEVELOPING.md) for check selection, independent review,\nand authorized publication. Run the smallest useful local check; docs-only\nedits get diff and link review, not Rust builds. Keep progress reports outside\nthe repository and never claim merge readiness with required checks pending.\n\n<!-- File: tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/none_tool_choice_without_tools_returns_text.yaml)\n\n<!-- File: tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_is_accepted.yaml)\n\n<!-- File: tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/required_tool_choice_selects_from_multiple_tools.yaml)\n\n<!-- File: tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/strict_required_tool_choice_is_accepted.yaml)\n\n<!-- File: tests/cassettes/cohere/tools/tool_call_roundtrip.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `tests/cassettes/cohere/tools/tool_call_roundtrip.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/0xPlaygrounds/rig/HEAD/tests/cassettes/cohere/tools/tool_call_roundtrip.yaml)\n\n<!-- File: .cursorrules (playwright-accessibility-testing-cursorrules-prompt-file.mdc) (Tokens: ~792 | Category: cursor-rule) -->\n---\ndescription: \"Cursor rules for Playwright development with accessibility testing.\"\nglobs: **/*\nalwaysApply: false\n---\n# Persona\n\nYou are an expert QA engineer specializing in accessibility testing with Playwright and TypeScript, dedicated to ensuring web applications are usable by people with disabilities.\n\n# Auto-detect TypeScript Usage\n\nBefore creating tests, check if the project uses TypeScript by looking for:\n- tsconfig.json file\n- .ts file extensions in test directories\n- TypeScript dependencies in package.json\nAdjust file extensions (.ts/.js) and syntax based on this detection.\n\n# Accessibility Testing Focus\n\nUse @axe-core/playwright for automated WCAG compliance testing\nFocus on testing critical user flows for accessibility issues\nTests should verify compliance with WCAG 2.1 AA standards\nCreate comprehensive reports highlighting potential accessibility issues\nDocument remediation steps for common accessibility violations\n\n# Best Practices\n\n**1** **Comprehensive Coverage**: Test all critical user flows for accessibility violations\n**2** **Multiple Viewport Testing**: Test accessibility across different screen sizes and devices\n**3** **Rule Configuration**: Configure axe-core rules based on project-specific requirements\n**4** **Manual Verification**: Complement automated tests with manual keyboard navigation testing\n**5** **Semantic Markup**: Verify proper use of ARIA attributes and semantic HTML elements\n**6** **Color Contrast**: Ensure sufficient contrast ratios for text and interactive elements\n**7** **Focus Management**: Test keyboard focus visibility and logical tab order\n**8** **Screen Reader Compatibility**: Verify compatibility with screen readers\n**9** **Descriptive Reporting**: Generate clear, actionable reports of accessibility violations\n\n# Input/Output Expectations\n\n**Input**: A description of a web page or user flow to test for accessibility\n**Output**: A Playwright test file with automated accessibility checks for the described page or flow\n\n# Example Accessibility Test\n\nWhen testing a login page for accessibility, implement the following pattern:\n\n```js\nimport { test, expect } from '@playwright/test';\nimport { injectAxe, checkA11y, configureAxe } from 'axe-playwright';\n\ntest.describe('Login Page Accessibility', () => {\n  test.beforeEach(async ({ page }) => {\n    await page.goto('/login');\n    await injectAxe(page);\n    \n    // Configure axe rules if needed\n    await configureAxe(page, {\n      rules: [\n        { id: 'color-contrast', enabled: true },\n        { id: 'label', enabled: true }\n      ]\n    });\n  });\n\n  test('should have no accessibility violations', async ({ page }) => {\n    // Run accessibility checks\n    await checkA11y(page, null, {\n      detailedReport: true,\n      detailedReportOptions: { html: true }\n    });\n  });\n\n  test('should be navigable by keyboard', async ({ page }) => {\n    // Send Tab key to navigate through elements\n    await page.keyboard.press('Tab');\n    let hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'username'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'password'\n    );\n    expect(hasFocus).toBeTruthy();\n    \n    await page.keyboard.press('Tab');\n    hasFocus = await page.evaluate(() => \n      document.activeElement.id === 'login-button'\n    );\n    expect(hasFocus).toBeTruthy();\n  });\n\n  test('should have proper ARIA attributes', async ({ page }) => {\n    // Check form has proper ARIA attributes\n    const form = await page.locator('form');\n    expect(await form.getAttribute('aria-labelledby')).toBeTruthy();\n    \n    // Check error messages are properly associated\n    const errorMessage = await page.locator('.error-message');\n    expect(await errorMessage.getAttribute('aria-live')).toBe('assertive');\n  });\n});\n```\n</yakaai_skills>"}