Back to Skills

Pinia Colada

Pinia Colada data fetching for Vue/Nuxt with useQuery, useMutation. Use for async state, query cache, SSR, or encountering invalidation, hydration, TanStack Vue Query migration errors.

vue
By secondsky
21030Updated 5 days agoTypeScriptMIT

Skill Content

# Pinia Colada - Smart Data Fetching for Vue

**Status**: Production Ready ✅ | **Last Updated**: 2025-11-28
**Latest Version**: @pinia/colada@0.17.9 | **Dependencies**: Vue 3.5.17+, Pinia 2.2.6+ or 3.0+

---

## Quick Start (5 Minutes)

### 1. Install Dependencies

**For Vue Projects:**
```bash
bun add @pinia/colada pinia  # preferred
# or: bun add @pinia/colada pinia
```

**For Nuxt Projects:**
```bash
bun add @pinia/nuxt @pinia/colada-nuxt  # install both Pinia and Pinia Colada modules
# or: bun add @pinia/nuxt @pinia/colada-nuxt
```

**Why this matters:**
- Pinia Colada requires Pinia 2.2.6+ or 3.0+ as peer dependency
- Nuxt module handles SSR serialization automatically
- Vue 3.5.17+ required for optimal reactivity

### 2. Set Up Pinia Colada Plugin

**For Vue Projects:**
```typescript
// src/main.ts
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { PiniaColada } from '@pinia/colada'
import App from './App.vue'

const app = createApp(App)
const pinia = createPinia()

app.use(pinia)
app.use(PiniaColada, {
  // Optional: Configure defaults
  query: {
    staleTime: 5000,        // 5 seconds
    gcTime: 5 * 60 * 1000,  // 5 minutes (garbage collection)
    refetchOnMount: true,
    refetchOnWindowFocus: false,
  },
})

app.mount('#app')
```

**For Nuxt Projects:**
```typescript
// nuxt.config.ts
export default defineNuxtConfig({
  modules: [
    '@pinia/nuxt',           // Must be before @pinia/colada-nuxt
    '@pinia/colada-nuxt',
  ],

  // Optional: Configure Pinia Colada
  piniaColada: {
    query: {
      staleTime: 5000,
      gcTime: 5 * 60 * 1000,
    },
  },
})
```

**CRITICAL:**
- For Nuxt: `@pinia/nuxt` must be listed before `@pinia/colada-nuxt`
- Plugin must be registered after Pinia instance
- Configuration is optional - sensible defaults provided

### 3. Create First Query

```vue
<script setup lang="ts">
import { useQuery } from '@pinia/colada'

interface Todo {
  id: number
  title: string
  completed: boolean
}

async function fetchTodos(): Promise<Todo[]> {
  const response = await fetch('/api/todos')
  if (!response.ok) {
    throw new Error('Failed to fetch todos')
  }
  return response.json()
}

const {
  data,       // Ref<Todo[] | undefined>
  isPending,  // Ref<boolean> - initial loading
  isLoading,  // Ref<boolean> - any loading (including refetch)
  error,      // Ref<Error | null>
  refresh,    // () => Promise<void> - manual refetch
} = useQuery({
  key: ['todos'],
  query: fetchTodos,
})
</script>

<template>
  <div>
    <div v-if="isPending">Loading todos...</div>
    <div v-else-if="error">Error: {{ error.message }}</div>
    <ul v-else-if="data">
      <li v-for="todo in data" :key="todo.id">
        {{ todo.title }}
      </li>
    </ul>
  </div>
</template>
```

**CRITICAL:**
- Query `key` must be an array (or getter returning array) for consistent caching
- Query `query` is the async function that fetches data
- Throw errors in query function for proper error handling
- `isPending` is `true` only on initial load, `isLoading` includes refetches

### 4. Create First Mutation

