Skip to content
NeonMedusaPublic

About

A fast, lightweight TUI coding agent — a single static binary, no runtime

Resources

Stars

5 stars

Watchers

0 watching

Forks

Latest commit

 

History

47 Commits

Folders and files

Repository files navigation

图片

SkyNet

用 Zig 0.16 写的 TUI AI 编码助手,仿照 pi 提供 7 个工具(read / write / edit / bash / grep / find / ls): 流式对话、思考块、SQLite 持久化、工具输出折叠、上下文压缩(compaction)、prompt 缓存亲和; CLI 与 TUI 共用同一套 agent 逻辑。

原生程序,单个静态二进制,无需运行时——ReleaseFast 构建约 4 MB,平均内存占用在 30 MB 以内,启动速度快到几乎无感。

仅在 Windows 上做过日常验证;要支持Linux、MacOs理论上来说不难,但作者没有环境开发、测试,需要各位大佬们的援助。

欢迎 PR,尤其欢迎 AI 写的代码——这个项目本身就是 AI 写的,PR 我也会用 AI 来审。

免责声明(请务必阅读)

  • 没有工具权限系统,也没有沙箱,AI 想去哪就去哪。 它以你的用户身份、你账号的完整权限运行: 能读写任意绝对路径(不限于 cwd)、执行任意 shell 命令(默认 pwsh)、发起网络请求, 全程没有任何确认或拦截。"换个安全目录再跑"不能限制它——工作目录只是提示词层面的约定, 不构成隔离。要真正限制,只能靠系统级手段(虚拟机、独立用户/容器、备份与权限控制), 而不是指望本程序。用它造成的一切后果由使用者自行承担。
  • 会产生真实费用。 请自行确认计费与配额,建议先用小会话和 --max-chars 观察。
  • 数据库可能发生破坏性更新。 项目仍在起步阶段,存储对话的数据库结构随时可能变动。 程序会对有迁移路径的旧库自动迁移(迁移前先整库备份为 <db>.v{旧版本}.bak.db); 但过旧的库仍不会被打开(数据原样保留,可手动备份),且迁移本身也可能出错, 你可能读不到旧对话。重要会话请自行备份 skynet.db;如需处理无法自动迁移的旧数据, 建议把库文件与本项目源码一起交给 AI,请它写一个一次性转换脚本(Python 标准库的 sqlite3 最适合)。
  • 提供商兼容性仅做了极有限实测。 目前只实测过 opencode-go 网关,模型只实测过 deepseek-v4.1-flash。内置的其他提供商预设(OpenAI、OpenRouter、DeepSeek 官方等) 只是模板,不保证可用;其他模型对工具调用、缓存字段、思考强度参数的支持 也不一致,可能出现报错、重复计费或行为异常。
  • 本项目仅供学习与自用,不提供任何形式的担保(见文末)。

安装

直接使用:从 Releases 下载 SkyNet.exe,双击(或命令行)运行即可——单个静态二进制,无需安装任何运行时。 首次启动会在 exe 同目录自动创建 data\ 子目录(配置 config.json、数据库 skynet.db、日志 logs\ 都在里面),整个目录可以随意移动/拷贝,即插即用。

Scoop 安装:本程序已收录进 lemon bucket,执行:

scoop bucket add lemon https://github.com/hoilc/scoop-lemon
scoop install skynet

升级 scoop update skynet;卸载 scoop uninstall skynet(数据默认保留,加 -p 连数据一起删)。

构建

需要 Zig 0.16。仓库用 git submodule 引入 zigtui,克隆时请带 --recurse-submodules (已经克隆过的执行 git submodule update --init):

git clone --recursive https://github.com/NeonMedusa/SkyNet.git
zig build                    # 调试构建 → zig-out/bin/SkyNet.exe
zig build test               # 全部单测(mock 集成测试在 mock 未启动时自动跳过)
zig build -Doptimize=ReleaseSafe

运行

./zig-out/bin/SkyNet.exe                                     # 启动 TUI(无参数)
./zig-out/bin/SkyNet.exe ask -new -title "随便聊聊" "你好"    # 无界面发送一轮对话
./zig-out/bin/SkyNet.exe help                                # 全部子命令与参数

数据目录(首次启动自动生成;-db / -config 可显式指定其他位置):

zig-out\bin\SkyNet.exe
zig-out\bin\data\config.json      ← 配置
zig-out\bin\data\skynet.db        ← 数据库
zig-out\bin\data\logs\            ← 日志

Scoop 安装时 data 是指向 scoop\persist\skynet\data 的 junction——升级/卸载(默认)都不动数据。 第一次使用:TUI 里按 Esc → models → 底部「+ 添加提供商…」,填入 API 地址与密钥 (密钥也可留空、改填环境变量名)。

完整参考见 docs/user-guide.md:

  • config.json 全部字段与 18 家内置预设、密钥解析顺序;
  • TUI 指令与快捷键(/help /models /sessions /compact /thinking、鼠标操作);
  • CLI 子命令与参数(ask / new / sessions / messages / stats / compact);
  • 状态栏读数、ambiguous_width / width_overrides(调整 ①②③、—→ 等字符显示宽度)。

约定:CLI 的 stdout = 最终回答,stderr = 工具活动;退出码 0 成功 / 2 参数错误 / 3 无可用提供商或模型 / 4 请求或数据库失败。

已知限制

  • prompt 缓存亲和、工具输出折叠、自动/手动压缩:只是"尽量做了",是否真正有效未经验证。 不要依赖它们带来的收益;边界情况下它们可能失效,甚至帮倒忙(压缩可能丢信息、折叠会使缓存暂时失效、缓存亲和可能完全不生效)
  • 提供商预设基本未经实测(仅 opencode-go + deepseek-v4.1-flash 验证过); 其他模型对工具调用、缓存字段、思考强度参数的支持不一致,可能报错或行为异常

内置模型能力表(src/model_table.zig,编译进程序)记录常见模型的上下文窗口与 思考档位,用于 /thinking 菜单与发送前钳制(避免给模型发不支持的档位而报 400)。 表里没有的模型 → 全档位可选(需自行尝试);判错/滞后可在 config.json 的 model_overrides 自行修正(最高优先)。表由 tools/gen_model_table.zig 生成 (models.dev 数据 + tools/model_corrections.json 实测修正),不定期手动更新。

  • 流式响应中途断开会被检测并自动重试(默认最多 2 次、指数退避;每次重试整请求重发, 失败尝试的部分思考会被丢弃——输入侧靠前缀缓存几乎免费,输出侧会重算)。重试预算用尽仍 失败时会提示"连接中断",手动重发即可
  • 工具没有确认环节、没有目录白名单,无法阻止通过绝对路径访问任意位置(见免责声明)
  • 项目仍在实验阶段:数据库结构随时可能变动——schema 版本不符时:有迁移路径的旧库会提示后自动迁移(先备份),过旧的库由 TUI 弹窗让你选择"重命名旧库并新建"或"退出",库比程序新则提示升级;CLI 子命令不走弹窗(直接报错)
  • 仅在 Windows + PowerShell 7 上做过日常验证

第三方组件

libs/ 下是随仓库附带的第三方库,各自保留原许可证(均为 MIT):

  • zigtui:TUI 库,以 git submodule 引入(fork 的 skynet 分支,含本地修改)
  • fridge:SQLite 绑定

参考与致谢

本项目的工具集设计仿照 pi coding agent; TUI 样式、工具输出折叠等上下文管理的部分规则参考了 opencode。

许可证

以 MIT 协议发布,详见 LICENSE。

About

A fast, lightweight TUI coding agent — a single static binary, no runtime

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages