{"_id":"@doraemon4dj/open-agent-sdk","_rev":"2-c6c7822b90191fb31ceff8a1692a8b4f","name":"@doraemon4dj/open-agent-sdk","dist-tags":{"latest":"0.2.1"},"versions":{"0.2.0":{"name":"@doraemon4dj/open-agent-sdk","version":"0.2.0","keywords":["open-agent-sdk","codeany","agent","sdk","ai","llm","tools","agentic","coding-agent","mcp"],"author":{"url":"https://codeany.ai","name":"CodeAny"},"license":"MIT","_id":"@doraemon4dj/open-agent-sdk@0.2.0","maintainers":[{"name":"doraemon01","email":"jiao.duan1994@gmail.com"}],"homepage":"https://github.com/codeany-ai/open-agent-sdk-typescript","bugs":{"url":"https://github.com/codeany-ai/open-agent-sdk-typescript/issues"},"dist":{"shasum":"2a5a37a5bf9d445bdf25fcd394bd1c88e8b7212c","tarball":"https://registry.npmjs.org/@doraemon4dj/open-agent-sdk/-/open-agent-sdk-0.2.0.tgz","fileCount":74,"integrity":"sha512-OW9d1ldOtsleTLKUKRIwjbf7tqwVDWrMST9mHNo00QrIQWk6125j5xRUc3MfWyD7DeRnSRPRLMqbMJGMcY2T9w==","signatures":[{"sig":"MEUCIQDZHf7TYmLRawo7GJM9mZrfypnGJqU2HpabU49m70Q9LQIgX4ldvvnTXJbiiGEHwZ//WGIQtUX1D5V322ZCbLQA/rM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":289296},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"366438d2ef94775a4515301bcf8a58ab866c1731","scripts":{"dev":"tsc --watch","web":"npx tsx examples/web/server.ts","test":"npx tsx examples/01-simple-query.ts","build":"tsc","test:all":"for f in examples/*.ts; do echo \"--- Running $f ---\"; npx tsx $f; echo; done"},"_npmUser":{"name":"doraemon01","email":"jiao.duan1994@gmail.com"},"repository":{"url":"git+https://github.com/codeany-ai/open-agent-sdk-typescript.git","type":"git"},"_npmVersion":"10.9.4","description":"Open-source Agent SDK. Runs the full agent loop in-process — no local CLI required. Deploy anywhere: cloud, serverless, Docker, CI/CD.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"zod":"^3.23.0","@anthropic-ai/sdk":"^0.52.0","zod-to-json-schema":"^3.24.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/open-agent-sdk_0.2.0_1776419011135_0.6466730634102236","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@doraemon4dj/open-agent-sdk","author":{"name":"CodeAny","url":"https://codeany.ai"},"homepage":"https://github.com/codeany-ai/open-agent-sdk-typescript","repository":{"type":"git","url":"git+https://github.com/codeany-ai/open-agent-sdk-typescript.git"},"bugs":{"url":"https://github.com/codeany-ai/open-agent-sdk-typescript/issues"},"version":"0.2.1","description":"Open-source Agent SDK. Runs the full agent loop in-process — no local CLI required. Deploy anywhere: cloud, serverless, Docker, CI/CD.","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"clean":"rm -rf dist","build":"tsc","dev":"tsc --watch","prepublishOnly":"npm run clean && npm run build","test":"npx tsx examples/01-simple-query.ts","test:all":"for f in examples/*.ts; do echo \"--- Running $f ---\"; npx tsx $f; echo; done","web":"npx tsx examples/web/server.ts"},"engines":{"node":">=18.0.0"},"dependencies":{"@anthropic-ai/sdk":"^0.52.0","@modelcontextprotocol/sdk":"^1.12.1","zod":"^3.23.0","zod-to-json-schema":"^3.24.0"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.7.0"},"keywords":["open-agent-sdk","codeany","agent","sdk","ai","llm","tools","agentic","coding-agent","mcp"],"license":"MIT","_id":"@doraemon4dj/open-agent-sdk@0.2.1","gitHead":"366438d2ef94775a4515301bcf8a58ab866c1731","_nodeVersion":"20.12.0","_npmVersion":"10.5.0","dist":{"integrity":"sha512-D1ncxQr2lwJCzYnwGZogjt2lkZqbDnbuFDPYo/55l5aIC3OTuf5gHOAZeb9OwNFvaA9MaDke/KyU+JAFTKhnkQ==","shasum":"19c8655a6a42038b6ef74e77b77295bc1f70f952","tarball":"https://registry.npmjs.org/@doraemon4dj/open-agent-sdk/-/open-agent-sdk-0.2.1.tgz","fileCount":215,"unpackedSize":502157,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCr16G8thx8+5psMcY0sCOLsTqUmnndEFTarPKXxaJ2QAIgPcBnJj/51kBbFyC6wRl0mFCbJxG8EUpyaExUhVxOqLM="}]},"_npmUser":{"name":"doraemon01","email":"jiao.duan1994@gmail.com"},"directories":{},"maintainers":[{"name":"doraemon01","email":"jiao.duan1994@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/open-agent-sdk_0.2.1_1776422151923_0.6410738757665175"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-17T09:43:31.032Z","modified":"2026-04-17T10:35:52.230Z","0.2.0":"2026-04-17T09:43:31.315Z","0.2.1":"2026-04-17T10:35:52.077Z"},"bugs":{"url":"https://github.com/codeany-ai/open-agent-sdk-typescript/issues"},"author":{"name":"CodeAny","url":"https://codeany.ai"},"license":"MIT","homepage":"https://github.com/codeany-ai/open-agent-sdk-typescript","keywords":["open-agent-sdk","codeany","agent","sdk","ai","llm","tools","agentic","coding-agent","mcp"],"repository":{"type":"git","url":"git+https://github.com/codeany-ai/open-agent-sdk-typescript.git"},"description":"Open-source Agent SDK. Runs the full agent loop in-process — no local CLI required. Deploy anywhere: cloud, serverless, Docker, CI/CD.","maintainers":[{"name":"doraemon01","email":"jiao.duan1994@gmail.com"}],"readme":"# Open Agent SDK (TypeScript)\n\n[![npm version](https://img.shields.io/npm/v/@doraemon4dj/open-agent-sdk)](https://www.npmjs.com/package/@doraemon4dj/open-agent-sdk)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)\n\nOpen-source Agent SDK that runs the full agent loop **in-process** — no subprocess or CLI required. Supports both **Anthropic** and **OpenAI-compatible** APIs. Deploy anywhere: cloud, serverless, Docker, CI/CD.\n\nAlso available in **Go**: [open-agent-sdk-go](https://github.com/codeany-ai/open-agent-sdk-go)\n\n## Get started\n\n```bash\nnpm install @doraemon4dj/open-agent-sdk\n```\n\nSet your API key:\n\n```bash\nexport CODEANY_API_KEY=your-api-key\n```\n\n### OpenAI-compatible models\n\nWorks with OpenAI, DeepSeek, Qwen, Mistral, or any OpenAI-compatible endpoint:\n\n```bash\nexport CODEANY_API_TYPE=openai-completions\nexport CODEANY_API_KEY=sk-...\nexport CODEANY_BASE_URL=https://api.openai.com/v1\nexport CODEANY_MODEL=gpt-4o\n```\n\n### Third-party Anthropic-compatible providers\n\n```bash\nexport CODEANY_BASE_URL=https://openrouter.ai/api\nexport CODEANY_API_KEY=sk-or-...\nexport CODEANY_MODEL=anthropic/claude-sonnet-4\n```\n\n## Quick start\n\n### One-shot query (streaming)\n\n```typescript\nimport { query } from \"@doraemon4dj/open-agent-sdk\";\n\nfor await (const message of query({\n  prompt: \"Read package.json and tell me the project name.\",\n  options: {\n    allowedTools: [\"Read\", \"Glob\"],\n    permissionMode: \"bypassPermissions\",\n  },\n})) {\n  if (message.type === \"assistant\") {\n    for (const block of message.message.content) {\n      if (\"text\" in block) console.log(block.text);\n    }\n  }\n}\n```\n\n### Simple blocking prompt\n\n```typescript\nimport { createAgent } from \"@doraemon4dj/open-agent-sdk\";\n\nconst agent = createAgent({ model: \"claude-sonnet-4-6\" });\nconst result = await agent.prompt(\"What files are in this project?\");\n\nconsole.log(result.text);\nconsole.log(\n  `Turns: ${result.num_turns}, Tokens: ${result.usage.input_tokens + result.usage.output_tokens}`,\n);\n```\n\n### OpenAI / GPT models\n\n```typescript\nimport { createAgent } from \"@doraemon4dj/open-agent-sdk\";\n\nconst agent = createAgent({\n  apiType: \"openai-completions\",\n  model: \"gpt-4o\",\n  apiKey: \"sk-...\",\n  baseURL: \"https://api.openai.com/v1\",\n});\n\nconst result = await agent.prompt(\"What files are in this project?\");\nconsole.log(result.text);\n```\n\nThe `apiType` is auto-detected from model name — models containing `gpt-`, `o1`, `o3`, `deepseek`, `qwen`, `mistral`, etc. automatically use `openai-completions`.\n\n### Multi-turn conversation\n\n```typescript\nimport { createAgent } from \"@doraemon4dj/open-agent-sdk\";\n\nconst agent = createAgent({ maxTurns: 5 });\n\nconst r1 = await agent.prompt(\n  'Create a file /tmp/hello.txt with \"Hello World\"',\n);\nconsole.log(r1.text);\n\nconst r2 = await agent.prompt(\"Read back the file you just created\");\nconsole.log(r2.text);\n\nconsole.log(`Session messages: ${agent.getMessages().length}`);\n```\n\n### Custom tools (Zod schema)\n\n```typescript\nimport { z } from \"zod\";\nimport { query, tool, createSdkMcpServer } from \"@doraemon4dj/open-agent-sdk\";\n\nconst getWeather = tool(\n  \"get_weather\",\n  \"Get the temperature for a city\",\n  { city: z.string().describe(\"City name\") },\n  async ({ city }) => ({\n    content: [{ type: \"text\", text: `${city}: 22°C, sunny` }],\n  }),\n);\n\nconst server = createSdkMcpServer({ name: \"weather\", tools: [getWeather] });\n\nfor await (const msg of query({\n  prompt: \"What is the weather in Tokyo?\",\n  options: { mcpServers: { weather: server } },\n})) {\n  if (msg.type === \"result\")\n    console.log(`Done: $${msg.total_cost_usd?.toFixed(4)}`);\n}\n```\n\n### Custom tools (low-level)\n\n```typescript\nimport {\n  createAgent,\n  getAllBaseTools,\n  defineTool,\n} from \"@doraemon4dj/open-agent-sdk\";\n\nconst calculator = defineTool({\n  name: \"Calculator\",\n  description: \"Evaluate a math expression\",\n  inputSchema: {\n    type: \"object\",\n    properties: { expression: { type: \"string\" } },\n    required: [\"expression\"],\n  },\n  isReadOnly: true,\n  async call(input) {\n    const result = Function(`'use strict'; return (${input.expression})`)();\n    return `${input.expression} = ${result}`;\n  },\n});\n\nconst agent = createAgent({ tools: [...getAllBaseTools(), calculator] });\nconst r = await agent.prompt(\"Calculate 2**10 * 3\");\nconsole.log(r.text);\n```\n\n### Skills\n\nSkills are reusable prompt templates that extend agent capabilities. Five bundled skills are included: `simplify`, `commit`, `review`, `debug`, `test`.\n\n```typescript\nimport {\n  createAgent,\n  registerSkill,\n  getAllSkills,\n} from \"@doraemon4dj/open-agent-sdk\";\n\n// Register a custom skill\nregisterSkill({\n  name: \"explain\",\n  description: \"Explain a concept in simple terms\",\n  userInvocable: true,\n  async getPrompt(args) {\n    return [\n      {\n        type: \"text\",\n        text: `Explain in simple terms: ${args || \"Ask what to explain.\"}`,\n      },\n    ];\n  },\n});\n\nconsole.log(`${getAllSkills().length} skills registered`);\n\n// The model can invoke skills via the Skill tool\nconst agent = createAgent();\nconst result = await agent.prompt('Use the \"explain\" skill to explain git rebase');\nconsole.log(result.text);\n```\n\n### Hooks (lifecycle events)\n\n```typescript\nimport { createAgent, createHookRegistry } from \"@doraemon4dj/open-agent-sdk\";\n\nconst hooks = createHookRegistry({\n  PreToolUse: [\n    {\n      handler: async (input) => {\n        console.log(`About to use: ${input.toolName}`);\n        // Return { block: true } to prevent tool execution\n      },\n    },\n  ],\n  PostToolUse: [\n    {\n      handler: async (input) => {\n        console.log(`Tool ${input.toolName} completed`);\n      },\n    },\n  ],\n});\n```\n\n20 lifecycle events: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `SessionStart`, `SessionEnd`, `Stop`, `SubagentStart`, `SubagentStop`, `UserPromptSubmit`, `PermissionRequest`, `PermissionDenied`, `TaskCreated`, `TaskCompleted`, `ConfigChange`, `CwdChanged`, `FileChanged`, `Notification`, `PreCompact`, `PostCompact`, `TeammateIdle`.\n\n### MCP server integration\n\n```typescript\nimport { createAgent } from \"@doraemon4dj/open-agent-sdk\";\n\nconst agent = createAgent({\n  mcpServers: {\n    filesystem: {\n      command: \"npx\",\n      args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/tmp\"],\n    },\n  },\n});\n\nconst result = await agent.prompt(\"List files in /tmp\");\nconsole.log(result.text);\nawait agent.close();\n```\n\n### Subagents\n\n```typescript\nimport { query } from \"@doraemon4dj/open-agent-sdk\";\n\nfor await (const msg of query({\n  prompt: \"Use the code-reviewer agent to review src/index.ts\",\n  options: {\n    agents: {\n      \"code-reviewer\": {\n        description: \"Expert code reviewer\",\n        prompt: \"Analyze code quality. Focus on security and performance.\",\n        tools: [\"Read\", \"Glob\", \"Grep\"],\n      },\n    },\n  },\n})) {\n  if (msg.type === \"result\") console.log(\"Done\");\n}\n```\n\n### Permissions\n\n```typescript\nimport { query } from \"@doraemon4dj/open-agent-sdk\";\n\n// Read-only agent — can only analyze, not modify\nfor await (const msg of query({\n  prompt: \"Review the code in src/ for best practices.\",\n  options: {\n    allowedTools: [\"Read\", \"Glob\", \"Grep\"],\n    permissionMode: \"dontAsk\",\n  },\n})) {\n  // ...\n}\n```\n\n### Web UI\n\nA built-in web chat interface is included for testing:\n\n```bash\nnpx tsx examples/web/server.ts\n# Open http://localhost:8081\n```\n\n## API reference\n\n### Top-level functions\n\n| Function                              | Description                                                    |\n| ------------------------------------- | -------------------------------------------------------------- |\n| `query({ prompt, options })`          | One-shot streaming query, returns `AsyncGenerator<SDKMessage>` |\n| `createAgent(options)`                | Create a reusable agent with session persistence               |\n| `tool(name, desc, schema, handler)`   | Create a tool with Zod schema validation                       |\n| `createSdkMcpServer({ name, tools })` | Bundle tools into an in-process MCP server                     |\n| `defineTool(config)`                  | Low-level tool definition helper                               |\n| `getAllBaseTools()`                   | Get all 35+ built-in tools                                     |\n| `registerSkill(definition)`           | Register a custom skill                                        |\n| `getAllSkills()`                       | Get all registered skills                                      |\n| `createProvider(apiType, opts)`        | Create an LLM provider directly                                |\n| `createHookRegistry(config)`          | Create a hook registry for lifecycle events                    |\n| `listSessions()`                      | List persisted sessions                                        |\n| `forkSession(id)`                     | Fork a session for branching                                   |\n\n### Agent methods\n\n| Method                          | Description                                           |\n| ------------------------------- | ----------------------------------------------------- |\n| `agent.query(prompt)`           | Streaming query, returns `AsyncGenerator<SDKMessage>` |\n| `agent.prompt(text)`            | Blocking query, returns `Promise<QueryResult>`        |\n| `agent.getMessages()`           | Get conversation history                              |\n| `agent.clear()`                 | Reset session                                         |\n| `agent.interrupt()`             | Abort current query                                   |\n| `agent.setModel(model)`         | Change model mid-session                              |\n| `agent.setPermissionMode(mode)` | Change permission mode                                |\n| `agent.getApiType()`            | Get current API type                                  |\n| `agent.close()`                 | Close MCP connections, persist session                |\n\n### Options\n\n| Option               | Type                                    | Default                | Description                                                          |\n| -------------------- | --------------------------------------- | ---------------------- | -------------------------------------------------------------------- |\n| `apiType`            | `string`                                | auto-detected          | `'anthropic-messages'` or `'openai-completions'`                     |\n| `model`              | `string`                                | `claude-sonnet-4-6`    | LLM model ID                                                         |\n| `apiKey`             | `string`                                | `CODEANY_API_KEY`      | API key                                                              |\n| `baseURL`            | `string`                                | —                      | Custom API endpoint                                                  |\n| `cwd`                | `string`                                | `process.cwd()`        | Working directory                                                    |\n| `systemPrompt`       | `string`                                | —                      | System prompt override                                               |\n| `appendSystemPrompt` | `string`                                | —                      | Append to default system prompt                                      |\n| `tools`              | `ToolDefinition[]`                      | All built-in           | Available tools                                                      |\n| `allowedTools`       | `string[]`                              | —                      | Tool allow-list                                                      |\n| `disallowedTools`    | `string[]`                              | —                      | Tool deny-list                                                       |\n| `permissionMode`     | `string`                                | `bypassPermissions`    | `default` / `acceptEdits` / `dontAsk` / `bypassPermissions` / `plan` |\n| `canUseTool`         | `function`                              | —                      | Custom permission callback                                           |\n| `maxTurns`           | `number`                                | `10`                   | Max agentic turns                                                    |\n| `maxBudgetUsd`       | `number`                                | —                      | Spending cap                                                         |\n| `thinking`           | `ThinkingConfig`                        | `{ type: 'adaptive' }` | Extended thinking                                                    |\n| `effort`             | `string`                                | `high`                 | Reasoning effort: `low` / `medium` / `high` / `max`                  |\n| `mcpServers`         | `Record<string, McpServerConfig>`       | —                      | MCP server connections                                               |\n| `agents`             | `Record<string, AgentDefinition>`       | —                      | Subagent definitions                                                 |\n| `hooks`              | `Record<string, HookCallbackMatcher[]>` | —                      | Lifecycle hooks                                                      |\n| `resume`             | `string`                                | —                      | Resume session by ID                                                 |\n| `continue`           | `boolean`                               | `false`                | Continue most recent session                                         |\n| `persistSession`     | `boolean`                               | `true`                 | Persist session to disk                                              |\n| `sessionId`          | `string`                                | auto                   | Explicit session ID                                                  |\n| `outputFormat`       | `{ type: 'json_schema', schema }`       | —                      | Structured output                                                    |\n| `sandbox`            | `SandboxSettings`                       | —                      | Filesystem/network sandbox                                           |\n| `settingSources`     | `SettingSource[]`                       | —                      | Load AGENT.md, project settings                                      |\n| `env`                | `Record<string, string>`                | —                      | Environment variables                                                |\n| `abortController`    | `AbortController`                       | —                      | Cancellation controller                                              |\n\n### Environment variables\n\n| Variable             | Description                                              |\n| -------------------- | -------------------------------------------------------- |\n| `CODEANY_API_KEY`    | API key (required)                                       |\n| `CODEANY_API_TYPE`   | `anthropic-messages` (default) or `openai-completions`   |\n| `CODEANY_MODEL`      | Default model override                                   |\n| `CODEANY_BASE_URL`   | Custom API endpoint                                      |\n| `CODEANY_AUTH_TOKEN` | Alternative auth token                                   |\n\n## Built-in tools\n\n| Tool                                       | Description                                  |\n| ------------------------------------------ | -------------------------------------------- |\n| **Bash**                                   | Execute shell commands                       |\n| **Read**                                   | Read files with line numbers                 |\n| **Write**                                  | Create / overwrite files                     |\n| **Edit**                                   | Precise string replacement in files          |\n| **Glob**                                   | Find files by pattern                        |\n| **Grep**                                   | Search file contents with regex              |\n| **WebFetch**                               | Fetch and parse web content                  |\n| **WebSearch**                              | Search the web                               |\n| **NotebookEdit**                           | Edit Jupyter notebook cells                  |\n| **Agent**                                  | Spawn subagents for parallel work            |\n| **Skill**                                  | Invoke registered skills                     |\n| **TaskCreate/List/Update/Get/Stop/Output** | Task management system                       |\n| **TeamCreate/Delete**                      | Multi-agent team coordination                |\n| **SendMessage**                            | Inter-agent messaging                        |\n| **EnterWorktree/ExitWorktree**             | Git worktree isolation                       |\n| **EnterPlanMode/ExitPlanMode**             | Structured planning workflow                 |\n| **AskUserQuestion**                        | Ask the user for input                       |\n| **ToolSearch**                             | Discover lazy-loaded tools                   |\n| **ListMcpResources/ReadMcpResource**       | MCP resource access                          |\n| **CronCreate/Delete/List**                 | Scheduled task management                    |\n| **RemoteTrigger**                          | Remote agent triggers                        |\n| **LSP**                                    | Language Server Protocol (code intelligence) |\n| **Config**                                 | Dynamic configuration                        |\n| **TodoWrite**                              | Session todo list                            |\n\n## Bundled skills\n\n| Skill        | Description                                                    |\n| ------------ | -------------------------------------------------------------- |\n| `simplify`   | Review changed code for reuse, quality, and efficiency         |\n| `commit`     | Create a git commit with a well-crafted message                |\n| `review`     | Review code changes for correctness, security, and performance |\n| `debug`      | Systematic debugging using structured investigation            |\n| `test`       | Run tests and analyze failures                                 |\n\nRegister custom skills with `registerSkill()`.\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────┐\n│                   Your Application                    │\n│                                                       │\n│   import { createAgent } from '@doraemon4dj/open-agent-sdk' │\n└────────────────────────┬─────────────────────────────┘\n                         │\n              ┌──────────▼──────────┐\n              │       Agent         │  Session state, tool pool,\n              │  query() / prompt() │  MCP connections, hooks\n              └──────────┬──────────┘\n                         │\n              ┌──────────▼──────────┐\n              │    QueryEngine      │  Agentic loop:\n              │   submitMessage()   │  API call → tools → repeat\n              └──────────┬──────────┘\n                         │\n         ┌───────────────┼───────────────┐\n         │               │               │\n   ┌─────▼─────┐  ┌─────▼─────┐  ┌─────▼─────┐\n   │  Provider  │  │  35 Tools │  │    MCP     │\n   │ Anthropic  │  │ Bash,Read │  │  Servers   │\n   │  OpenAI    │  │ Edit,...  │  │ stdio/SSE/ │\n   │ DeepSeek   │  │ + Skills  │  │ HTTP/SDK   │\n   └───────────┘  └───────────┘  └───────────┘\n```\n\n**Key internals:**\n\n| Component             | Description                                                        |\n| --------------------- | ------------------------------------------------------------------ |\n| **Provider layer**    | Abstracts Anthropic / OpenAI API differences                       |\n| **QueryEngine**       | Core agentic loop with auto-compact, retry, tool orchestration     |\n| **Skill system**      | Reusable prompt templates with 5 bundled skills                    |\n| **Hook system**       | 20 lifecycle events integrated into the engine                     |\n| **Auto-compact**      | Summarizes conversation when context window fills up               |\n| **Micro-compact**     | Truncates oversized tool results                                   |\n| **Retry**             | Exponential backoff for rate limits and transient errors            |\n| **Token estimation**  | Rough token counting with pricing for Claude, GPT, DeepSeek models |\n| **File cache**        | LRU cache (100 entries, 25 MB) for file reads                      |\n| **Session storage**   | Persist / resume / fork sessions on disk                           |\n| **Context injection** | Git status + AGENT.md automatically injected into system prompt    |\n\n## Examples\n\n| #   | File                                  | Description                            |\n| --- | ------------------------------------- | -------------------------------------- |\n| 01  | `examples/01-simple-query.ts`         | Streaming query with event handling    |\n| 02  | `examples/02-multi-tool.ts`           | Multi-tool orchestration (Glob + Bash) |\n| 03  | `examples/03-multi-turn.ts`           | Multi-turn session persistence         |\n| 04  | `examples/04-prompt-api.ts`           | Blocking `prompt()` API                |\n| 05  | `examples/05-custom-system-prompt.ts` | Custom system prompt                   |\n| 06  | `examples/06-mcp-server.ts`           | MCP server integration                 |\n| 07  | `examples/07-custom-tools.ts`         | Custom tools with `defineTool()`       |\n| 08  | `examples/08-official-api-compat.ts`  | `query()` API pattern                  |\n| 09  | `examples/09-subagents.ts`            | Subagent delegation                    |\n| 10  | `examples/10-permissions.ts`          | Read-only agent with tool restrictions |\n| 11  | `examples/11-custom-mcp-tools.ts`     | `tool()` + `createSdkMcpServer()`      |\n| 12  | `examples/12-skills.ts`              | Skill system usage                     |\n| 13  | `examples/13-hooks.ts`               | Lifecycle hooks                        |\n| 14  | `examples/14-openai-compat.ts`       | OpenAI / DeepSeek models               |\n| web | `examples/web/`                       | Web chat UI for testing                |\n\nRun any example:\n\n```bash\nnpx tsx examples/01-simple-query.ts\n```\n\nStart the web UI:\n\n```bash\nnpx tsx examples/web/server.ts\n```\n\n## Star History\n\n<a href=\"https://www.star-history.com/?repos=codeany-ai%2Fopen-agent-sdk-typescript&type=timeline&legend=top-left\">\n <picture>\n   <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/image?repos=codeany-ai/open-agent-sdk-typescript&type=timeline&theme=dark&legend=top-left\" />\n   <source media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/image?repos=codeany-ai/open-agent-sdk-typescript&type=timeline&legend=top-left\" />\n   <img alt=\"Star History Chart\" src=\"https://api.star-history.com/image?repos=codeany-ai/open-agent-sdk-typescript&type=timeline&legend=top-left\" />\n </picture>\n</a>\n\n## License\n\nMIT\n","readmeFilename":"README.md"}