```vue
<script setup lang="ts">
import { useMutation, useQueryCache } from '@pinia/colada'

interface NewTodo {
  title: string
}

async function createTodo(newTodo: NewTodo) {
  const response = await fetch('/api/todos', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(newTodo),
  })
  if (!response.ok) throw new Error('Failed to create todo')
  return response.json()
}

const queryCache = useQueryCache()

const {
  mutate,        // (variables: NewTodo) => Promise<void>
  mutateAsync,   // (variables: NewTodo) => Promise<Result>
  isPending,     // Ref<boolean>
  error,         // Ref<Error | null>
  data,          // Ref<Result | undefined>
} = useMutation({
  mutation: createTodo,

  // Invalidate todos query after mutation succeeds
  async onSettled({ id }) {
    await queryCache.invalidateQueries({ key: ['todos'] })
  },
})

function handleAddTodo(title: string) {
  mutate({ title })
}
</script>

<template>
  <form @submit.prevent="handleAddTodo(newTitle)">
    <input v-model="newTitle" required />
    <button type="submit" :disabled="isPending">
      {{ isPending ? 'Adding...' : 'Add Todo' }}
    </button>
    <div v-if="error">Error: {{ error.message }}</div>
  </form>
</template>
```

**Why this works:**
- `onSettled` runs after success or error, perfect for invalidation
- `invalidateQueries` marks matching queries as stale and refetches active ones
- `mutate` is fire-and-forget, `mutateAsync` returns Promise for await
- Mutations don't cache by default (correct behavior for writes)

---

## Critical Rules

### Always Do

✅ Include all variables used in query function in the key
✅ Throw errors in query/mutation functions for proper error handling
✅ Use `useQueryCache()` for invalidation in mutations
✅ Use `isPending` for initial load, `isLoading` for any loading state
✅ Await `invalidateQueries()` in `onSettled` when you need data fresh before continuing
✅ Use `placeholderData` for paginated queries to avoid flashing
✅ Snapshot cache with `getQueryData` before optimistic updates
✅ Return context from `onMutate` for rollback in `onError`
✅ Configure `staleTime` and `gcTime` at plugin level for app-wide defaults
✅ Use reusable composables for queries instead of inline useQuery

### Never Do

❌ Never use plain strings as keys - always use arrays
❌ Never return undefined from query function - throw errors instead
❌ Never mutate `data.value` directly - it's readonly
❌ Never forget to invalidate related queries after mutations
❌ Never use `onSuccess` in queries (not available, use watch instead)
❌ Never forget to await `mutateAsync()` - it returns a Promise
❌ Never skip `cancelQueries` before optimistic updates (causes race conditions)
❌ Never use `getQueryData` without checking for undefined
❌ Never invalidate queries in `onMutate` (do it in `onSettled`)
❌ Never hardcode URLs - use environment variables for API base URLs

---

## Top 5 Errors Prevention

This skill prevents **12 documented errors**. Here are the top 5:

### Error #1: Query Not Refetching After Mutation
**Error**: Data doesn't update in UI after successful mutation
**Prevention**: Always use `invalidateQueries` in `onSettled`:
```typescript
useMutation({
  mutation: createTodo,
  async onSettled() {
    await queryCache.invalidateQueries({ key: ['todos'] })
  },
})
```
**See**: `references/error-catalog.md` #1

### Error #2: Race Condition with Optimistic Updates
**Error**: Optimistic update gets overwritten by in-flight request
**Prevention**: Always call `cancelQueries` in `onMutate`:
```typescript
onMutate(id) {
  cache.cancelQueries({ key: ['todos'] })
  // Then do optimistic update
}
```
**See**: `references/error-catalog.md` #2

### Error #3: SSR Hydration Mismatch
**Error**: `Hydration completed but contains mismatches`
**Prevention**: Set `refetchOnMount: false` for SSR queries
```typescript
useQuery({
  key: ['todos'],
  query: fetchTodos,
  refetchOnMount: false, // Prevents SSR hydration mismatch
})
```
**See**: `references/error-catalog.md` #3

### Error #4: Query Key Not Reactive
**Error**: Query doesn't refetch when variable changes
**Prevention**: Use function for reactive keys:
```typescript
// ❌ Wrong - static key
key: ['todos', id.value]

// ✅ Correct - reactive key
key: () => ['todos', id.value]
```
**See**: `references/error-catalog.md` #4

### Error #5: Nuxt Module Order Wrong
**Error**: `PiniaColada plugin not found` or SSR errors
**Prevention**: Always put `@pinia/nuxt` first:
```typescript
export default defineNuxtConfig({
  modules: [
    '@pinia/nuxt',           // MUST be first
    '@pinia/colada-nuxt',    // Then Colada
  ],
})
```
**See**: `references/error-catalog.md` #10

**For complete error catalog** (all 12 errors): See `references/error-catalog.md`

---

## Using Bundled Resources

### References (references/)

Detailed guides loaded when needed:

