create-agent-tui
Scaffolds a complete agent TUI in TypeScript using @openrouter/agent — like create-react-app for terminal agents. Generates a…
Migration guide from @openrouter/sdk to @openrouter/agent for callModel, tool(), stop conditions, and agent features. This skill should be used when code imports callModel, tool(), or stop conditions from @openrouter/sdk and needs to migrate to @openrouter/agent.
$ npx -y skills add openrouterteam/skills --skill openrouter-agent-migration --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/openrouter-agent-migrationContext preview
The summary Claude sees to decide when to auto-load this skill.
Migration guide from @openrouter/sdk to @openrouter/agent for callModel, tool(), stop conditions, and agent features. This skill should be used when code imports callModel, tool(), or stop conditions from @openrouter/sdk and needs to migrate to @openrouter/agent.
name: openrouter-agent-migration description: Migration guide from @openrouter/sdk to @openrouter/agent for callModel, tool(), stop conditions, and agent features. This skill should be used when code imports callModel, tool(), or stop conditions from @openrouter/sdk and needs to migrate to @openrouter/agent. version: 1.0.0
Agent functionality (`callModel`, `tool()`, stop conditions, format converters, streaming helpers) has moved from `@openrouter/sdk` to the standalone `@openrouter/agent` package. The `@openrouter/agent` package includes its own `OpenRouter` client class, so you do not need `@openrouter/sdk` for agent use cases.
---
Migrate if your code imports any of these from `@openrouter/sdk`:
---
npm install @openrouter/agent
If you only use agent features, you can remove `@openrouter/sdk`:
npm uninstall @openrouter/sdk npm install @openrouter/agent
If you also use non-agent SDK features (models list, chat completions, credits, OAuth, API keys), keep both packages installed.
The `OpenRouter` client class and `client.callModel()` pattern work identically. Only the import source changes:
- import OpenRouter from '@openrouter/sdk';
+ import { OpenRouter } from '@openrouter/agent';The rest of your code stays the same:
const client = new OpenRouter({ apiKey: process.env.OPENROUTER_API_KEY });
const result = client.callModel({
model: 'openai/gpt-5-nano',
input: 'Hello!',
});
const text = await result.getText();---
| Old | New | |-----|-----| | `import OpenRouter from '@openrouter/sdk'` | `import { OpenRouter } from '@openrouter/agent'` | | `import OpenRouter, { tool, stepCountIs } from '@openrouter/sdk'` | `import { OpenRouter } from '@openrouter/agent'`<br>`import { tool } from '@openrouter/agent/tool'`<br>`import { stepCountIs } from '@openrouter/agent/stop-conditions'` |
A standalone `callModel` function is also available for advanced use cases where a pre-existing `OpenRouterCore` instance is available:
import { callModel } from '@openrouter/agent/call-model';
// Requires an OpenRouterCore instance (from @openrouter/sdk/core)
const result = callModel(coreInstance, { model: 'openai/gpt-5-nano', input: 'Hello' });For most use cases, prefer the `client.callModel()` method shown above.
| Old | New | |-----|-----| | `import { tool } from '@openrouter/sdk'` | `import { tool } from '@openrouter/agent/tool'` |
| Old | New | |-----|-----| | `import { stepCountIs, hasToolCall, maxCost } from '@openrouter/sdk'` | `import { stepCountIs, hasToolCall, maxCost } from '@openrouter/agent/stop-conditions'` | | `import { maxTokensUsed, finishReasonIs } from '@openrouter/sdk'` | `import { maxTokensUsed, finishReasonIs } from '@openrouter/agent/stop-conditions'` |
| Old | New | |-----|-----| | `import type { Tool, ToolWithExecute, ToolWithGenerator, ManualTool } from '@openrouter/sdk/lib/tool-types'` | `import type { Tool, ToolWithExecute, ToolWithGenerator, ManualTool } from '@openrouter/agent/tool-types'` | | `import type { CallModelInput } from '@openrouter/sdk/lib/async-params'` | `import type { CallModelInput } from '@openrouter/agent/async-params'` | | `import { ModelResult } from '@openrouter/sdk/lib/model-result'` | `import { ModelResult } from '@openrouter/agent/model-result'` |
| Old | New | |-----|-----| | `import { fromClaudeMessages, toClaudeMessage } from '@openrouter/sdk'` | `import { fromClaudeMessages, toClaudeMessage } from '@openrouter/agent'` | | `import { fromChatMessages, toChatMessage } from '@openrouter/sdk'` | `import { fromChatMessages, toChatMessage } from '@openrouter/agent'` |
| Old | New | |-----|-----| | `import { hasExecuteFunction, isGeneratorTool, isRegularExecuteTool } from '@openrouter/sdk'` | `import { hasExecuteFunction, isGeneratorTool, isRegularExecuteTool } from '@openrouter/agent/tool-types'` |
---
import OpenRouter, { tool, stepCountIs, hasToolCall } from '@openrouter/sdk';
import { z } from 'zod';
const client = new OpenRouter({
apiKey: process.env.OPENROUTER_API_KEY,
});
const searchTool = tool({
name: 'web_search',
description: 'Search the web',
inputSchema: z.object({ query: z.string() }),
outputSchema: z.object({ results: z.array(z.string()) }),
execute: async ({ query }) => {
return { results: ['Result 1', 'Result 2'] };
},
});
const finishTool = tool({
name: 'finish',
description: 'Complete the task',
inputSchema: z.object({ answer: z.string() }),
execute: async ({ answer }) => ({ answer }),
});
const result = client.callModel({
model: 'openai/gpt-5-nano',
instructions: 'You are a research assistant.',
input: 'What are the latest AI developments?',
tools: [searchTool, finishTool],
stopWhen: [stepCountIs(10), hasToolCall('finish')],
});
const text = await result.getText();import { OpenRouter } from '@openrouter/agent';
import { tool } from '@openrouter/agent/tool';
import { stepCountIs, hasToolCall } from '@openrouter/agent/stop-conditions';
import { z } from 'zod';
const client = new OpenRouter({
apiKey: process.env.OPENROUTER_API_KEY,
});
const searchTool = tool({
name: 'web_search',
description: 'Search the web',
inpA collection of Agent Skills for building with OpenRouter — a unified API for 600+ AI models.
Scaffolds a complete agent TUI in TypeScript using @openrouter/agent — like create-react-app for terminal agents. Generates a…
Scaffolds a headless agent in TypeScript using @openrouter/agent and Bun — for CLI tools, API servers, queue workers, and…
Install Ori and run the user's existing coding agent CLI through Ori on OpenRouter, with OAuth sign-in, model selection,…
Construct and execute analytics queries against the OpenRouter API — full parameter reference for metrics, dimensions, filters,…
Discover the OpenRouter analytics schema — available metrics, dimensions, filter operators, and granularities. Use when you need…
Answer natural-language questions about a user's OpenRouter usage data — spend, request volume, model breakdown, latency, token…