# MathCode
### MathCode: A Frontier Mathematical Coding Agent
```
███╗ ███╗ █████╗ ████████╗██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗
████╗ ████║██╔══██╗╚══██╔══╝██║ ██║██╔════╝██╔═══██╗██╔══██╗██╔════╝
██╔████╔██║███████║ ██║ ███████║██║ ██║ ██║██║ ██║█████╗
██║╚██╔╝██║██╔══██║ ██║ ██╔══██║██║ ██║ ██║██║ ██║██╔══╝
██║ ╚═╝ ██║██║ ██║ ██║ ██║ ██║╚██████╗╚██████╔╝██████╔╝███████╗
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
```
**Project Page:** [math-ai-org/mathcode](https://github.com/math-ai-org/mathcode)
English | 中文
MathCode 是一个内置 Lean 能力的终端 AI 编程助手。agent 可以交互式检查
goal、验证候选源码、检索声明并严格验证最终证明。

## 快速开始
```bash
git clone https://github.com/math-ai-org/mathcode.git
cd mathcode
bash setup.sh --with-lean
codex auth login
mathcode
```
如果想先安装不含 Lean/Mathlib 的轻量版本,可运行
`bash setup.sh --without-lean`;之后可用 `bash setup.sh --install-lean`
补装,第一次获准调用本地 Lean 功能时也会提示安装。交互式运行
`bash setup.sh` 会询问安装方式,默认选择完整安装。
`setup.sh` 会准备发行版 checkout:下载或修复 bundle 内运行时,准备本地配置,并为后续 shell 安装 user-local 的 `mathcode` 启动命令。Linux 上还会在 bootstrap Lean workspace 前要求 `bwrap`(`bubblewrap` 包)和 `socat`。
如果当前 shell 还没有 reload profile,可以先用 bundle 内的即时兜底入口 `./run`。
### Setup 会负责什么
运行时文件:
- 如果运行时文件缺失、过旧、无法验证,或当前平台 payload 无效,就下载匹配的
`mathcode-vX.Y.Z--.tar.gz`
- 在需要修复时,从 archive 恢复 `./mathcode`、`./mathcode-webui` 和
`vendor/ripgrep/`
- 使用 `shasum` 或 `sha256sum` 校验当前平台的 `SHA256SUMS.txt` 条目
- 替换已有可用安装前,先校验下载得到的运行时文件
- 记录 CLI 和 WebUI helper 的 release metadata,方便后续 `setup.sh` 和
`setup.sh --status` 发现过旧或无法验证的二进制
本地配置:
- 在需要时从 `.env.example` 创建 `.env`
- 默认在 `~/.local/bin/` 安装受管的 user-local `mathcode` launcher
- 创建 `tools/`、`plugins/` 扩展目录和自带的 `skills/` 参考文档目录;
项目技能从 `.mathcode/skills//SKILL.md` 加载
- 在 `vendor/ripgrep/` 内自带 MathCode 内部搜索使用的 `rg` 二进制
Lean 工具链:
- 可用 `--with-lean` 完整安装、用 `--without-lean` 延后安装,并可在之后通过
`--install-lean` 或第一次获准使用本地 Lean 功能时补装
- 自带版本化的 `lean-workspace/lake-manifest.json`,让 setup 和本地运行使用
当前 release 锁定的依赖图
- setup 会在需要时物化空的受管 `VaultLibs/UserVaultLibs/` 骨架;源码构建主机
上的本地 vault 镜像、测试 fixture 与临时 Lean 文件不会进入发布包
- setup 会直接物化该锁定依赖图,不执行 `lake update`,也不会重写 manifest
- 可选的 Mathlib cache 获取结束后,必须完成本地 `MathCodeLean` readiness
build;跳过 cache 或下载失败时会回退到该构建,而构建失败会中止 setup
- 默认使用 bundle-local 的完整 `.local/elan` Lean/Lake 工具对
- 接受 Git Bash/MSYS 下可见的 `lean.exe` / `lake.exe`
- 在 bootstrap Lean workspace 前先修复不完整的本地 elan 工具文件
- 仅在 `MATHCODE_SETUP_USE_SYSTEM_LEAN=1` 且系统 `lean` / `lake` 都可用时
复用系统 Lean/Lake,并保留现有 `ELAN_HOME`
### Launcher 和 PATH 行为
setup 只会覆盖它自己之前创建过的 launcher 文件,避免覆盖已有但不属于这次安装的 `mathcode` 命令。
如果设置了 `MATHCODE_INSTALL_BIN_DIR`,相对路径会先按 bundle 根目录解析成绝对路径,
再写入 launcher、记录状态文件和受管 PATH 配置块。
即使该目录已经在当前 shell 的 `PATH` 里,setup 也会刷新受管 profile 配置块,
让之后新开的 shell 继续识别 `mathcode`。
如果选定的 launcher 目录无法使用,setup 只会跳过 launcher 步骤,其余安装流程继续执行。
当 `MATHCODE_SETUP_USE_SYSTEM_LEAN=1` 时,setup 会在切换到 bundle 根目录前捕获系统
`lean` / `lake` 路径,并把已验证的绝对路径写入 `.env`。即使之后进程的
`PATH` 不同,runtime 也会重新验证并使用这组精确路径。这两个受管路径采用严格的
`base64:` UTF-8 编码,因此反斜杠、引号和反引号都能同时安全通过 Bun dotenv
解析与 `./run` 的 shell sourcing。
未设置这个 opt-in 时,setup 会清除过期的受管系统工具链选择,`--status` 会报告
默认的本地 `.local/elan` 路径,而不会把系统 Lean 当成已安装。
生成的普通 `.env` 路径值会按 shell 规则引用,因此 bundle 路径里包含 `$` 或单引号等字符时,`./run` source `.env` 后仍会保留字面值;受管的系统 Lean/Lake 路径使用上面的双解析器编码。
### 维护命令
```bash
bash setup.sh --install-lean # 补装或修复可选的 Lean/Mathlib 支持
bash setup.sh --status # 检查二进制和依赖是否健康
bash setup.sh --clean # 删除安装产物,但保留证明结果和 vault 数据
bash setup.sh --help # 查看全部 setup 参数
```
`setup.sh --status` 会检查:
- `./mathcode --version` 和 checksum 是否匹配当前 release tag 的 metadata
- `./mathcode-webui` 是否匹配记录的 release metadata
- 当前平台的 bundled `rg` 是否可执行并能输出 ripgrep 版本信息
- 可选 Lean 支持当前是已就绪、已延后、不完整,还是尚未安装
`setup.sh --clean` 会保留 `LeanFormalizations/`、vault 里的用户输出和当前
release 锁定的 Lake manifest。
如果 setup 曾经记录过受管 launcher,之后即使不再设置
`MATHCODE_INSTALL_BIN_DIR`,`--status` 和 `--clean` 也会继续跟踪它。
## 环境要求
- macOS (arm64),或基于 glibc 且支持 AVX2 的 Linux(x86_64,使用 Ubuntu 22.04 构建)
- `curl`,用于 setup/bootstrap 下载
- `shasum` 或 `sha256sum`,用于校验 release archive 并写入 metadata
- 足够的磁盘空间用于 bundle;启用 Lean 支持时还需容纳 Lean 工具链和 Mathlib cache
- 如果你想走默认后端和默认数学流程,需要本机安装 `codex` CLI
- Python 3.12+(可选,仅 `tools/` 目录下的分析脚本需要)
## 常用命令
### CLI
```bash
mathcode -p "prove that the square of an even number is even"
echo "hello" | mathcode -p
mathcode --help
```
MCP XAA IdP setup 要求 issuer URL 非空且使用 HTTPS。`mathcode mcp xaa setup --issuer ...`
会在写入 settings 前拒绝 `http://`,包括 loopback URL。
如果当前 shell 还没 reload,可以使用 bundle 内兜底入口:
```bash
./run -p "prove that the square of an even number is even"
echo "hello" | ./run -p
./run --help
```
Agent 会直接编辑所选 workspace 中的 Lean 文件。四个 Lean 原子工具不会另建
run 目录,也不会写入证明库产物。
### 浏览器 UI
```bash
./run webui
```
`./run webui` 会先 source bundle 内的 `.env`,再启动本地 daemon,并打印浏览器认证 URL。
如果直接运行打包后的 `./mathcode-webui` helper,它会先重新进入同目录的
`./run webui` wrapper。
直接运行和 wrapper 运行会使用同一份 `.env`、本地 Lean 工具链和 bundle 默认配置。
如果同目录 wrapper 存在但无法执行,会作为启动失败报告。
在交互式 `./run` session 内,`/webui` 和 `/webUI` 会启动或管理同一个本地
daemon。该 slash command 支持 `--no-browser`、`--port `、`--status`
和 `--stop`;source-only 的 `--rebuild` 在发行版 bundle 中不可用。完整认证 URL
只写到本地终端,command result/status 文本只显示 `token=`。通过 slash
command 启动时,它选定的 port 和 workspace 会覆盖 bundle `.env` 中同名的 WebUI
设置。
### Goal 和命令限制
- `MATHCODE_GOAL_MAX_TOKEN_BUDGET` 会限制 source `/goal`、`/goal` daemon
commands 和 `/api/v1/sessions/:id/goal` 接受的 token budget。它支持与
`/goal` 相同的正整数、整数值小数和 `k`/`m`/`b` 紧凑格式;未设置或非法值会回退到
`1000000000`。
- `MATHCODE_MAX_CHAINED_COMMAND_INPUTS` 会限制 `QueryEngine` abort 前允许的嵌套本地
slash-command next-input 提交数量。未设置或非法值会回退到 `25`。
### Goal 命令语法
交互式发布版 session 支持:
- `/goal `
- `/goal --budget `
- `/goal --budget=`
- 可选的 `--max-continuations N` 或 `--max-continuations=`
- `/goal pause`、`/goal resume`、`/goal status`、`/goal clear`
- 裸 `/goal`、`/goal help`、`/goal -h`、`/goal --help`
该命令会继续同一个 session,不会启动单独 agent。以 `/` 开头的 objective
会作为普通 goal 文本提交,不会再次解析成 slash command。
budget 后的第一个 objective token 可以是 `--help`。objective 解析已经开始后,
flag-like token 会保留为 objective 文本,除非后置的有效 `--budget`
正在用于提供必需的显式 budget。
当 `--budget` 被解析为 budget 选项时,非法值会被拒绝,包括这样的数值表达式
objective:
```text
1 + 1 ... --budget nope
```
### 模型 Effort
`--effort ` 或交互式 `/effort ` 可使用 `low`、`medium`、
`high`、`max` 或正整数;`/effort auto` 和 `/effort unset` 会让当前
session 回到模型默认值。
CLI 模型覆盖里的保留值 `default` 会按大小写不敏感匹配;自定义模型 ID
会保留原始大小写。
### 自定义 Agent
自定义 agent 定义会 trim `description`、JSON `prompt`、markdown prompt 正文、`initialPrompt`,以及 `effort`、`permissionMode`、`memory`、`isolation` 这类 JSON enum 字段。
空白的必填 description/prompt 会被拒绝,空白的可选 initial prompt 会被忽略;
JSON `skills` 列表会按 markdown frontmatter 的规则归一化。
### Session 诊断、Compaction 和任务
交互式 context 显示会保留诊断信息:
- `/context` 在交互式和非交互式会话里使用同一套可见 markdown transcript 输出
- `/config` 里有默认开启的 `Show tool-use warnings` 开关。关闭后只会抑制
非错误、且不是 stream parser/drop diagnostic 的 runtime warning transcript
事件;tool error、权限拒绝、validation failure、stream-json parser diagnostic
以及会影响 agent 下一步的 tool-call 诊断仍然会保留给 agent。
- markdown 表格会转义单元格内容
- slash-command 和 deferred built-in tool 明细保持可见
- 显示 MCP loaded/available 状态
- current-usage 表格会排除 deferred categories
- manual compact reserve 会作为 reserved buffer 展示
- 当前 usage 为空时仍显示 free/reserved 行
- malformed token rows 和 zero-token synthetic windows 不会产生非法建议百分比
- server-side/MCP tool blocks 会计入 message breakdown
Compact 和 autocompact 路径会:
- 钳制异常阈值、token 计数、legacy content shape 和空白 tool ID
- 保留 singleton tool-result 配对
- 把 statusline、away summary、survey、sticky prompt UI 限定到 compact 后的活跃 transcript
- partial compact 后抑制陈旧 warning
- 合并重复的远端 compacting 状态
任务处理:
- `/tasks`、`TaskStop` 和 SDK `stop_task` 不会把可选中的 leader 行计入 running teammate
- 可以停止 pending remote agent 和 running in-process teammate
- task tools 和 SDK `stop_task` 会 trim task id
- deprecated `shell_id` 以及 TaskOutput `agentId`/`bash_id` alias
可以回填空白 `task_id`
- legacy `wait_up_to` 秒数会被归一化
- 会跨用户可见的 status shape 恢复旧版持久化 task status
- 接受 legacy `TaskUpdate` status alias
- 拒绝空白任务文本字段
- task metadata key 会被 trim,空白或不安全的 `__proto__` metadata key 会被拒绝
- TaskOutput timeout 必须是整数值
- idle in-process teammate output 会被视为可读取,而不是等到 timeout
- TaskOutput/TaskStop 的混合 text/structured result 数组会正确回放
- legacy TaskOutput output 回放会保留类似 `` 的普通文本
- command 空白被 trim 时不会误显示 TaskStop 截断省略号
- 很矮的终端里仍显示隐藏任务摘要,recently completed 行会按时过期
Shell sleep 自动后台化和 path validation 会识别:
- decimal、suffix、signed、exponent 和 trailing-dot duration,例如
`sleep 2s`、`sleep 2m`、`sleep +2` 和 `sleep 2e0`
- `env ... sleep 2s` 这类 wrapped shell 写法
- PowerShell quoted、commented、redirected 和 module-qualified sleep command,
例如 `& 'sleep' 2`、`Start-Sleep -Seconds:2 > $null` 和
`Microsoft.PowerShell.Utility\Start-Sleep -Seconds 2`
- TimeSpan `-Duration` 值,以及 PowerShell 参数缩写和 common parameters
- 短、小数、signed 和 exponent `timeout` wrapper
## 功能特性
### 持久化 Lean 反馈后端
符合条件的普通 compile caller 可以选择启用进程内 Lean REPL:
```env
MATHCODE_LEAN_REPL=1
```
外部 Kimina Lean Server 还可以服务原子探索:
```env
MATHCODE_KIMINA_SERVER=1
MATHCODE_KIMINA_CMD="/absolute/path/to/kimina-lean-server/.venv/bin/python -m server"
MATHCODE_KIMINA_CWD=/absolute/path/to/kimina-lean-server
MATHCODE_KIMINA_PROJECT_ROOT=/absolute/path/to/served-lean-project
```
在 macOS 上,只有 declared project 与解析出的项目完全一致,并且在线 guard 确认 Lean
版本一致时,`LeanGoal` 与 `LeanCheck` 才会复用该 server;否则会回退到
pinned subprocess,并把原因作为 warning 返回。Kimina 反馈不是完成证书。
`LeanVerify` 与隔离的 paper agent 始终使用全新的隔离 subprocess。MathCode
会在 fail-closed Lean sandbox 内以 loopback-only、随机 bearer key(不会进入
Lean REPL 环境)、无 provider credential、仅 scratch 可写的方式启动 Kimina。
若使用 virtualenv,它必须位于 `MATHCODE_KIMINA_CWD` 下;
`MATHCODE_KIMINA_CMD` 必须直接以该 Python 可执行文件开头,不能使用命令包装器。如果 manifest package
root 包含项目或其他受保护 host scope,启动会直接失败;
remote package storage 必须留在项目内。只使用 Python 标准库的 guardian
位于独立只读 support root,并复用已选择的 Kimina Python,因此 sandbox 不会
开放 MathCode 源码或第二套 runtime;交接路径进入该解释器前,Python site、
`.pth` 与 `sitecustomize` 加载会被禁用。该 guardian 介入受支持的 `setsid` Lake
启动,在 Lean 启动前移除私有交接环境、两个 Kimina key 名称及 mode-0600
认证交接文件,并独立监测 owner pipe HUP,所以 Lake 即使停止读取输入也会被
连同其单独进程组清理。父进程退出以及
`SIGINT`/`SIGTERM`/`SIGHUP` 也会清理完整的已拥有进程树。
取消当前 `/api/check` 请求会保留共享服务;取消旧版 `/verify` 请求或
backend/transport 状态不确定时,才会清理整棵服务进程树并重启。Linux 与
Windows 继续使用 pinned subprocess。
### 计划文件
`/plan` 默认把当前 session 的计划 markdown 写到 active user config home
的 `plans/` 槽位里:默认是 `~/.mathcode/plans/`;如果设置了
`MATHCODE_CONFIG_DIR`,则跟随重定位后的 config home。若要把计划文件保留
在项目树内,可在 project 或 local settings 里把 `plansDirectory` 设置为
相对于项目根的自定义目录。嵌套目录会按需创建;如果路径通过 symlink 逃出
项目根,则会回退到 user config home 的 `plans/` 目录。
### 定理库
显式管理可供后续证明复用的定理库:
```bash
/theorem-store store # 验证并存储一个定理
/theorem-store sync # 检查候选,并询问要存储哪些声明
/theorem-store check # compile-check 组装后的定理库
/theorem-store status # 查看入库数量和 vault 信息
```
`/theorem-store store` 会针对一个显式的 fully qualified 声明调用
`LeanTheoremLibrary`。该工具执行新鲜、严格的验证,在持久化前立即重新核对
源码与依赖快照,然后对组装后 `Stored.lean` 中已重命名的最终声明再次执行
严格验证。重命名前后的 elaborated 命题必须一致;成功后会立即构建可 import
的 workspace module。定理库、workspace 镜像、编译产物与索引作为一个可回滚
事务更新。
私有定理编译与公开 Lake 发布分别使用有界的 300 秒构建预算;若超时,事务仍会
回滚,不会暴露不完整产物。
`/theorem-store sync` 只是可选的 agent 指导:先发现候选并询问要存储哪些
声明,再对每个确认项分别执行同一个逐声明工具调用。Lean 反馈工具不会把
定理作为隐藏副作用写入定理库。
### 公理库
将对话中的假设存储为持久化、一致性检查的声明:
```bash
/axiomatize "A 比 B 快" # 形式化 + 存储
/axiomatize list # 查看所有活跃公理
/axiomatize check # 一致性审查
/axiomatize remove # 删除一个声明
```
公理按 vault 存储,带有 Lean 形式化并经过编译检查。Lean 原子工具不会隐式
注入这些公理;只有在它们确实属于目标证明上下文时,才显式 import 或引用。
### Obsidian 定理图谱
生成 Obsidian vault,以知识图谱的形式可视化定理依赖关系:
```bash
/obsidian on # 启用并从已有形式化结果生成
/obsidian off # 禁用
/obsidian generate # 立即重新生成
```
修改证明后使用 `/obsidian generate` 显式刷新 vault。Lean 原子工具不会把更新
vault 作为隐藏副作用。在 Obsidian 中打开并使用 Graph View 查看定理与引理之间
的关系。
刷新只覆盖带有 MathCode 托管标记的笔记,以及托管标记引入前由 MathCode 生成
且精确符合旧格式的投影;旧投影刷新后会补上标记。如果定理、引理、索引或
blueprint 文件名被其他用户笔记占用,生成会失败并保留该笔记。
每个引理条目都包含通过 `#print` 从 Mathlib 查询到的完整 Lean 定义。
### Agentic Lean
普通 Lean 工作可以由 agent 自主选择四个原子工具:
- `LeanGoal` 检查一个明确的源码位置。
- `LeanCheck` 编译文件或不落盘的候选源码,并返回结构化反馈。
- `LeanSearch` 只查询一个明确指定的 provider,不做隐藏 fan-out。
- `LeanVerify` 对一个 fully qualified declaration 执行严格的最终检查;只有 `data.verified=true` 才代表完成。
可选的 `/lean` skill 只提供启发,不强制阶段、tactic 顺序、重试预算或
planner。原有固定控制器已经移除,不是发行包入口,也不在 model-visible
工具目录中。
被废弃的是固定 scheme,不是有用方法:agent 仍可按需选择子目标分解、helper
lemma、分支、milestone、stuck detection、诊断 repair 和 theorem reuse,并可
自由重排或放弃。axiom 与 theorem library 是独立的显式动作,不会成为 Lean
原子调用的隐藏副作用。
严格验证只使用项目目录外解析出的 Lean/Lake 可执行文件,并保留 Lake 解析出的
规范源码/module context;目标的 axiom usage 与 module 直接声明的公理都来自
Lean environment API,不会信任源码可控制的 macro 或输出。
### 定时 Agent 循环
发行版自带循环调度能力,不需要额外构建参数。
在交互式 MathCode 会话里可以直接用:
```bash
/loop 10m check the deploy
/loop 1h /standup 1
```
短期提醒或监控建议直接用这种循环;如果你希望任务在重启后继续保留,就在交互式会话里创建持久化定时任务。
## 可扩展性
MathCode 支持三种扩展机制:
### 技能 (`.mathcode/skills/`)
项目技能应放在 `.mathcode/skills//SKILL.md`。每个技能使用独立目录;
单独的 `skills/*.md` 文件不会被加载。
### 工具 (`tools/`)
放入带有 YAML frontmatter 的 Python `.py` 脚本即可添加分析工具。启动时自动发现。
内置 3 个分析工具:`axiom-checker`、`lib-search` 和 `proof-stats`。即使从其他
workspace 启动 MathCode,它们仍然可用;workspace 中同名(规范化后)的工具会覆盖
bundle 内置版本。仅在使用这些工具时才需要 Python 3.12+。
### 插件 (`plugins/`)
放入带有 `.mathcode-plugin/plugin.json` 清单的插件文件夹,即可添加命令、技能、
Agent、MCP 服务器、钩子等。
通过 `--plugin-dir` 加载,或在 MathCode 内通过 `/plugin` 从 Git 仓库安装。
## 后端设置
### 默认 Codex/OpenAI 路线
默认路线不需要改 `.env`:
```bash
codex auth login
mathcode
```
如果你还在刚执行完 setup 的同一个 shell 里,先用 `./run` 也可以;reload shell 之后再直接用 `mathcode`。
本仓库的 `.env.example` 现在会选择 GPT-6 Astra 与 medium 推理强度。若要把相同
配置应用到由旧版发行包创建的现有 `.env`,并同时选择 CLI 的 medium effort
level,请设置:
```env
OPENAI_MODEL=gpt-6-astra
OPENAI_SMALL_MODEL=gpt-6-astra
OPENAI_REASONING_EFFORT=medium
MATHCODE_EFFORT_LEVEL=medium
```
如果你想改成 Anthropic 兼容后端,可以设置:
```env
MATHCODE_USE_OPENAI=0
ANTHROPIC_API_KEY=sk-ant-...
ANTHROPIC_MODEL=claude-sonnet-4-5
```
发行版 `./run` wrapper 会先 source bundle 内的 `.env`,再启动 MathCode。
交互式 `/webui` slash-command 启动时,它选定的 WebUI port 和 workspace
会覆盖该 `.env` 中同名的键。
WebUI 路由默认值独立于 CLI `.env`。请在 WebUI 设置中选择 provider `openai`、
model `gpt-6-astra` 和 reasoning effort `medium`。已有保存的路由会被保留。
全新 WebUI 的默认值和内置 Astra 能力信息需要包含 Astra 更新的运行时二进制;
修改本仓库的模板不会更新已安装的二进制或已经发布的 release 压缩包。
对于单独启动的 paper 任务,可按需在现有 `.env` 中显式设置
`MATHCODE_PAPER_MODEL=gpt-6-astra` 和
`MATHCODE_PAPER_REASONING_EFFORT=medium`。Lean 编译验证本身不选择模型。
### WebUI Provider 密钥
WebUI 设置页里的 provider-key 行只包含 daemon 当前能传给真实 child session 的
secret:`anthropic` 和 `openrouter`。Codex/OpenAI 路线使用 Codex OAuth,
不使用 `OPENAI_API_KEY` 行。
WebUI 的 `minimal` reasoning effort 会在 OpenAI/OpenRouter 路线上保留;
在 Anthropic 兼容路线中会映射到 CLI 当前可用的最低档 `low`。
### 打包的 Provider 依赖
发行版二进制会打包 Anthropic 兼容、Bedrock、Vertex 和 Foundry 分支所需的
provider SDK,以及 MCPB/DXT plugin package;这些路线不需要源码 checkout
里的 `node_modules`。Bedrock、Vertex 和 Foundry 使用各自 provider 的认证方式,
不使用 Anthropic 兼容的 `ANTHROPIC_AUTH_TOKEN` / `apiKeyHelper` bearer headers。
## 常见问题
**Q: setup 之后立刻执行 `mathcode` 还是找不到命令**
开一个新的 shell,或者执行:
```bash
source ~/.zshrc
```
如果你想在 reload 之前先继续使用,也可以直接运行:
```bash
./run
```
**Q: `./run` 报 `exec format error`、`Bad CPU type in executable` 或类似启动错误**
通常是因为下载了错误平台的二进制。重新执行 `bash setup.sh`,或者手动从 GitHub Releases 下载匹配你平台的 asset。
**Q: 启动时提示缺少 Codex 认证**
执行:
```bash
codex auth login
```
**Q: 能不能不 clone,直接下载 release asset**
可以。你也可以直接从 GitHub Releases 下载 `.tar.gz` bundle 后解压使用。
这个 archive 本身是自包含的;只有当 bundled runtime 文件缺失、过旧或无法验证时,
`bash setup.sh` 才会再从 GitHub 下载。bootstrap 仓库只是把 `bash setup.sh`
作为默认路径。
## Star History
想看项目的关注度变化,可以直接查看下面的 Star History 图表:
[](https://star-history.dera.page/#math-ai-org/mathcode&Date)
## 引用
如果你在研究中使用 MathCode,可以按下面的方式引用:
```bibtex
@misc{mathcode2026,
title = {MathCode: A Frontier Mathematical Coding Agent},
author = {Team Math-AI},
journal = {math-ai-org.github.io},
year = {2026},
month = {April},
url = "https://github.com/math-ai-org/mathcode"
}
```
## 社区
加入我们的 Discord 获取帮助、反馈和讨论:**[discord.gg/f2AFP9W5](https://discord.gg/f2AFP9W5)**
## 致谢
MathCode 将有用的证明搜索思想保留为可选的 agent 指导,同时始终以 Lean
作为证明权威。