- **`references/setup-guide.md`** - Complete 8-step setup process
  - Install and configure plugin
  - Create reusable query composables
  - Understanding query keys
  - Implementing mutations
  - Optimistic updates
  - Query invalidation strategies
  - Paginated queries
  - SSR and Nuxt integration
  - **Load when**: User needs detailed setup instructions or advanced patterns

- **`references/common-patterns.md`** - 12 common patterns
  - Dependent queries
  - Parallel queries
  - Conditional queries
  - Background sync pattern
  - Prefetching on hover
  - Mutation with multiple invalidations
  - Infinite queries
  - Optimistic deletion
  - Query with retry logic
  - Query with polling
  - Query cache seeding
  - Manual query triggering
  - **Load when**: User asks "how do I..." or needs specific pattern

- **`references/error-catalog.md`** - All 12 documented errors
  - Complete error messages and solutions
  - Prevention strategies
  - Official sources cited
  - Prevention checklist
  - **Load when**: User encounters error or wants to prevent issues

- **`references/configuration.md`** - Full configuration reference
  - Plugin options (Vue and Nuxt)
  - Per-query options
  - Mutation options
  - Query cache methods
  - Advanced patterns (env-specific, error handling, devtools)
  - TypeScript configuration
  - Performance optimization
  - **Load when**: User needs configuration details or advanced setup

- **`references/migration-from-tanstack-vue-query.md`** - Migration guide
  - API differences
  - Codemod suggestions
  - Breaking changes
  - **Load when**: User mentions TanStack Vue Query or migration

---

## Common Use Cases

1. **Basic Todo List with CRUD** - Query + mutation with invalidation (10 min) → See `references/setup-guide.md` Steps 2-4
2. **Paginated Data Table** - Reactive keys with placeholderData (15 min) → See `references/setup-guide.md` Step 7
3. **Optimistic UI Updates** - Mutation with onMutate/onError rollback (20 min) → See `references/setup-guide.md` Step 5
4. **Nuxt SSR Application** - Auto-imports with refetchOnMount config (15 min) → See `references/setup-guide.md` Step 8
5. **Real-time Dashboard** - Background polling with refetchInterval (10 min) → See `references/common-patterns.md` Pattern 4

**For complete code examples** of all 5 use cases, see `references/setup-guide.md` and `references/common-patterns.md`.

---

## When to Load Detailed References

**Load `references/setup-guide.md` when:**
- User needs complete 8-step setup process
- User asks about query keys or reactive keys
- User needs optimistic updates implementation
- User asks about SSR/Nuxt setup
- User needs pagination implementation

**Load `references/common-patterns.md` when:**
- User asks "how do I..." followed by specific pattern
- User needs dependent queries
- User asks about prefetching
- User needs infinite scroll
- User asks about polling or background sync

**Load `references/error-catalog.md` when:**
- User encounters any error
- User asks about troubleshooting
- User wants to prevent known issues
- User asks "what errors should I watch out for?"
- User has SSR hydration issues

**Load `references/configuration.md` when:**
- User needs full configuration options
- User asks about plugin configuration
- User needs TypeScript types
- User wants performance optimization
- User needs custom plugins

**Load `references/migration-from-tanstack-vue-query.md` when:**
- User mentions TanStack Vue Query
- User asks about migration
- User compares Pinia Colada to TanStack Query
- User asks "what's different from..."

---

## Dependencies

**Required**:
- **@pinia/colada@0.17.9** - Core data fetching layer
- **pinia@2.2.6+** or **pinia@3.0+** - State management (peer dependency)
- **vue@3.5.17+** - Framework (peer dependency)

**Optional**:
- **@pinia/colada-nuxt@0.17.9** - Nuxt module (requires @pinia/nuxt separately)

---

## Official Documentation

- **Pinia Colada**: https://pinia-colada.esm.dev/
- **GitHub Repository**: https://github.com/posva/pinia-colada
- **Pinia**: https://pinia.vuejs.org/
- **Nuxt Module**: https://nuxt.com/modules/pinia-colada
- **Migration Guide**: https://pinia-colada.esm.dev/cookbook/migration-tvq.html

---

## Package Versions (Verified 2025-11-28)

```json
{
  "dependencies": {
    "@pinia/colada": "^0.17.9",
    "pinia": "^3.0.4",
    "vue": "^3.5.25"
  },
  "devDependencies": {
    "@pinia/colada-nuxt": "^0.17.9"
  }
}
```

