AI SDK guidance for building AI-powered features. Loads correct patterns, warns about deprecated APIs, and guides through chat UIs, agents, structured output, and streaming. Use when building AI features, debugging AI SDK errors, or before implementing any AI work.
Install
npx skillscat add howells/arc/ai Install via the SkillsCat registry.
BANNED TOOLS — calling these is a skill violation:
EnterPlanMode— BANNED. Do NOT call this tool. This skill has its own structured process. Execute the steps below directly.ExitPlanMode— BANNED. You are never in plan mode.</tool_restrictions>
───────────────────────────────────────────────────────────AI SDK 6 guidance for building AI-powered features.
**Read after detecting AI SDK (Step 1):** 1. ${CLAUDE_PLUGIN_ROOT}/references/ai-sdk.md — Patterns and code examples 2. ${CLAUDE_PLUGIN_ROOT}/rules/ai-sdk.md — MUST/NEVER constraints </required_reading>Step 1: Detect AI SDK
Check package.json for AI SDK:
grep -E '"ai"' package.jsonIf not found:
AI SDK (`ai` package) not found in this project.
1. Install it — `pnpm add ai @ai-sdk/react @openrouter/ai-sdk-provider`
2. Skip — I'll explain the patterns without a project contextWait for user choice. If install, run the command and continue.
If found, extract version:
grep -A1 '"ai"' package.json | grep -oE '[0-9]+\.[0-9]+\.[0-9]+'If version < 6:
⚠ AI SDK version [version] detected. Version 6 has breaking changes that affect
almost every API. The patterns I'll load are for v6+.
If you're migrating, I'll highlight what changed. If you're staying on v5, some
patterns won't apply.
Continue with v6 patterns? (recommended even for planning a migration)Step 2: Load Reference & Rules
Read the patterns reference:
Read: ${CLAUDE_PLUGIN_ROOT}/references/ai-sdk.mdRead the rules (MUST/NEVER constraints):
Read: ${CLAUDE_PLUGIN_ROOT}/rules/ai-sdk.mdStep 3: Understand What the User Is Building
Ask what they're working on:
AI SDK reference loaded. What are you building?
1. Chat UI — useChat, message rendering, streaming
2. Agent — tool loops, multi-step reasoning
3. Structured output — typed responses from LLMs
4. Streaming API — streamText, server routes
5. All of the above — full reference
6. Debugging — something isn't workingUse AskUserQuestion with these options.
Step 4: Present Relevant Patterns
Based on user selection, highlight the most relevant sections from the reference:
Chat UI: Focus on useChat v6 setup (DefaultChatTransport, manual input state, sendMessage), toUIMessageStreamResponse, typed tool parts.
Agent: Focus on ToolLoopAgent, stopWhen: stepCountIs(n), InferAgentUIMessage, createAgentUIStreamResponse with uiMessages.
Structured output: Focus on Output.object, Output.array, Output.choice, accessing result.output.
Streaming: Focus on streamText, toUIMessageStreamResponse, createAgentUIStreamResponse.
All: Present the quick migration table and note which sections are available.
Debugging: Ask for the error message. Common issues:
toDataStreamResponse is not a function→ renamed totoUIMessageStreamResponseCannot read property 'args'→ renamed toinputgenerateObject is not a function→ usegenerateTextwithOutput.objectmaxSteps is not a valid option→ usestopWhen: stepCountIs(n)- Request hangs silently → check prompt size (>100K tokens causes silent failures on OpenRouter)
Step 5: Load Project Rules (if .ruler/ exists)
Check for project rules:
ls .ruler/ai-sdk.md 2>/dev/nullIf .ruler/ai-sdk.md exists, it's already loaded by build agents. Note this to the user.
If it doesn't exist but .ruler/ does exist:
Your project has coding rules (.ruler/) but no AI SDK rules yet.
Run /arc:rules to update, or I can copy them now.Step 6: Offer Next Steps
AI SDK context loaded. Ready to build.
1. Start building → /arc:build or /arc:implement
2. Review existing AI code → I'll check for deprecated API usage
3. Set up from scratch → I'll scaffold the provider, route, and componentIf user selects "Review existing AI code":
- Grep for deprecated patterns:
generateObject,maxTokens,maxSteps,toDataStreamResponse,addToolResult,part.args,part.result,tool-invocation - Report findings with file:line references and the correct v6 replacement