{"id":48218512,"url":"https://github.com/codeany-ai/open-agent-sdk-typescript","last_synced_at":"2026-04-05T20:00:46.054Z","repository":{"id":348330756,"uuid":"1197357033","full_name":"codeany-ai/open-agent-sdk-typescript","owner":"codeany-ai","description":"Agent-SDK without CLI dependencies, as an alternative to claude-agent-sdk, completely open source","archived":false,"fork":false,"pushed_at":"2026-04-03T16:25:16.000Z","size":118,"stargazers_count":2304,"open_issues_count":1,"forks_count":877,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-04-04T19:57:37.510Z","etag":null,"topics":["agent-sdk","claude-agent-sdk","claude-code","open-agent-sdk"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codeany-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-31T14:16:24.000Z","updated_at":"2026-04-04T14:45:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/codeany-ai/open-agent-sdk-typescript","commit_stats":null,"previous_names":["shipany-ai/open-agent-sdk","codeany-ai/open-agent-sdk-typescript"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codeany-ai/open-agent-sdk-typescript","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeany-ai%2Fopen-agent-sdk-typescript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeany-ai%2Fopen-agent-sdk-typescript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeany-ai%2Fopen-agent-sdk-typescript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeany-ai%2Fopen-agent-sdk-typescript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeany-ai","download_url":"https://codeload.github.com/codeany-ai/open-agent-sdk-typescript/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeany-ai%2Fopen-agent-sdk-typescript/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31448216,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T15:22:31.103Z","status":"ssl_error","status_checked_at":"2026-04-05T15:22:00.205Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-sdk","claude-agent-sdk","claude-code","open-agent-sdk"],"created_at":"2026-04-04T19:03:04.880Z","updated_at":"2026-04-05T20:00:46.036Z","avatar_url":"https://github.com/codeany-ai.png","language":"TypeScript","readme":"# Open Agent SDK (TypeScript)\n\n[![npm version](https://img.shields.io/npm/v/@codeany/open-agent-sdk)](https://www.npmjs.com/package/@codeany/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 @codeany/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 \"@codeany/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 \"@codeany/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 \"@codeany/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 \"@codeany/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 \"@codeany/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 }) =\u003e ({\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 \"@codeany/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 \"@codeany/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 \"@codeany/open-agent-sdk\";\n\nconst hooks = createHookRegistry({\n  PreToolUse: [\n    {\n      handler: async (input) =\u003e {\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) =\u003e {\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 \"@codeany/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 \"@codeany/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 \"@codeany/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\u003cSDKMessage\u003e` |\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\u003cSDKMessage\u003e` |\n| `agent.prompt(text)`            | Blocking query, returns `Promise\u003cQueryResult\u003e`        |\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\u003cstring, McpServerConfig\u003e`       | —                      | MCP server connections                                               |\n| `agents`             | `Record\u003cstring, AgentDefinition\u003e`       | —                      | Subagent definitions                                                 |\n| `hooks`              | `Record\u003cstring, HookCallbackMatcher[]\u003e` | —                      | 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\u003cstring, string\u003e`                | —                      | 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 '@codeany/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\u003ca href=\"https://www.star-history.com/?repos=codeany-ai%2Fopen-agent-sdk-typescript\u0026type=timeline\u0026legend=top-left\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/image?repos=codeany-ai/open-agent-sdk-typescript\u0026type=timeline\u0026theme=dark\u0026legend=top-left\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/image?repos=codeany-ai/open-agent-sdk-typescript\u0026type=timeline\u0026legend=top-left\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/image?repos=codeany-ai/open-agent-sdk-typescript\u0026type=timeline\u0026legend=top-left\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeany-ai%2Fopen-agent-sdk-typescript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodeany-ai%2Fopen-agent-sdk-typescript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeany-ai%2Fopen-agent-sdk-typescript/lists"}