ai-sdk-model-manager
Manages AI SDK model configurations - updates packages, identifies missing models, adds new models with research, and updates documentation
Use this skill when creating, modifying, or reviewing any .tsx component in apps/web, even if the user doesn't mention "accessibility." Covers semantic HTML, aria labels, navigation landmarks, forms, dialogs, and keyboard navigation. Trigger on: adding buttons, links, toggles,
$ npx -y skills add tambo-ai/tambo --skill validating-accessibility --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/validating-accessibilityContext preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when creating, modifying, or reviewing any .tsx component in apps/web, even if the user doesn't mention "accessibility." Covers semantic HTML, aria labels, navigation landmarks, forms, dialogs, and keyboard navigation. Trigger on: adding buttons, links, toggles,
name: validating-accessibility description: >- Use this skill when creating, modifying, or reviewing any .tsx component in apps/web, even if the user doesn't mention "accessibility." Covers semantic HTML, aria labels, navigation landmarks, forms, dialogs, and keyboard navigation. Trigger on: adding buttons, links, toggles, icons, or any interactive element; building or editing forms; adding dialogs or modals; reviewing UI code. Includes inline verification patterns for scanning violations. Not for styling or layout changes that don't involve interactive elements. metadata: internal: true
Every UI component in `apps/web` must meet these standards. No partial compliance.
Use native elements. Never recreate `<button>` behavior with `<div role="button">` + keyboard handlers.
| Interaction | Element | | ---------------- | ------------------------------------------------------ | | Clickable action | `<button>` or `<Button>` from `@/components/ui/button` | | Navigation link | `<Link>` (Next.js) or `<a>` | | Navigation group | `<nav>` with descriptive `aria-label` | | Item list | `<ul>`/`<ol>` + `<li>` | | Section heading | `<h1>`-`<h6>` in order, never skip levels |
Every interactive element without visible text needs `aria-label` with both action AND target:
<Button size="icon" aria-label={`Delete API key ${keyName}`}>
<Trash2 className="h-4 w-4" />
</Button>
<Switch aria-label={`${enabled ? "Disable" : "Enable"} skill ${skillName}`} />Prefer state-aware labels ("Copied!" vs "Copy"). Buttons with visible text skip `aria-label`.
**Reference implementations:** `copy-button.tsx` (state-aware), `context-attachment-badge.tsx` (contextual remove), `thread-table-header.tsx` (sort state) -- all in `apps/web/components/`.
Wrap navigation groups in `<nav>` with a unique `aria-label` per region on the page.
Use shadcn Form components from `@/components/ui/form` (`FormField`, `FormItem`, `FormLabel`, `FormControl`, `FormMessage`). They handle ID generation, label association, `aria-describedby`, and `aria-invalid` automatically.
For standalone inputs outside react-hook-form, pair `useId()` with `htmlFor`/`id`. Never use placeholder as label substitute.
Scan `apps/web/components` for common violations. For each check, grep for the pattern and fix any matches found.
Search for `role="button"` in `.tsx` files. Flag `<div` or `<span` elements with this attribute; they should be `<button>` or `<Button>` instead. `<TableHead>` elements with `role="button"` for sortable columns are acceptable.
**Pattern:** `role="button"`
Search for `<div` elements with `onClick` handlers. These should use `<button>` instead for proper keyboard support.
**Pattern:** `<div[^>]*onClick`
Search for `tabIndex` with values greater than 0. Only `tabIndex={0}` and `tabIndex={-1}` are allowed.
**Pattern:** `tabIndex={[1-9]`
Search for `size="icon"` in `.tsx` files. For each match, check surrounding lines (5-10 above and below) for `aria-label` on the same `<Button>` element or an `sr-only` span. Flag buttons that have neither.
**Pattern:** `size="icon"` without nearby `aria-label`
These cannot be detected by pattern matching:
Repo: tambo-ai/tambo
Manages AI SDK model configurations - updates packages, identifies missing models, adds new models with research, and updates documentation
Guides CRUD operations for API resources with cascading dependencies, descriptive validation, and orphan prevention. Use when adding delete/remove operations,…
Use this skill when adding or modifying settings UI in Tambo Cloud. Covers where a new settings section belongs (Agent tab vs Settings tab), and the component…
Creates unstyled compound components that separate business logic from styles. Use when building headless UI primitives, creating component libraries,…
Creates styled wrapper components that compose headless/base compound components. Use when refactoring styled components to use base primitives, implementing…
Integrates Tambo into existing React apps — detects tech stack, installs @tambo-ai/react, wires TamboProvider, registers components with Zod schemas, and sets…