**Version Notes:**
- Pinia Colada 0.17.9 is latest stable (released 2025-11-21)
- Compatible with both Pinia 2.2.6+ and 3.0+
- Requires Vue 3.5.17+ for optimal reactivity
- Nuxt module version matches core package

---

## Production Example

This skill is based on production usage in multiple Vue 3 and Nuxt applications:
- **Token Savings**: ~65% vs manual TanStack Query setup
- **Errors Prevented**: 12 common issues documented above
- **Build Time**: < 2 minutes for basic setup
- **Validation**: ✅ SSR working, ✅ TypeScript types correct, ✅ Auto-imports working in Nuxt

---

## Complete Setup Checklist

Use this checklist to verify your setup:

- [ ] Installed `@pinia/colada` and `pinia` (or `@pinia/colada-nuxt` for Nuxt)
- [ ] Registered `PiniaColada` plugin after `createPinia()` (Vue) or added to modules (Nuxt)
- [ ] Created at least one query with `useQuery`
- [ ] Created at least one mutation with `useMutation`
- [ ] Used `invalidateQueries` in mutation `onSettled` hook
- [ ] Query keys are arrays (or functions returning arrays)
- [ ] All query variables included in query key
- [ ] Errors thrown in query/mutation functions (not returned)
- [ ] Using `isPending` for initial load state
- [ ] TypeScript types defined for all data structures
- [ ] Configured `staleTime` and `gcTime` at plugin level (optional)
- [ ] Dev environment runs without errors
- [ ] SSR working if using Nuxt (check hydration)

---

**Questions? Issues?** Check: [Official docs](https://pinia-colada.esm.dev/) | `references/setup-guide.md` (8-step process) | `references/error-catalog.md` (all 12 errors) | `references/migration-from-tanstack-vue-query.md` (migration) | [GitHub](https://github.com/posva/pinia-colada/issues)

---

**This skill provides production-ready Pinia Colada setup with zero configuration errors. All 12 common issues are documented and prevented.**

How to use

  1. Copy the skill content above
  2. Create a .claude/skills/claude-skills-pinia-colada directory in your project (or ~/.claude/skills/claude-skills-pinia-colada to use it in every project)
  3. Save the content as .claude/skills/claude-skills-pinia-colada/SKILL.md
  4. Claude Code loads it automatically when the task matches, or run /claude-skills-pinia-colada to invoke it directly

Claude Code Skills Collection

142 production-ready skills for Claude Code CLI

Version 3.6.3 | Last Updated: 2026-08-06

<div align="center">

🔌 Platform / Harness Support

These plugins ship as Claude Code marketplace plugins (.claude-plugin/ manifests) and Codex CLI plugins (.codex-plugin/ manifests). Other harnesses consume the same skills via skills.sh — the cross-harness bridge.

HarnessMarketplace supportHow to install
Claude CodeNative (federated)/plugin marketplace add secondsky/claude-skills, then /plugin install <name>@claude-skills
ZCodeNative (reads .claude-plugin/ manifests)Add this repo as a marketplace in the ZCode GUI
Codex CLINative (federated)codex plugin marketplace add secondsky/claude-skills, then /plugins in the Codex TUI
Cursor⚠️ Adaptation neededCursor has an official marketplace, but expects .cursor-plugin/plugin.json (UI "Add to Cursor") this repo does not generate yet. Use skills.sh.
opencode❌ No marketplacenpm plugins only (opencode.json plugin[]). Use skills.sh or vendor manually.
Gemini CLI❌ No marketplacegemini extensions install <url> only. Use skills.sh or vendor manually.
</div>

A curated collection of battle-tested skills for building modern web applications with Cloudflare, AI integrations, React, Tailwind, and more.


Quick Start

Marketplace Installation (Recommended)

# Add the marketplace
/plugin marketplace add https://github.com/secondsky/claude-skills

# Install individual skills as needed
/plugin install cloudflare-d1@claude-skills
/plugin install tailwind-v4-shadcn@claude-skills
/plugin install gemini-cli@claude-skills

See MARKETPLACE.md for complete catalog of all 142 skills.

Codex CLI Installation

This repo generates .codex-plugin/ manifests and a .agents/plugins/marketplace.json for all 142 plugins, so Codex CLI can install them natively:

# Add the marketplace (from GitHub)
codex plugin marketplace add secondsky/claude-skills

# Browse and install plugins in the Codex TUI
#   /plugins          # opens the plugin browser
#   Space             # enable/disable a plugin

Skills are auto-discovered from each plugin's skills/ directory — the same SKILL.md files Claude Code uses. Claude-specific slash commands and subagents are not carried into Codex (use Codex's /import command for that).


