项目介绍
Agent 开发框架 · 2026-11-09 更新 · 本站尚未实测
statelyai/agent(README 标题为“Stately Agent”)是一个 TypeScript 库,用于把 Agent 逻辑表达为 XState 状态机。README 强调其定位是“Make invalid agent actions impossible”:由状态机掌握控制流,模型只负责在允许的事件中选择一个合法事件。
按 README 描述,Stately Agent 在 XState 之上增加模型请求与决策能力:状态机定义 Agent 可以做什么;应用自行选择模型、执行请求并保存状态;模型提出事件,状态机判定该事件是否被允许以及后续走向。README 明确说明 Stately Agent 2 处于 alpha 阶段,API 在稳定版发布前可能变化。
核心能力
点击能力名称查看输入、输出和原文依据。
- 无模型即可验证规则:README 称可将必须永不违反的规则放在哨兵状态之后,用
canReach(machine, "refundedOverLimit", options)返回reachable: false、complete: true,且不需要 API Key。 - 从事件日志恢复与回放:README 称暂停的运行可通过
runAgent(machine, { snapshot, event })恢复,replay(machine, result.events)可在不调用模型的情况下重建运行中的任意节点。 - 记录的对照检查:README 提到
createRecorder记录旧循环的模型与工具调用,compareRecordings对状态机重放,compareRuns将场景标记为same、intended或regression。 - 可视化检查:通过
runAgent的inspect选项把运行流式发送到 Stately inspector。 - 既有工作流改造:
wrapWorkflow可在不改写的情况下把异步工作流包进状态机;README 另提供从手写循环迁移的文档与loop-to-machineskill。 - 随包分发的 Agent skills:README 列出
graph-engineering、loop-to-machine、build-machine、generate-machine、add-traces、add-evals、improve-machine(标注为实验性)等技能文件。
实际应用场景
适用场景
README 给出的方向包括:新项目按 ReAct、reflection、plan-and-execute、RAG、supervisor 等模式编写可运行示例;对已有 Agent 代码做“绞杀榕式”逐步改造;把 while 循环改为状态机;以及实验性地由模型改写环境内的 JSON 策略,经 verifyAgentConfig 校验并在留出场景有改进时才提升。
需要说明的是,这些属于 README 描述的项目能力与用法,并非本目录的实测结论;实际效果与稳定性需读者自行在目标环境验证。
安装与接入
README 给出的安装命令为:
pnpm add @statelyai/agent@alpha xstate@6.0.0-beta.0 zod
可选的执行器依赖(Vercel AI SDK、OpenAI SDK、TanStack AI、ajv 等)README 分别给出独立安装命令,请按需查阅原文。README 声明的前置要求包括:Node 22 或更新版本、XState 必须为 6.0.0-beta.0、TypeScript 5.4 或更新版本、一个 Standard Schema 库(zod 4、zod 3.24 及以上、Valibot 或 ArkType)。包以 ESM 为主,同时也发布 CommonJS 构建。
README 说明状态机从不直接与模型通信,模型调用由宿主提供的执行器完成,因此可以用普通函数替代,实现无 API Key 的运行。若已有应用使用 XState 4 或 5,README 建议将 Agent 放在独立工作区包中。
随包 skills 需手动复制到编码 Agent 的 skills 目录,README 给出针对 Claude Code 的示例命令;本目录未提供独立的 MCP 服务配置,采集记录显示 MCP 配置与服务器配置请求返回 404,是否提供 MCP 接入方式待核验。
使用条件与限制
- 是否需要部署
- 需自行准备运行环境,具体要求见正文
- 是否需要注册
- 账号和认证要求见正文;未明确说明的项目仍待核验
- 是否需要 API Key
- 待核验
- 费用与额度
- 费用边界见正文,项目许可不代表模型或托管服务免费
- 所需权限
- 待核验
- 许可证与服务条款
- 待核验
权限费用与限制
- 阶段限制:Stately Agent 2 为 alpha,README 明确 API 可能变化。
- 版本耦合:XState 被固定在实验性版本;README 列出混用 XState 4/5 时的具体报错,并说明这些错误不会提示版本冲突。
- 费用:项目代码采用 MIT 许可,但调用真实模型通常涉及第三方模型服务费用;README 未给出价格,具体费用需向模型提供方核验。核心验证能力据 README 可在无 API Key 情况下使用,但不等于所有功能免费。
- 安全与数据:README 未提供安全审计或数据处理说明,相关结论待核验。
- 平台:README 示例使用 pnpm 与 Node 环境;Windows 支持情况及国内网络兼容性未在资料中说明,待核验。
国内使用情况
网友核验 用户经验分享
与站长实测独立,不代表官方认证或本站已实测。
最近核验:2026-11-09。参与人数按当前项目有效身份去重;不同核验项分别统计,不合并成用户总结果。仅统计审核通过且未过期的记录。
分项统计、有效期与样本量
| 核验项目 | 有效人数 | 成功 / 部分 / 失败 / 无法判断 | 成功率 | 最近核验 / 有效期 |
|---|---|---|---|---|
| 官方网站访问 | 1 | 1 / 0 / 0 / 0 | 样本不足 | 2026-11-09 / 7 天 |
| GitHub 仓库访问 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 7 天 |
| 安装与运行 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 官方服务国内连接 / MCP 连接 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 国内网络情况 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 7 天 |
| 国内模型兼容性 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 自定义 API | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 海外服务依赖 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 海外账号要求 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 中文界面 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 客户端兼容性 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
| 账号及费用信息 | 0 | 0 / 0 / 0 / 0 | 样本不足 | 暂无 / 30 天 |
成功率 = 成功 ÷(成功 + 部分成功 + 失败);无法判断不计入分母。至少 5 份可判断结果才显示成功率。账号、费用、海外依赖与语言等事实项,成功表示核查结论与资料吻合,具体观察另行统计;不表示免费或没有海外依赖。不同网络、客户端和版本的结果不能直接等同。
最近有效核验
网友754CE3 · 官方网站访问 · 成功2026-11-09 · 国内普通网络
- 网络环境
- 国内普通网络
- 客户端与版本
- 未填写
- 核验时间
- 2026-11-09 · 有效至 2026-11-16
未填写补充说明。
举报此记录国内实测状态:国内可用性待核验。协议兼容和官方资料说明不等于国内网络可用。
- 官方网站访问
- 尚未实测 待核验
- GitHub 仓库访问
- 尚未实测 待核验
- 官方服务国内连接
- 尚未实测 待核验
- 国内网络情况
- 尚未实测 待核验
- 国内模型兼容性
- 尚未实测 待核验
- 自定义 API
- 尚未实测 待核验
- 海外服务依赖
- 尚未实测 待核验
- 海外账号要求
- 尚未实测 待核验
- 中文界面
- 尚未实测 待核验
- 国内最后核验时间
- 尚未实测
许可与国内使用
仓库 LICENSE 文件为 MIT License,版权声明为 Copyright (c) 2025 Stately Software, Inc.。使用时应保留许可证与版权声明。
国内使用方面,资料未说明是否提供国内镜像、代理或合规备案信息,亦未说明第三方模型服务在境内是否可用,均待核验。README 中出现的示例模型标识仅用于说明写法,不应视为推荐或可用性结论。
项目资料与来源
字段依据与待核验事项
access:来源确认 · pnpm add @statelyai/agent@alpha xstate@6.0.0-beta.0 zod
project_type:来源确认 · Agent logic as state machines: deterministic, inspectable, resumable, runs anywhere. The machine owns control flow; the model only ever picks a legal event.
原始 README(折叠技术参考)
# Stately Agent
**Make invalid agent actions impossible.**
Agent logic as state machines: deterministic, inspectable, resumable, runs anywhere. The machine owns control flow; the model only ever picks a legal event.
What you get:
- **Proofs with no model.** Put the rule that must never break behind a sentinel state, then `canReach(machine, "refundedOverLimit", options)` returns `reachable: false` and `complete: true` with no API key. See [Testing and verification](https://github.com/statelyai/agent/blob/next/docs/verify.md).
- **Resume and replay from the event log.** A paused run resumes with `runAgent(machine, { snapshot, event })`, and `replay(machine, result.events)` rebuilds any point of a run with no model calls. See [The event log](https://github.com/statelyai/agent/blob/next/docs/event-log.md).
- **Checked ports.** `createRecorder` records the old loop's model and tool calls, `compareRecordings` replays them against the machine, and `compareRuns` labels every scenario `same`, `intended`, or `regression`. See [Parity with the code you replace](https://github.com/statelyai/agent/blob/next/docs/evals.md#parity-with-the-code-you-replace).
The machine is also a diagram: stream any run to the Stately inspector with `runAgent`'s `inspect` option. See [Inspect a run](https://github.com/statelyai/agent/blob/next/docs/observability.md#inspect-a-run).
Stately Agent adds model requests and decisions to XState:
- The machine defines what the agent can do.
- Your application chooses the model, runs the requests, and stores the state.
- The model proposes an event; the machine decides whether it is allowed and what happens next.
Stately Agent 2 is in alpha. APIs may change before the stable release.
[Documentation](https://stately.ai/docs/packages/agent) · [Examples](https://github.com/statelyai/agent/blob/next/examples/README.md) · [XState](https://github.com/statelyai/xstate)
## Starting points
### Greenfield: a new agent
- **Author a new agent.** Build a machine from states, decisions, and typed requests; run it locally with `runAgent`, test it with no API key, then use it in any framework or runtime with zero machine changes. See the [Quickstart](https://github.com/statelyai/agent/blob/next/docs/quickstart.md) and [Use in any stack](https://github.com/statelyai/agent/blob/next/docs/any-stack.md).
- **Copy a known pattern.** ReAct, reflection, plan-and-execute, RAG, supervisor, and more, each a single runnable file you lift in 60 seconds. See [Agent patterns](https://github.com/statelyai/agent/blob/next/docs/patterns.md).
### Brownfield: an existing agent
- **Wrap an existing workflow, then carve it.** `wrapWorkflow` runs an async workflow unchanged inside a machine. In minutes and with no rewrite, you get inspection, traces, the event log, and a recorded baseline. Reliability proofs such as `canReach` arrive per phase, as each phase moves into states, with `checkParity` against the original after each. See [Strangler-fig retrofit](https://github.com/statelyai/agent/blob/next/docs/strangler-fig.md).
- **Retrofit an existing agent.** Turn a `while` loop into a machine: your SDK calls, tools, and retry code become the executors; the machine replaces only the control flow. See [Migrating from a hand-rolled loop](https://github.com/statelyai/agent/blob/next/docs/from-a-loop.md). A coding agent does it with the shipped `loop-to-machine` skill (see [Agent skills](#agent-skills)): "Use the loop-to-machine skill to convert `src/support-agent.ts` to a machine."
- **Let an agent improve its own logic (experimental).** Keep the rules in a fixed TypeScript environment and let a model rewrite the JSON policy inside it, gated by `verifyAgentConfig` and promoted only when held-out scenarios improve. See [Environment and policy](https://github.com/statelyai/agent/blob/next/docs/environment-and-policy.md) and the [`improve-machine` skill](https://github.com/statelyai/agent/blob/next/skills/improve-machine/SKILL.md).
## Environment and policy
- The environment is code you own and can verify; the policy is something a model can write inside it.
- The environment holds the rules and invariants as TypeScript states and guards, fixed and checked with `canReach`.
- The policy is a JSON machine a model can author and, experimentally, improve from traces, gated before it runs and promoted only on a measured gain. See [Environment and policy](https://github.com/statelyai/agent/blob/next/docs/environment-and-policy.md).
## Install
<!-- install command matching the package prerelease channel and package.json peers -->
```sh
pnpm add @statelyai/agent@alpha xstate@6.0.0-beta.0 zod
```
XState is pinned while its experimental durable restoration API evolves.
For the optional Vercel AI SDK executor:
```sh
pnpm add ai@^7.0.128 @ai-sdk/openai@^4
```
For the optional raw OpenAI SDK executor (`@statelyai/agent/openai`):
```sh
pnpm add openai
```
For the optional TanStack AI executor (`@statelyai/agent/tanstack-ai`):
```sh
pnpm add @tanstack/ai @tanstack/ai-openai
```
Classification, grading, relevance, and yes/no checks are judgments: call the AI SDK's `experimental_decide` with `@ai-sdk/typesafe-ai` (`pnpm add ai @ai-sdk/typesafe-ai`) from an ordinary actor; see [Judgments with the AI SDK](https://github.com/statelyai/agent/blob/next/docs/judgments.md).
Upgrading from an earlier alpha: see [Upgrading between alphas](https://github.com/statelyai/agent/blob/next/docs/upgrading.md). Every release's notes are in `CHANGELOG.md`, which ships in the package.
Requirements:
- Node 22 or newer, and XState exactly `6.0.0-beta.0`.
- TypeScript 5.4 or newer. Older versions accept the code, but callback parameters in `createMachine` silently become `any`.
- A [Standard Schema](https://standardschema.dev) library: zod 4, zod 3.24 or newer, Valibot, or ArkType. `setupAgent` throws `invalid-schema` for zod 3.23 and earlier.
- The package is ESM-first. CommonJS builds are published too, so `require()` works. Subpath imports (`@statelyai/agent/testing`) resolve under every `moduleResolution`, including `node`.
- `@statelyai/agent/ai-sdk` needs `ai` 7.0.128 or newer. Provider packages must match your `ai` major: `@ai-sdk/openai@^4` pairs with `ai@^7`. A bare `@ai-sdk/openai` resolves to `@latest`, which can mismatch your `ai`. `@statelyai/agent/openai` needs `openai` 5 or newer, `@statelyai/agent/tanstack-ai` needs `@tanstack/ai` 0.66 or newer, and `@statelyai/agent/validate` needs `ajv` 8.20 or newer.
- Adapter SDKs (`ai`, `openai`, `@tanstack/ai`, `ajv`) are optional peers with no version range, so an app on an older SDK installs the core without `--legacy-peer-deps`. An adapter used with an older SDK fails when imported or called, not at install.
An app that already uses XState 4 or 5 keeps it: put the agent in its own workspace package. See [Use in an XState 4 or 5 app](https://github.com/statelyai/agent/blob/next/docs/xstate-4-and-5-apps.md). If both versions land in one `node_modules`, the package fails with errors that do not mention a version:
| Error | Cause |
| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| `createAsyncLogic is not a function` | `xstate` resolved to 4 or 5 from CommonJS |
| `Cannot find module '…/node_modules/xstate/durable'` | `xstate` resolved to 4 or 5 from ESM |
| `unmet peer dependency "xstate@6.0.0-beta.0"` (pnpm, npm) or `has incorrect peer dependency "xstate@6.0.0-beta.0"` (yarn 1) | The install's only warning of the two above |
## Agent skills
The package ships agent skills in `node_modules/@statelyai/agent/skills/`, and its docs in `node_modules/@statelyai/agent/docs/` with an index in `llms.txt`. Copy the skills into your coding agent's skills directory (for Claude Code, `.claude/skills/`):
```sh
mkdir -p .claude/skills
cp -R node_modules/@statelyai/agent/skills/* .claude/skills/
```
| Skill | What it does |
| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| [`graph-engineering`](https://github.com/statelyai/agent/blob/next/skills/graph-engineering/SKILL.md) | Finds which step a project is at and routes to the next skill |
| [`loop-to-machine`](https://github.com/statelyai/agent/blob/next/skills/loop-to-machine/SKILL.md) | Converts existing agent code into a machine and checks parity with `compareRuns` |
| [`build-machine`](https://github.com/statelyai/agent/blob/next/skills/build-machine/SKILL.md) | Builds a TypeScript machine from a spec and proves its invariants |
| [`generate-machine`](https://github.com/statelyai/agent/blob/next/skills/generate-machine/SKILL.md) | Authors a JSON policy machine from scratch and runs `verifyAgentConfig` |
| [`add-traces`](https://github.com/statelyai/agent/blob/next/skills/add-traces/SKILL.md) | Stamps and persists every run so it replays |
| [`add-evals`](https://github.com/statelyai/agent/blob/next/skills/add-evals/SKILL.md) | Writes evals per state, at the cheapest level that catches the failure |
| [`improve-machine`](https://github.com/statelyai/agent/blob/next/skills/improve-machine/SKILL.md) | Experimental. Improves a policy from traces; a person reviews the pull request |
## Quick start
<!-- refund decision example using setupAgent, agent.decide, a machine guard, and the AI SDK runAgent host -->
This agent reviews refund requests. The model may propose an automatic refund, but the state machine owns the $100 limit.
```ts
import { runAgent, setupAgent } from "@statelyai/agent";
import { z } from "zod";
const agentSetup = setupAgent({
context: z.object({
request: z.string(),
amount: z.number(),
}),
input: z.object({
request: z.string(),
amount: z.number(),
}),
output: z.object({
outcome: z.enum(["refunded", "review"]),
}),
events: {
AUTO_REFUND: {},
REVIEW: z.object({ reason: z.string() }),
},
});
const refundMachine = agentSetup.createMachine({
context: ({ input }) => input,
initial: "deciding",
states: {
deciding: {
invoke: {
src: "agent.decide",
input: ({ context }) => ({
model: "fast",
system: "Choose AUTO_REFUND for eligible requests. Otherwise choose REVIEW.",
prompt: `${context.request}\nAmount: $${context.amount}`,
allowedEvents: ["AUTO_REFUND", "REVIEW"],
}),
},
on: {
AUTO_REFUND: ({ context }) => (context.amount <= 100 ? { target: "refunded" } : undefined),
REVIEW: { target: "review" },
},
},
refunded: {
type: "final",
output: () => ({ outcome: "refunded" }),
},
review: {
type: "final",
output: () => ({ outcome: "review" }),
},
},
});
const result = await runAgent(refundMachine, {
input: {
request: "I was charged twice for the same order.",
amount: 75,
},
// An executor is a plain function, so this run needs no API key and no
// provider package.
executors: { decide: async () => ({ event: { type: "AUTO_REFUND" } }) },
});
if (result.status === "done") {
console.log(result.output);
}
```
When the machine reaches `refunded`, the result is:
```text
{ outcome: 'refunded' }
```
The model chooses between the events allowed in `deciding`. The `AUTO_REFUND` transition only works when the amount is at most $100. If the model chooses it for a larger amount, the guard rejects the choice and the decision is tried again.
To call a real model, leave the states unchanged. Declare the model once on the setup by adding `models` to the `setupAgent` call above, and hand the machine to the AI SDK adapter:
```ts
import { openai } from "@ai-sdk/openai";
import { createAiSdkExecutors } from "@statelyai/agent/ai-sdk";
// In the setupAgent({ ... }) call above:
// models: { fast: openai("gpt-6-luna") },
const liveResult = await runAgent(refundMachine, {
input: { request: "I was charged twice for the same order.", amount: 75 },
executors: createAiSdkExecutors(refundMachine),
});
```
`createAiSdkExecutors(refundMachine)` reads the `models` declared in `setupAgent({ models })`, which also type the machine's model refs. `createAiSdkExecutors({ models })` still works when the host owns the map. Executors are always explicit, and core does not import the AI SDK. See [Models and providers](https://github.com/statelyai/agent/blob/next/docs/models-and-providers.md) and [Hosts and executors](https://github.com/statelyai/agent/blob/next/docs/hosts.md).
For a machine with several requests, the executor routes on `request.name`, or `MockLanguageModelV3` from `ai/test` stands in for the provider behind `createAiSdkExecutors`. See [Evals](https://github.com/statelyai/agent/blob/next/docs/evals.md#testing-without-a-provider).
A host that needs the transition loop itself (a durable object, events pushed mid-run, a custom checkpoint policy) uses `createAgentRuntime` directly. See [Write your own host loop](https://github.com/statelyai/agent/blob/next/docs/hosts.md#write-your-own-host-loop).
## Architecture
```mermaid
flowchart LR
M["Agent machine<br/>states · guards · requests"] -->|request| R["runAgent"]
R -->|executor call| E["Host executors<br/>generateText · streamText · decide"]
E -->|API call| L["Model"]
L -->|result| E
E -->|result| R
R -->|event or output| M
```
The machine never talks to a model directly, so swapping `createAiSdkExecutors` for your own functions changes nothing about the agent.
The example above has one model decision and two final outcomes. Real machines add approval states, retries, parallel work, child agents, and long-running waits without changing how control flow is represented.
The core concepts (machines owning control flow, bounded model decisions, typed requests, host-run executors, and native XState snapshots) are in the [documentation overview](https://github.com/statelyai/agent/blob/next/docs/index.md).
## Examples
<!-- starter examples derived from examples/*/metadata.json and examples/index.ts -->
- [Twenty Questions](https://github.com/statelyai/agent/tree/next/examples/twenty-questions) shows a model choosing legal events in a loop.
- [Chameleon](https://github.com/statelyai/agent/tree/next/examples/chameleon) combines hidden information, sequential turns, and a human vote.
- [Snapshot migration](https://github.com/statelyai/agent/tree/next/examples/snapshot-migration) uses XState's native `version` and `migrate` contract.
- [Portable XState loop](https://github.com/statelyai/agent/tree/next/examples/portable-xstate-loop) runs the artifact through native transitions and effects.
- [Application-owned storage](https://github.com/statelyai/agent/tree/next/examples/file-snapshot-store) persists native XState snapshots in application code.
- [Tool calling](https://github.com/statelyai/agent/tree/next/examples/review-tool-calls) keeps tools and message history in the AI SDK's native format.
- [Ticket triage](https://github.com/statelyai/agent/tree/next/examples/triage) returns structured data from a model request.
- [JSON agent](https://github.com/statelyai/agent/tree/next/examples/json-agent) runs a machine defined as data.
See [all examples](https://github.com/statelyai/agent/blob/next/examples/README.md).
## Related
- [Machines](https://github.com/statelyai/agent/blob/next/docs/machines.md)
- [Text requests](https://github.com/statelyai/agent/blob/next/docs/text-requests.md)
- [Decisions](https://github.com/statelyai/agent/blob/next/docs/decisions.md)
- [Human in the loop](https://github.com/statelyai/agent/blob/next/docs/human-in-the-loop.md)
- [Testing and verification](https://github.com/statelyai/agent/blob/next/docs/verify.md)
- [Evals](https://github.com/statelyai/agent/blob/next/docs/evals.md)
- [Generating machines with an LLM](https://github.com/statelyai/agent/blob/next/docs/generate-machines.md)
- [Hosts and executors](https://github.com/statelyai/agent/blob/next/docs/hosts.md)
- [Models and providers](https://github.com/statelyai/agent/blob/next/docs/models-and-providers.md)
- [Use in any stack](https://github.com/statelyai/agent/blob/next/docs/any-stack.md)
- [Persistence](https://github.com/statelyai/agent/blob/next/docs/persistence.md)
- [Observability](https://github.com/statelyai/agent/blob/next/docs/observability.md)
- [Usage and budgets](https://github.com/statelyai/agent/blob/next/docs/usage-and-budgets.md)
- [Agent patterns](https://github.com/statelyai/agent/blob/next/docs/patterns.md)
- [Migrating from a hand-rolled loop](https://github.com/statelyai/agent/blob/next/docs/from-a-loop.md)
- [Coming from LangGraph](https://github.com/statelyai/agent/blob/next/docs/langgraph-comparison.md)
历史前置条件说明(补充参考)
Node 22 或更新版本;XState 必须为 6.0.0-beta.0;TypeScript 5.4 或更新版本;一个 Standard Schema 库(zod 4、zod 3.24+、Valibot 或 ArkType);使用真实模型时需自行配置模型提供方及 API Key(费用由提供方决定,待核验);包管理器示例为 pnpm;Windows 支持、国内网络与模型服务可用性待核验;MCP 接入方式待核验。
项目来源与清单版权许可
https://github.com/statelyai/agent/
https://youtube.com/c/statelyai
整理来源:https://github.com/slavakurilyak/awesome-ai-agents
清单版权与许可:
MIT License
Copyright (c) 2024 Slava Kurilyak
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.