Cordonix 0.0.5 已发布。Cordonix(简称 cdx)是面向 AI 编程代理的原生本地工具运行时,使用 C11 实现,通过 MCP stdio 服务和 JSON 命令行接口提供本地程序执行、内存文件工作区、严格编码处理、目录与路径查询,以及外部 Git/ripgrep 的结构化适配。
本次正式版本于 2026 年 11 月 2 日发布,增加 Windows 原生手机工具和只读进程查询,并支持 Microsoft Store、便携版 PowerShell 7 的已保存脚本执行。下面介绍新版本包含的完整能力。
原样参数执行与任务进程管理
execute_program 将可执行程序、参数数组、工作目录、标准输入、超时和预期退出码放在独立字段中。参数通过原生 argv 传递,空格、引号、中文和 $() 等内容保持字面值,无需先拼成 Shell 命令字符串。
执行结果分别提供进程状态、退出码、标准输出和标准错误,支持输出大小限制、取消和超时。调用方可以为子进程覆盖环境变量:普通值用于设置,null 用于删除,空字符串保留空值,父进程环境不变。
Windows 使用 Job Object,在恢复已挂起的根进程之前完成归属设置;Linux 使用本次创建的进程组管理任务。根进程退出后仍会回收该任务所属的剩余进程,并返回清理观察结果。Linux 主动脱离进程组的程序不在这一保证范围。持续运行的浏览器、守护进程和服务需要使用各自的生命周期管理入口。
输出解码与程序是否执行成功分别报告。已知旧编码输出可以显式选择 CP936/GBK;解码失败时保留原始 Base64 字节,方便读取失败原因,避免因显示错误而误判执行结果。
先在内存处理文件,再显式提交
Cordonix 提供持续会话内的文件工作区:
workspace_open
-> workspace_read / workspace_search
-> workspace_edit / workspace_convert_encoding
-> workspace_status
-> workspace_commit
-> workspace_close
workspace_open 将文件及其编码、换行和 SHA-256 载入会话。之后的读取、搜索和编辑使用当前内存版本,可以连续完成多次操作。
workspace_edit 根据预期 SHA-256、原始文本和精确匹配次数执行替换,默认仅预演。显式设置 dry_run=false 才修改内存。匹配次数不符合预期或 SHA 已过期时拒绝编辑。
workspace_status 查询当前内存版本和脏状态;workspace_commit 才重新读取磁盘文件标识及 SHA,核对版本后通过同目录临时文件完成单文件提交。外部修改造成冲突时保留磁盘原内容。关闭脏文档需要先提交,或明确丢弃;会话结束不会隐式写盘。
一个会话最多保留 16 份文档,每份文档受 8 MiB 文件大小上限约束。编译器、Git 等外部程序读取磁盘,所以应在外部构建前显式提交。多次独立 CLI 请求不共享内存文档,连续工作区操作应放在同一个 MCP 会话中。
严格编码、BOM 与换行处理
文件工具支持 UTF-8、UTF-8 BOM、UTF-16LE/BE,以及显式声明的 CP936/GBK,保留原有 BOM 和 LF、CRLF、CR 等换行信息。自动模式只识别 BOM 或严格 UTF-8,旧 GBK 文件需要明确指定编码。
workspace_convert_encoding 在内存中预演或执行无损转码,再由显式提交写回磁盘。目标编码无法表示新增字符时返回错误,不静默丢字节或替换成问号。
verify_encoding 对新读取的磁盘字节执行批量验证:严格解码、文本无 NUL,并检查重新编码后的字节是否完全一致。一次可验证 1~32 个显式路径,支持预期条目数和允许目录范围,保留逐项通过、失败、未运行以及整批取消、超时等结果。该操作只读,不输出文件正文。
文件操作明确区分内存已修改、实际写盘、磁盘冲突和编码错误,便于代理根据真实状态继续处理。
文件读取、创建、目录与路径
read_file 每次读取新的磁盘快照;workspace_read 读取当前内存版本,包括尚未提交的修改。两者都支持按行范围、末尾 N 行和完整原文读取,保留换行并返回 SHA、编码、来源和分页信息。末尾或完整读取超出预算时返回明确的输出上限结果,不将半份文本当作完整原文。
create_file 按声明编码创建新文本文件,支持空文件,保留传入正文与换行。父目录必须存在;目标已是文件、目录或链接时拒绝覆盖。同目录临时写入、刷新和发布的结果通过 written_to_disk、cleanup_complete 等字段表达。
list_directory 只列直接子项,支持隐藏项和结果数量限制,返回名称、类型、文件大小及属性。resolve_path 规范化绝对字面路径中的分隔符与点路径,核对目录项存在并返回类型,保留链接名称。路径工具不展开通配符或执行表达式。
Git 与 ripgrep 的结构化适配
git_status 调用实际安装的 Git,解析 porcelain v2 NUL 记录,返回分支、普通修改、重命名、冲突和未跟踪文件。重命名前后的路径分别保存;路径中的空格、引号和换行不会依靠显示转义猜测。遇到非法 UTF-8 路径时返回编码错误并保留原始 Base64。
search_text 调用实际安装的 ripgrep,支持多个模式、根目录、glob 和每文件匹配上限,默认按字面文本匹配。结果解析自 rg 的 JSON,保留文本或 Base64 字节字段,退出码 1 明确表示 no_match。
两个适配器均提供超时、取消、条目数和输出预算。Git、ripgrep 仍需单独安装;搜索时的可选编码转换由 rg 处理,严格编码检查使用 verify_encoding。
新增 Windows 只读进程查询
query_processes 直接使用 Windows 原生接口,可按程序名和命令行字面片段筛选有界进程快照,返回 PID、父 PID、可执行文件路径、尽力读取的原始命令行和精确创建 FILETIME。
权限不足、进程已退出、部分枚举、超时、取消和输出上限都有明确结果;不可访问的字段可以为空。该工具用于观察,不会自动终止进程。Linux 上返回 not_supported。
新增实验性 Windows 原生手机工具
phone 使用 Windows 系统蓝牙接口,以 C11 实现设备、消息、联系人和电话操作,无需 .NET 桥接程序。它包含以下能力:
| 功能 |
操作与用途 |
| 设备与配对 |
adapters 查询电脑蓝牙名称,devices 读取缓存设备,discover 有界发现;pair、unpair 完成配对及删除配对,并回读 Windows 状态 |
| 连接管理 |
connect、disconnect、connection_status 管理当前会话所属的 HFP 连接,带连接租期、健康检查和退出清理 |
| 短信与验证码 |
MAP sms_list 读取收件箱分页元数据,sms_read 读取指定短信,read_code 提取唯一验证码,sms_send 发送短信;正文及验证码读取前核对收件箱快照 SHA |
| 联系人与通话记录 |
PBAP contacts、call_history 按 offset/limit 读取联系人及最近通话页,保留原始 vCard、SHA 和可用的预览结果 |
| 电话控制 |
HFP call_status 查询状态,dial、answer、hangup 提供拨号、接听和挂断 |
| 有时限等待 |
wait_sms 检查收件箱变化,wait_call 等待来电;均支持取消和请求截止时间 |
| 应用通知 |
app_notifications 使用 ANCS BLE/GATT 接收当前等待窗口内的已有、新增、更新或移除事件,并保留部分接收结果 |
短信发送、电话控制、配对和连接变更默认预演,实际执行需要明确提交。结果未知的外部操作不会自动重复发送。配对或连接成功不代表短信、联系人和通知权限已全部开放,访问结果仍取决于设备支持和手机授权。
ANCS 本次修复了经典蓝牙与 LE 地址不同时的设备定位、分片 UTF-8 解析,以及大量已有通知回放时的队列处理。首次服务发现遇到链路不可达时,最多在第一次尝试后重试 5 次,间隔 500 毫秒,支持取消并共用原请求总时限;结果提供实际尝试与重试次数。
cdx --phone-ui 打开中文原生窗口,提供电脑蓝牙名称、搜索、置顶配对确认、连接状态、按功能检查访问结果、iPhone 授权说明、分页预览和可取消的等待。窗口支持随显示器调整的 DPI、系统字体、浅色/深色与高对比度主题。
手机工具目前仅在 Windows 提供,仍属实验性功能。已实现的接口与真机验收覆盖并不相同:现有设备测试覆盖了部分配对、连接、短信发送、拨号/挂断、联系人/最近通话分页及 ANCS 通知;接听、来电/来信等待、私人短信正文与验证码读取尚未完成全部真机验收。电脑端双向通话音频未实现,ANCS 不提供历史通知同步或永久后台订阅。
19 个 MCP 工具一览
| 工具 |
能力 |
tool_info |
版本、平台、构建信息及文档加载/提交计数 |
execute_program |
原样 argv、本地程序执行、环境覆盖与任务回收 |
query_processes |
Windows 只读进程快照 |
phone |
实验性 Windows 原生手机操作 |
read_file |
新磁盘快照的行范围、末尾或完整读取 |
create_file |
严格编码创建新文件,拒绝覆盖 |
list_directory |
有界直接子项枚举 |
resolve_path |
已存在绝对路径规范化与类型查询 |
verify_encoding |
批量严格解码、无 NUL 和字节往返验证 |
workspace_open |
载入文件及编码、换行、SHA |
workspace_read |
读取当前内存版本 |
workspace_search |
搜索内存中的字面文本 |
workspace_edit |
校验 SHA 与匹配次数的精确替换 |
workspace_convert_encoding |
显式无损内存转码 |
workspace_status |
查询当前内存版本与脏状态 |
workspace_commit |
核对磁盘版本后提交单个文件 |
workspace_close |
释放文档并显式处理未提交内容 |
git_status |
解析 Git 分支与文件状态 |
search_text |
解析 ripgrep 文本搜索结果 |
同一套 JSON 请求可通过 cdx --request 使用;cdx --mcp 提供持续 stdio 会话。MCP 工具提供可读中文标题,支持有界执行和取消。tool_info 的计数反映会话逻辑操作,不是物理磁盘 I/O 或模型 token 的性能测量。
平台、安装与升级
正式发行提供 Windows x64 ZIP 和 Linux x64 tar.gz,包含校验和、清单、SPDX 文件与 Sigstore 证明文件。当前 Linux 包基于 Ubuntu 24.04、动态链接 glibc,其他发行版需实际验证;目前不提供 ARM64、macOS 或 musl/Alpine 二进制。
原生可执行文件运行时不依赖 Python 或 PowerShell。Windows 安装、更新和稳定启动脚本使用 PowerShell 7;Linux 安装流程需要 Python 3.9+ 标准库及 GNU timeout。
安装器支持 GitHub 优先、Gitee 回退,核对 SHA-256 和实际程序版本,通过后才切换当前入口,保留旧版本以便回滚。用户可显式启用每小时检查:Windows 使用当前用户计划任务,Linux 使用 systemd 用户 timer。自动检查受用户会话条件约束,可单独停用。
已有 MCP 会话继续运行原来的进程;升级后重新连接会话,再用 tool_info 确认实际加载版本。0.0.5 允许使用 Microsoft Store、MSI 或便携安装的 PowerShell 7 执行已保存脚本,仍要求 -File 和实际绝对脚本路径。
项目当前处于开发 MVP 阶段。文件提交以单文件为单位,不提供跨文件事务;Linux 文件提交当前不保留 ACL 与扩展属性。Windows 手机操作和进程枚举在 Linux 上明确返回 not_supported。这些边界与下载、安装、客户端实际加载的状态分别说明。
项目与下载
Cordonix 使用 Apache License 2.0 开源。
- 项目源码:https://gitee.com/IoTSharp/Cordonix
- 正式发行与下载:https://github.com/IoTSharp/Cordonix/releases/tag/v0.0.5
- Gitee 发行入口:https://gitee.com/IoTSharp/Cordonix/releases
- 完整变更:https://github.com/IoTSharp/Cordonix/blob/v0.0.5/CHANGELOG.md
- 完整使用说明:https://github.com/IoTSharp/Cordonix/blob/v0.0.5/README.zh-CN.md
- 安装与更新:https://github.com/IoTSharp/Cordonix/blob/v0.0.5/docs/install-update.md
- 手机接口说明:https://github.com/IoTSharp/Cordonix/blob/v0.0.5/docs/phone-native.md