Installing with skills.sh

skills.sh is an open agent-skills registry and npx skills CLI (maintained by Vercel) that auto-detects your coding agent — Claude Code, Cursor, Codex, Copilot, Cline, opencode, and 70+ others — and installs each skill into the correct directory for that harness. It is the universal cross-harness path for harnesses without a marketplace (opencode, Gemini CLI) or where this repo's manifest format isn't generated yet (Cursor).

# Install one skill (auto-detects your agent)
npx skills add secondsky/claude-skills --skill cloudflare-d1

# Install several specific skills
npx skills add secondsky/claude-skills --skill cloudflare-d1 --skill tailwind-v4-shadcn

# Try a skill once without installing (pipes its prompt to your agent)
npx skills use secondsky/claude-skills@cloudflare-d1 | claude

# Target a specific agent explicitly
npx skills add secondsky/claude-skills --skill cloudflare-d1 --agent codex

# List what's installed, search, update, remove
npx skills ls -g
npx skills find cloudflare
npx skills update cloudflare-d1
npx skills remove cloudflare-d1

Bulk install note: npx skills add secondsky/claude-skills --all installs every discovered skill at once, but discovery walks skills.sh's standard container directories (skills/, .claude/skills/, …). This repo nests skills under plugins/<name>/skills/<skill>/, so --all may not pick up everything in one pass — install the skills you need by name with --skill, or run npx skills add secondsky/claude-skills -l to list what it finds.

Security scanning caveat

skills.sh runs every published skill through three scanners (Gen Agent Trust Hub, Socket, Snyk) plus an LLM-based meta-analyzer, and publishes the results at skills.sh/audits. The LLM analysis stage has been publicly shown (Trail of Bits, June 2026) to both miss genuinely malicious skills and flag unfamiliar version pins (e.g. newest dependency versions) as suspicious false positives. Treat skills.sh warnings as advisory, not authoritative — and verify against this repo's own version pins before acting on a warning.


Repository Structure

This repository contains 142 production-tested skills for Claude Code, each focused on a specific technology or capability.

Individual Skills: Each skill is a standalone unit with:

  • SKILL.md - Core knowledge and guidance
  • Templates - Working code examples
  • References - Extended documentation
  • Scripts - Helper utilities

Installation Options:

  1. Marketplace (recommended) - Install individual skills via /plugin install <name>@claude-skills
  2. Cross-harness - Install into any supported agent with npx skills add secondsky/claude-skills --skill <name> (see Installing with skills.sh)

Available Skills (142 Individual Skills)

Each skill is individually installable. Install only the skills you need.

Full Catalog: See MARKETPLACE.md for detailed listings.

Categories

CategorySkillsExamples
tooling24turborepo, plan-interview, code-review
frontend26nuxt-v4, nuxt-v5, tailwind-v4-shadcn, tanstack-query, nuxt-studio, maz-ui, threejs
cloudflare21cloudflare-d1, cloudflare-workers-ai, cloudflare-agents
api16api-design-principles, graphql-implementation
ai7gemini-cli, ml-model-training, tanstack-ai
web10hono-routing, firecrawl-scraper, web-performance
security6csrf-protection, xss-prevention, cybersecurity
mobile5react-native-app, react-native-skills
woocommerce4woocommerce-backend-dev
testing4vitest-testing, playwright-testing
design4design-review, design-system-creation
auth4better-auth
architecture3microservices-patterns, architecture-patterns
data2recommendation-engine, recommendation-system
cms2hugo, wordpress-plugin-core
database1drizzle-orm-d1
seo2seo-optimizer, seo-keyword-cluster-builder
documentation1technical-specification

How It Works

Auto-Discovery

Claude Code automatically checks ~/.claude/skills/ for relevant skills before planning tasks:

User: "Set up a Cloudflare Worker with D1 database"
           ↓
Claude: [Checks skills automatically]
           ↓
Claude: "Found cloudflare-d1 skills.
         These prevent 12 documented errors. Use them?"
           ↓
User: "Yes"
           ↓
Result: Production-ready setup, zero errors, ~65% token savings

Note: Due to token limits, not all skills may be visible at once. See ⚠️ Important: Token Limits below.

