关于 A0
A0 是面向 AI Agent 的精简编程语言,通过带版本校验的结构化编辑来编写和检查程序,并编译到多种目标。其 MCP 服务为 Agent 提供受限文件访问的编辑、运行、检查和编译工具。
主要功能
- 01带版本校验的结构化编辑
- 02检查与诊断修复
- 03运行参考解释器
- 04编译到多种目标
- 05限制项目目录内文件访问
适用场景
- 01让 Agent 按结构化操作修改 A0 程序
- 02检查程序并应用精确修复
- 03运行程序或生成目标代码
MCP 相关
MCP 服务通过 stdio 向 AI Agent 提供打开程序、应用编辑、检查、运行、编译和保存等工具。文件访问限制在启动目录内,不执行 shell。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
A0
一门为 AI 而非人类打造的编程语言。 a0lang.com · 文档
A0 是一门小型编程语言,AI Agent 通过经过校验的结构化编辑来修改代码,并可从同一份源码编译为原生代码、wasm、JavaScript、JVM、.NET、Metal 和 SystemVerilog。
30 秒快速上手
任选一种。全部免费、本地运行,无需账号或密钥。
1. Agent 技能(Claude Code、Codex、Cursor、Copilot、Gemini CLI 及许多其他 Agent,通过 skills CLI):
npx skills add Joe-Simo/a0
2. MCP 服务(需要将 a0 二进制文件添加到 PATH,见下一项)。粘贴到 Claude Desktop(claude_desktop_config.json)、Cursor(.cursor/mcp.json)或任何接受 mcpServers 的客户端中;Claude Code:claude mcp add a0 -- a0 mcp .;VS Code:使用 integrations/vscode.mcp.json 中的 .vscode/mcp.json。
{ "mcpServers": { "a0": { "command": "a0", "args": ["mcp", "."] } } }
3. 二进制文件(单个文件,无需 Node,并已根据发行版的 checksums.txt 验证 SHA-256):
curl -fsSL https://raw.githubusercontent.com/Joe-Simo/a0/main/install.sh | sh # macOS / Linux
irm https://raw.githubusercontent.com/Joe-Simo/a0/main/install.ps1 | iex # Windows (PowerShell)
坦诚说明现状:A0 不支持浮点数、堆和递归,字符串以字节为单位。它是一门内核和编辑循环语言,而非通用语言。下方数据是在一台未处于空闲状态的机器上测得的;STATUS.md 中的性能损失清单列出了 A0 较慢的情况。正确性验证分为两部分:每个目标都通过执行与同一预言机进行检查;优化器则使用 Z3 证明了 48 个语料库函数等价;其余部分经过测试,但未经证明。许可证:Apache 2.0。更多信息:a0lang.com、a0lang.com/benchmarks。
A0 是一门精简、规范明确的语言,通过经过版本校验的结构化编辑来模拟编写和编辑。模型只读取编辑涉及的内容,只写入变更的行,不会应用无效内容。一个程序可编译为原生机器码(A0 自有的 AArch64 代码生成器,或 C)、浏览器端的 wasm32、JavaScript、JVM、.NET、Metal GPU 内核和时钟驱动的 SystemVerilog,并且每个目标都经过与同一预言机的验证。
数据来自仓库中的基准测试(Apple M3,8 核,results/*.json)。机器并未处于空闲状态:results/exec-benchmark.json 记录了主测试和 arm64 测试期间 1/5/15 分钟的平均负载为 6.4-8.0,JavaScript 重新测量期间为 32-40;目前正在等待在空闲机器上重新测试:
| 原生 A0 与手写 C 对比 | 每次调用耗时 1.00x(持平) |
| 原生 A0 与 Python / JavaScript 对比 | 快 174x / 8.0x(10 个内核的几何平均值) |
| 模型每次编辑读取的 Token 数 | 比读取整个文件少 7.3x |
| 已进行基准测试且通过校验和验证的语言 | 48 种(其中 9 种与 A0 的差距在 5% 以内,其余更慢) |
| 所有目标上均通过的预言机测试用例 | 5262 / 5262 |
| 已证明等价的优化器(Z3) | 48 / 48 个语料库函数 |
| 与 TypeScript 相比的完整任务 Token 数 | 在包含 40 个函数的程序中节省 3.0x;在单函数任务中多用 1.46x(两项结果均已发布) |
网站 a0lang.com 本身也是由两个 A0 程序构成的(site/page.a0、site/docs.a0)。
请参阅 DESIGN.md 了解设计意图和
语义;参阅 MODEL_GUIDE.txt 了解面向 AI 的语言
指南;参阅 STATUS.md 了解当前结果、性能损失清单、已知限制和后续行动
(会话历史见 docs/history/);机器可读的证据见 results/。
安装
A0 是一个独立的单文件二进制程序:无需 Node 或 Bun。
# macOS / Linux: Homebrew (this repository is the tap; no separate tap repository)
brew tap Joe-Simo/a0 https://github.com/Joe-Simo/a0
brew install a0
# macOS / Linux: script (detects OS/arch, verifies SHA-256, installs to ~/.local/bin)
curl -fsSL https://raw.githubusercontent.com/Joe-Simo/a0/main/install.sh | sh
# Windows (installs to %LOCALAPPDATA%\Programs\a0 and adds it to your user PATH)
irm https://raw.githubusercontent.com/Joe-Simo/a0/main/install.ps1 | iex
两个脚本都接受 A0_VERSION=v0.8.16 来固定发行版,并接受 A0_INSTALL_DIR 来更改安装位置。也可以手动从最新发行版下载二进制文件,并根据 checksums.txt 进行校验。a0 --version 会打印发行版和编译器版本。然后:
printf 'fn sq u32 -> u32\na mul p0 p0\nret a\nend\n' > sq.a0
a0 run sq.a0 sq 12 # 144
a0 emit arm64 sq.a0 # A0's own machine code; or c, js, java, sv
a0 check sq.a0 # diagnostics with codes; --json for fields, --fix applies the exact fixes
a0 explain A0102 # what a diagnostic means, with a failing and a fixed example
二进制文件:a0-darwin-arm64、a0-darwin-x64、a0-linux-x64、a0-linux-arm64、a0-windows-x64.exe。只有在本机链接原生输出时才需要 C 编译器(clang 或 gcc)。
MCP 服务
a0 mcp <file-or-dir> 通过标准输入/输出(Model Context Protocol)向 AI Agent 提供 A0 服务,让它们通过工具而非文本文件进行编辑:a0_open(带句柄的函数视图)、a0_program(程序句柄,可选按目标范围限定)、a0_apply(在句柄下编辑;返回新视图或诊断,其中包含 code(类别)、id(A0nnnn)、message、expected/actual、fix 和适用性;回复 fix all 会以原子方式应用上次被拒绝编辑的所有精确修复)、a0_check、a0_run(受燃料限制的参考解释器)、a0_emit(任意目标)、a0_save(仅在成功应用编辑后可用)。路径仅限启动根目录内(拒绝符号链接逃逸和 use 逃逸);不会运行 shell;输出有长度限制。
语言服务器
a0 lsp [root] 是一个通过标准输入/输出运行的 Language Server Protocol 服务器(基于 vscode-languageserver 构建;接受但忽略 --stdio)。让任意 LSP 客户端将其用于 .a0 文件:打开和更改时由链接器和检查器提供诊断(诊断中的 code 是类别,data 携带表格代码 id、修复及其适用性,精确修复会作为快速修复提供)、悬停提示(函数签名、op 文档)、跨 use 文件跳转到定义、文档符号、op 和作用域内函数补全,以及通过规范打印器进行格式化。文件范围与 MCP 服务完全相同,限制在 root 内(默认为工作目录);根目录之外的文档会收到一条 limit 诊断,不会有其他内容。
与 AI Agent 搭配使用
请先将 a0 添加到 PATH(参见安装)。以下每个入口都会运行同一个本地标准输入/输出服务 a0 mcp <dir>,无需托管或账户。可直接复制的配置位于 integrations/。skills/a0/ 中的 Agent Skill(通过 npx skills add Joe-Simo/a0 安装)会讲解该语言,并仅在需要时加载入门指南和编辑协议。
| Agent | 安装 | 本地 stdio |
|---|---|---|
| Claude Code | claude mcp add a0 -- a0 mcp .(仅 MCP),或先运行 /plugin marketplace add Joe-Simo/a0,再运行 /plugin install a0@a0(MCP 加技能) | 是 |
| Claude Desktop | 双击最新版本中的 a0-mcp-<os>-<arch>.mcpb,或将 integrations/mcp.json 添加到 claude_desktop_config.json | 是 |
| Claude.ai | 将 plugin/skills/a0/ 压缩为 ZIP,并在 Settings > Capabilities > Skills 下上传(仅技能;claude.ai 连接器仅支持远程连接) | 仅技能 |
| Cursor | 添加到 Cursor,或将 integrations/mcp.json 放入 .cursor/mcp.json | 是 |
| VS Code / GitHub Copilot | code --add-mcp '{"name":"a0","command":"a0","args":["mcp","${workspaceFolder}"]}',或将 integrations/vscode.mcp.json 作为 .vscode/mcp.json;将技能放入 .github/skills/ 或 ~/.copilot/skills/ | 是 |
| GitHub Copilot CLI | copilot mcp add 或 ~/.copilot/mcp-config.json(格式参见 mcp.json) | 是 |
| OpenAI Codex CLI/IDE | codex mcp add a0 -- a0 mcp .,或使用 integrations/codex.config.toml;将技能放入 .agents/skills/;将插件放入 plugin/.codex-plugin/ | 是 |
| Gemini CLI | gemini extensions install https://github.com/Joe-Simo/a0(MCP 加 GEMINI.md) | 是 |
| Qwen Code | qwen mcp add a0 a0 mcp .,或运行 qwen extensions install https://github.com/Joe-Simo/a0(读取 Gemini 扩展) | 是 |
| Windsurf / Devin Desktop | 将 mcp.json 放入 ~/.codeium/windsurf/mcp_config.json | 是 |
| Devin CLI | devin mcp add a0 -- a0 mcp . | 是 |
| Zed | 在 Zed 设置中使用 integrations/zed.settings.json | 是 |
| Cline | 将 mcp.json 放入 cline_mcp_settings.json | 是 |
| Roo Code | 将 mcp.json 放入 .roo/mcp.json | 是 |
| Kilo Code | 将 integrations/kilo.jsonc 放入 kilo.jsonc | 是 |
| Continue | 将 integrations/continue.a0.yaml 作为 .continue/mcpServers/a0.yaml(Agent 模式) | 是 |
| JetBrains AI Assistant / Junie | Settings > Tools > AI Assistant > MCP,粘贴 mcp.json;Junie:使用 .junie/mcp/mcp.json,将技能放入 .junie/skills/ | 是 |
| Augment | auggie mcp add,或使用 mcp.json 从 JSON 导入;将技能放入 .augment/skills/ | 是 |
| opencode | 将 integrations/opencode.json 作为 opencode.json;将技能放入 .opencode/skills/ | 是 |
| Amp | amp mcp add a0 -- a0 mcp .;amp skill add Joe-Simo/a0 | 是 |
| Goose | goose session --with-extension "a0 mcp .",或使用 integrations/goose.config.yaml | 是 |
| Warp | 将 mcp.json 放入 .warp/.mcp.json | 是 |
| Crush | 将 integrations/crush.json 放入 crush.json | 是 |
| Factory Droid | droid mcp add a0 "a0 mcp ." | 是 |
| Grok Build CLI (xAI) | 将 integrations/codex.config.toml 中的 [mcp_servers.a0] 放入 ~/.grok/config.toml | 是 |
| Mistral Vibe CLI | integrations/mistral-vibe.config.toml | 是 |
| Kimi CLI | kimi mcp add a0 --transport stdio -- a0 mcp . | 是 |
| LM Studio | 将 mcp.json 放入 LM Studio 的 mcp.json,或使用 lmstudio://add_mcp?name=a0&config=eyJjb21tYW5kIjoiYTAiLCJhcmdzIjpbIm1jcCIsIi4iXX0= | 是 |
| Perplexity (Mac app) | Connectors > Add > Simple:a0 mcp /path/to/project(需要 PerplexityXPC 辅助程序) | 是 |
| Hugging Face smolagents | MCPClient(StdioServerParameters(command="a0", args=["mcp", "."])) | 是 |
| Hugging Face tiny-agents | 在 agent.json 中配置 "servers": [{"type": "stdio", "command": "a0", "args": ["mcp", "."]}] | 是 |
| Aider | 不支持 MCP。运行 aider --read plugin/skills/a0/references/primer.txt 并使用 a0 CLI | 不支持 MCP |
| Open WebUI (Ollama) | 仅支持 Streamable HTTP;A0 不提供托管服务 | 需要远程 MCP |
| ChatGPT (developer mode / Apps) | 仅支持远程 HTTPS | 需要远程 MCP |
| Mistral Le Chat | 仅支持远程连接器 | 需要远程 MCP |
| xAI Grok API | 仅支持远程 MCP 工具(HTTP/SSE) | 需要远程 MCP |
| Replit Agent, Bolt.new, Lovable, v0 | 仅支持远程 HTTPS | 需要远程 MCP |
当你的 Agent 不在项目文件夹中启动服务时,将 . 替换为服务可读写的文件夹。 |
项目规则、钩子和 CI
a0 init [dir]会写入AGENTS.md(Codex、Cursor、Copilot、Jules 等会读取),其中包含 MCP 工具工作流、编辑协议和入门指南路径(.a0/MODEL_GUIDE.txt,有则复制到项目中,否则使用 GitHub URL),还会在CLAUDE.md和GEMINI.md中加入@AGENTS.md引用,为 Cursor(.cursor/rules/a0.mdc)、Windsurf(.windsurf/rules/a0.md)和 Copilot(.github/instructions/a0.instructions.md)添加 glob 规则,并配置 Gemini CLI 的AfterTool钩子(.gemini/settings.json)。现有指令文件只会追加一次 A0 部分;其他现有文件会保留。a0 hook是编辑后的检查:它从标准输入读取钩子的工具调用 JSON;当编辑后的*.a0文件未通过a0 check时,会输出阻止响应,其原因是包含fix:的准确诊断信息。- Claude Code 插件(
plugin/):在Edit|Write|MultiEdit上配置PostToolUse钩子(plugin/hooks/hooks.json,运行a0 hook;如果a0不在PATH中,请设置A0_BIN),并提供斜杠命令/a0-check、/a0-emit、/a0-run(plugin/commands/)。 - CI:
uses: Joe-Simo/a0@main(根目录的action.yml,输入项version,默认值为latest)会为运行器下载发布二进制文件,并检查所有已跟踪的.a0文件。pre-commit:repo: https://github.com/Joe-Simo/a0,钩子 ID 为a0-check(需要a0在PATH中)。 a0 check接受多个文件;如果任一文件检查失败,则退出码为 1,并为每个失败文件打印<file>: error: <code>: ... fix: ...。
隐私
a0 MCP 服务和 .mcpb 包完全在你的机器上运行。它们不会收集数据、发起网络请求,也只会在你指定的文件夹内读取或写入。
A0 的构建过程
仅说明仓库记录的内容:
- A0 由遵循 AGENTS.md 中规则的 AI Agent 开发:每项更改都要通过本地、确定性的检查关卡(
a0-dev),文档中的数字或比较结果都必须有对应的结果文件。- Git 历史(截至提交0675fe8):自 2026-09-29 起共有 622 次提交。其中 620 次使用所有者的身份(GitHub no-reply 地址),另有 2 次来自github-actions[bot]。622 次提交中有 514 次带有Co-Authored-By尾注,署名为 Claude 模型(Sonnet 5.5、Opus 5.5 或 Fable 5.1)。其余 108 次未署名共同作者;仓库没有记录这些提交是由人还是 Agent 编写的。 - 人类编写和 Agent 编写的文本比例:未记录。文件没有这类标记,两种情况下的提交身份都是所有者,因此本 README 不会声称存在某种比例。
- 实验对象是全新的模型会话;后续实验的任务集由实验对象之外的人员编写,并通过 SHA-256 封存(
tools/ai-edit-tasks-*.sha256)。 - Token 或金钱成本:未跟踪。STATUS.md 中有一个 TODO,计划开始记录。
在全新机器上复现基准测试数据的方法:scripts/bench-repro/README.md。
贡献
欢迎贡献,无需账号、密钥或付费服务。简要步骤:
- Fork 此仓库并克隆你的 fork;将此仓库添加为
upstream。 - 从
upstream/main创建分支(每项更改使用一个分支),添加测试并完成更改,然后运行bun run lint、bun run typecheck和bun run test。 - 推送到你的 fork,并针对
main发起拉取请求。CI 会对此运行检查;合并前,维护者会运行完整检查。
详细信息(布局、构建、确保测量结果可靠的规则、如何为实验添加后端或语言、Windows 注意事项)请参阅 CONTRIBUTING.md。请阅读行为准则;如需报告安全问题,请参照 SECURITY.md 中的说明。 如果要更改语言本身,请先创建 issue。
编译器正在用 A0 重写(参见 compiler/ 和 DESIGN.md 第 7a 节)。在此之前,编译器本身使用 TypeScript 编写,开发编译器需要 Bun 或 Node 22+。A0 用户无需这些:发布的 a0 二进制文件是独立的。
bun install
bun run lint # Biome
bun run typecheck # tsc --noEmit
bun run test # node --test on dist/test
bun run verify # cross-toolchain differential execution -> results/verification.json
bun run hw # Icarus simulation + Yosys synthesis -> results/hardware.json
bun run bench # in-process timings + byte fixture -> results/benchmark.json
bun run tokens # tokenizer probe (js-tiktoken) -> results/tokens.json
bun run exec-bench # emitted vs 45+ hand-written baselines -> results/exec-benchmark.json
bun run app # Life application acceptance, 7 targets -> results/app.json
bun run site # browser demo (wasm + DOM adapter) -> site/dist/
bun run gpu # Metal GPU execution of the corpus -> results/gpu.json
bun run dotnet # C# / .NET execution of the corpus -> results/dotnet.json
CLI(运行 bun run build 后):
node dist/src/cli.js check examples/kernels.a0
node dist/src/cli.js run examples/kernels.a0 affine 10 3 7 # 37
node dist/src/cli.js emit js|c|java|sv examples/kernels.a0 [out]
node dist/src/cli.js wasm examples/kernels.a0 kernels.wasm # needs clang + wasm-ld
node dist/src/cli.js revision examples/kernels.a0 affine
node dist/src/cli.js patch examples/kernels.a0 edit.patch [out.a0]
布局:src/core.ts 包含语法、验证和解释器,src/edit.ts 包含修订和编辑会话,src/optimize.ts,src/backends.ts 包含 JS/C/Java/SystemVerilog 代码生成和生成缓存,src/toolchain.ts 包含已安装工具的集成,src/cli.ts,test/,tools/(语料库 + oracle、verify、hw-verify、bench、token-bench)。
为 Agent 设计的错误
每条诊断都是 src/diagnostics.ts 中的一行:稳定代码(A0nnnn)、粗略类别(parse、type、structure、limit、edit、patch、revision、handle、runtime、cli、unchanged)、消息模板、修复方法,以及 a0 explain 文本,其中包含一个失败示例和一个修正示例。a0 check --json、编辑协议、MCP 服务和 LSP 会将诊断以 {code, id, message, line, expected, actual, fix, applicability, edits} 的形式传递给 Agent。遇到未知名称(op、function、node、fold body、loop predicate、type)时,会按照 TypeScript 的拼写规则给出“你是否想输入……”的建议。修复分为 exact(可安全地直接应用,并附带可执行修复的 edits)或 maybe。在编辑协议中,回复 fix all 会应用上一次被拒绝回复中的所有 exact 修复,并在提交前验证结果。test/diagnostics.test.ts 会运行每个 explain 示例;corpus/reject/ 存放被拒绝的程序和回复,其中包含每个程序必须引发的诊断,以及修复生成的程序(node dist/tools/reject-corpus.js [--bless] [--coverage])。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。