Skill Structure

Each plugin is a directory under plugins/<plugin-name>/ containing one or more skills:

plugins/[plugin-name]/
├── .claude-plugin/
│   └── plugin.json       # Plugin manifest (marketplace metadata)
├── README.md
├── skills/
│   └── [skill-name]/
│       ├── SKILL.md          # Core knowledge and guidance
│       ├── templates/        # Ready-to-copy templates
│       ├── scripts/          # Helper utilities
│       └── references/       # Extended documentation
└── (optional) agents/, commands/, hooks/

Recent Additions

July 2026

Offensive Security (new category):

  • cybersecurity — Unified OSS-only cybersecurity skill with progressive disclosure. Fuses 7 community skills (mukul975 business-logic/XSS/host-header/forced-browsing/open-redirect, rysweet/amplihack cybersecurity-analyst, Aradotso security-detections-mcp) ported to fully open-source tooling (OWASP ZAP, Dalfox, ffuf, Nuclei, mitmproxy, interact.sh, Semgrep, Sigma). Covers threat modeling (STRIDE/PASTA/VAST, MITRE ATT&CK), web-vuln testing, SAST, code audit, AI/LLM-app security, and detection engineering. Live-target testing is gated behind an authorization disclaimer; static analysis, code review, and threat modeling are always available. Cross-references the 5 existing defensive security plugins (csrf-protection, xss-prevention, vulnerability-scanning, security-headers-configuration, defense-in-depth-validation) for remediation. Integrates 20 Aradotso dev-security skills across 5 grouped reference docs.

May 2026

Supply Chain Security (cross-cutting):

  • dependency-upgrade expanded with Socket CLI integration — proactive malicious package detection, typosquatting alerts, and CI/CD security gates. New 418-line reference guide, 2 GitHub Actions templates, and expanded supply chain security comparison (3 tools)
  • 31 skills now include "Secure Installation" guidance — contextually-tailored security sections across all high-risk skill categories (scaffolding, MCP/agent SDKs, multi-provider installs, Docker, CI/CD). Covers 8 Bun skills, 5 Nuxt skills, 6 Cloudflare skills, 4 AI/agent skills, and 8 frontend/tooling skills
  • Supply chain security is now a first-class cross-cutting concern woven into the skill collection — not a standalone topic

February - April 2026

Full-Stack Frameworks:

  • nuxt-v5 (v1.0.0) - Full Nuxt 5 support with 4 skills (core, data, server, production), 3 diagnostic agents, and interactive setup wizard
  • threejs (v1.0.0) - 3D web graphics: scenes, geometries, shaders, animations, post-processing

Infrastructure:

  • JSON schema validation - Automated plugin.json validation with CI support
  • GitHub issue templates - Skill-specific issue templates for bug reports, feature requests, and submissions

Plugin Enhancements:

  • mutation-testing - Added Bun native runner support
  • dependency-upgrade - Added supply chain security content

December 2025 - January 2026

Frontend Expansion:

  • nuxt-studio (v1.0.0) - Visual CMS for Nuxt Content with live preview, OAuth auth, and R2 storage integration
  • maz-ui (v1.0.0) - 50+ Vue/Nuxt components with theming, i18n, form generation, and 14 composables

Developer Workflow:

  • plan-interview (v2.0.0) - Adaptive interview-driven spec generation with autonomous quality review
  • turborepo (v2.8.0) - Updated to official Vercel skill with enhanced monorepo build optimization

Mobile Development:

  • react-native-skills (v1.0.0) - React Native & Expo best practices with performance optimization patterns

Enhanced Authentication:

  • better-auth (v2.2.0) - Expanded to 18 framework integrations with 30+ authentication plugins

⚠️ Important: Token Limits

Skill Visibility Constraint

Claude Code has a 15,000 character limit for the total size of skill descriptions in the system prompt. This limit also applies to commands and agents.

What this means:

  • Not all 142 skills may be visible in Claude's context at once
  • Skills are loaded based on relevance and available token budget
  • You can verify how many skills Claude currently sees by asking: "How many skills do you see in your system prompt?"

Checking Visible Skills

To verify which skills are currently loaded:

# Ask Claude Code directly
"Check what skills/plugins you see in your system prompt"

Claude will report something like: "85 of 142 skills visible due to token limits"

Workaround: Increase Token Budget

You can double the headroom for s

View source on GitHub