关于 SysKnife
SysKnife 是面向希望由 AI 辅助管理 Linux、同时保留人工审批的用户的 MCP 服务。它将请求转换为带类型和风险等级的操作,要求在终端单独批准后执行,并以 Ed25519 签名审计链记录操作。
主要功能
- 01带类型和风险等级的管理计划
- 02单独的终端审批凭证
- 03特权守护进程执行
- 04Ed25519 签名审计记录
- 05审计链完整性验证
- 06适配发行版的只读查询
适用场景
- 01规划软件包或服务变更以供审核
- 02在终端批准指定系统变更
- 03查看审计日志中的过往操作
- 04验证操作记录的完整性
MCP 相关
向 MCP 客户端提供计划、执行、历史记录、健康状态、审计验证和只读系统查询工具。执行需要在终端单独取得一次性凭证,客户端不能批准自己的计划。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SysKnife
Linux 系统管理员的 MCP 服务。规划。审批。审计。
发行版
MCP 服务 · 安装 · 工作原理 · 为什么不直接用 X? · 发行版对照表 · 路线图 · 参与贡献 · 参与讨论
在 Ubuntu 24.04 上确定性重现 Claude Code MCP 流程,由
ubuntu-flow-mock.sh离线呈现,因此在全新检出后每次回放的结果都相同。展示的每个操作名称、风险级别和命令均来自目录。相同的流程也适用于 Cursor 和 Codex CLI。
在原子化主机上,计划会改用 rpm-ostree:
Fedora Atomic 录制。
想了解独立 CLI?请参阅CLI 指南。
用通俗语言描述你的需求。 查看包含风险级别的类型化计划。明确批准。观看带实时输出的执行过程。原子化主机上的更改(rpm-ostree)会在失败时自动回滚。每个操作都经过 Ed25519 签名并接受审计。
AI 绝不会提供命令。每个操作都是具有正式风险级别的类型化操作,守护进程会根据操作自身的定义构建命令行——部分操作确实会通过 sh -c 运行,但 Shell 片段由 SysKnife 构建,而非模型构建。AI 无法直接操作你的系统。特权守护进程只会执行你批准的内容,写入具备防篡改能力的 Ed25519 签名审计链,并在失败时自动回滚原子化主机(rpm-ostree)上的更改。
为什么使用类型化操作,而不是受保护的 Shell? 红队研究(GuardFall)发现,11 个 AI Agent 中有 10 个能绕过原始字符串 Shell 防护——白名单或正则表达式过滤的是一种足以隐藏意图的丰富语言。SysKnife 完全移除了 Shell 字符串:模型会生成类型化操作,而可通过公钥验证的审计链会记录每一个操作。
MCP 服务
SysKnife 首先是一个 MCP 服务。将 Claude Code、Cursor 或 Codex CLI 指向它,你的助手就能使用经过风险分类的类型化系统管理工具,而不是 Shell:
| 工具 | 功能 |
|---|---|
sysknife_plan | 将通俗语言转换为类型化步骤,每个步骤都包含风险级别、解析后的命令和守护进程事务 ID |
sysknife_execute | 仅运行带有一次性凭证的步骤,不执行其他操作 |
sysknife_history | 从签名审计日志中读取以往的运行记录 |
sysknife_doctor | 报告守护进程、提供方和审计链的运行状况 |
sysknife_audit_verify | 遍历 Ed25519 链并报告其是否完整 |
sysknife_get_disk_usage 及其余只读目录 | 直接查询,并根据你使用的发行版选择 |
npx sysknife-setup
只需一条命令,即可将服务接入客户端并安装守护进程。 安装中有详细说明,MCP 协议介绍了线路行为。
你的助手无法批准自己的操作。 sysknife_plan 会返回事务 ID,然后停止。sysknife_execute 所需的凭证来自 sysknife approve <transaction-id>,由你在终端中输入;模型无法访问该通道。缺失、过期、不匹配和重放的凭证都会被拒绝。
更喜欢在 Shell 中操作?CLI使用的是同一个引擎,前面不需要客户端。
安装
最快捷的方式是使用设置向导。它会安装守护进程,并将 SysKnife 接入你的 AI IDE——Claude Code、Cursor 或 Codex CLI——让你能够通过聊天规划并执行操作。
npx sysknife-setup
需要 Node 22 或更高版本;旧版 Node 已不再获得安全修复。在 Ubuntu 22.04 上,apt install nodejs 会安装 Node 12,版本过旧;安装程序会说明这一点,并告知如何获取当前版本的 Node。无需 Rust 工具链,也无需编译:安装程序会下载经过验证的预编译二进制文件。
此操作会执行以下内容:
-
从 GitHub Releases 下载适用于你架构(x86_64 / aarch64)的预编译
sysknife+sysknife-daemon二进制文件,并根据发布校验和文件对每个文件进行 SHA-256 校验——校验不匹配会中止安装——然后将它们放入~/.local/bin(无需 sudo)。传入--no-binary可跳过下载,改为从源代码构建。 -
询问你的 大模型提供商、密钥和模型——OpenAI / Anthropic / Gemini / Ollama / Groq / DeepSeek / Mistral / xAI(Ollama 无需密钥)。如果已设置对应的环境变量,则会跳过密钥提示。
-
询问要接入 哪种 AI 集成(或选择
--claude/--cursor/--codex/--all),以及你的 守护进程目标——套接字,以及可选的远程 VM vsock 令牌。 -
写入特定集成的 MCP 配置(与任何现有文件合并,绝不覆盖),让下一个聊天会话能够将
sysknife_*工具——sysknife_plan、sysknife_execute、sysknife_history、sysknife_doctor、sysknife_audit_verify,以及与发行版兼容的直接只读查询工具,例如sysknife_get_disk_usage——作为一等工具使用。 -
最后一步:将守护进程安装并启动为服务——默认使用 systemd 用户 服务(无需 sudo;通过 linger 在注销后继续运行)。 该服务以你的身份运行,因此只读操作可用,但 不能执行变更操作:安装软件包或重启服务需要系统级服务,其 sudoers 授权应属于
sysknife系统用户。对于任何你打算进行变更的主机,请选择系统服务,并传入--daemon-mode=system|user|skip,即可无需提示地选择模式。--daemon-mode=system不会通过向导安装系统服务——它需要 root 所有的 sudoers、polkit 和辅助程序策略,而这些由sudo make install管理——因此向导会打印确切的操作步骤,并报告守护进程尚未安装。若要使用独立于发布内容、由你信任的校验和列表验证下载,请设置
SYSKNIFE_PINNED_SHA256SUMS=/path/to/sums;参见 SECURITY.md。
要检查某个发布版二进制文件的构建位置,请从发布页面下载它,然后运行
gh attestation verify sysknife-vX.Y.Z-linux-x86_64 --repo lacs-project/sysknife。
只有当文件与 GitHub 为本仓库由 release.yml 构建而签名的来源声明相匹配时,此命令才会成功。每个发布版也会附带该来源声明,文件名为 sysknife-vX.Y.Z-linux-<arch>.intoto.jsonl,因此也可以使用 --bundle 执行相同的验证;参见验证已发布版本。
| 客户端 | 写入的文件 |
|---|---|
| Claude Code | .mcp.json + .claude/hookify.*.local.md |
| Cursor | .cursor/mcp.json + .cursor/rules/sysknife.mdc |
| Codex CLI | ~/.codex/config.toml(追加)+ AGENTS.md |
然后在聊天中提出你的需求,并通过风险标签查看计划。在终端中使用 sysknife approve <transaction-id> 批准每笔事务,返回一次性收据,然后观察执行过程。强制执行收据边界的是守护进程,而不是提示词。
更喜欢独立 CLI? 使用相同引擎,无需 IDE——请参阅 CLI 指南,了解
sysknife "..."、--dry-run、--json、 审批提示和审计日志检查。
手动安装——Ubuntu 20.04+
需要 Rust stable 和 C 编译器(build-essential):TLS 和 SQLite 依赖项需要构建原生代码,因此仅安装 rustup 的机器会卡在
error: linker cc not found。无需安装 cmake。这次约 400 个 crate 的构建预计需要 7 到 12
分钟(Ubuntu 24.04 上为 6m56s,22.04 上为 11m43s)。
sudo apt-get install -y build-essential
git clone https://github.com/lacs-project/sysknife
cd sysknife
make build # builds sysknife (CLI) + sysknife-daemon
sudo make install # installs both; daemon runs as a system service
sudo systemctl enable --now sysknife-daemon
# Join the socket group and one role group, or every request is refused with
# "Permission denied" before any role check runs: /run/sysknife is 0750
# sysknife:sysknife, and a sudo admin is not in that group automatically.
# Role groups: sysknife-observer (read-only), sysknife-dev (medium risk),
# sysknife-admin (high risk). Members of wheel are treated as admin.
sudo usermod -aG sysknife,sysknife-admin "$USER"
newgrp sysknife # or log out and back in
# Then wire your IDE — --no-binary skips the download since you just built them
# (--daemon-mode=skip: make install already set the service up)
npx sysknife-setup --no-binary --daemon-mode=skip
卸载
无论你通过哪种方式安装,都只需运行一条命令。
# Removes the user service, the binaries in ~/.local/bin, and the SysKnife
# entries in the MCP and agent config it wrote: Claude Code's in the current
# directory, .cursor/mcp.json and .cursor/rules/sysknife.mdc, the sysknife block
# in ~/.codex/config.toml, and the SysKnife block in AGENTS.md.
npx sysknife-setup --uninstall
# See exactly what that would touch, without touching it.
npx sysknife-setup --uninstall --dry-run
默认会保留审计历史。 移除软件不应破坏其操作记录,因此审计数据库、安全审计日志和 ~/.config/sysknife 都会保留,并打印出它们的路径。只有在确实需要时,才用以下命令将它们一并删除:
npx sysknife-setup --uninstall --purge # names each file before deleting it
如果你通过 sudo make install 安装了系统级服务,请使用管理其 sudoers 授权、polkit 规则和特权辅助程序的 Makefile 将其移除。--uninstall 会有意避开这些内容,因为只移除部分特权边界比完全不移除更糟:
sudo make uninstall
所有三个 Ubuntu LTS 版本都记录了 Ubuntu 套件中 79 个场景的实时虚拟机运行(该套件此后已扩展到 90 多个场景),并且每次运行都有一个可复现它的回放副本:22.04、24.04 和 26.04 均达到 79/79,每个副本都能处理所有调用,没有遗漏。这些运行记录位于 tests/evidence/story-runs/。当每个仅支持 Debian 的操作都配有一个场景时,套件从 50 个场景扩展而来,首先是 GetHostState。
Fedora Atomic 是 rpm-ostree 目标;make install 目前尚不能在 rpm-ostree 上完成(#301),而要将某个版本视为已验证发布版本,就需要在当前的 Silverblue 44 虚拟机上运行。普通的 Fedora Workstation 和 Server 仍处于实验阶段,直到 dnf 操作系列发布。有关证据和适用范围,请参阅 发行版支持矩阵。
试运行 — 仅规划,不执行任何操作
# Requires the sysknife binary (see manual install above, or `npx sysknife-setup`).
# Plans only: no daemon, no approval, no execution.
export ANTHROPIC_API_KEY=sk-ant-...
sysknife --dry-run "show disk usage and list services that ate cpu in the last hour"
更喜欢终端?CLI 是一条一等路径
使用同一引擎,无需 IDE 或 MCP 客户端——从 shell 中直接通过自然语言生成类型化计划并执行操作,支持 --dry-run、--json、--yes(可设置风险上限),以及 sysknife audit verify。这是运行 SysKnife 的一种完全受支持的方式,并非事后补充。请参阅 CLI 指南。
这是一次真实规划与执行会话的确定性复现,由 demo-mock.sh 离线生成。实时 LLM 调用具有非确定性,而且录制内容必须能够在未配置守护进程或提供方的情况下生成,因此录制采用脚本制作,而非直接录制;输出样式则由与真实 CLI 相同的代码路径生成。
另有桌面 GUI——开发已暂停。 实验性的 Tauri 桌面应用 (
sysknife-shell)在窗口中封装了相同的规划 → 审批 → 执行流程。目前其开发已暂停,开发精力转而投入 Ubuntu 及其支持的版本。代码仍保留在代码库中,也仍可构建,但目前不会接受审查、测试或扩展,因此只有在你特别需要图形化审批流程且能接受这些限制时,才考虑使用它。MCP 集成和 CLI 是目前持续维护的接口。
工作原理
sysknife-brain → approval gate → sysknife-daemon
(planner) (you, in a (executor)
talks to LLM terminal) only privileged
never to OS shows the plan, process; signs
takes y/n every action
审批关卡是一种机制,而非组件;具体如何运作取决于你如何使用 SysKnife:
- MCP: AI 客户端提交的计划需要通过在终端中输入
sysknife approve <transaction-id>来获取回执,因此客户端无法批准自己的计划。 - 独立 CLI:
sysknife "<intent>"会在自己的提示中逐步询问,或者在--yes下批准风险不超过--max-risk的操作。它不会调用sysknife approve。 - 拥有你账户 shell 权限的 Agent 可以独自驱动 CLI。在这种情况下,守护进程的角色限制 (SECURITY.md,第 3 层) 就是保障边界。
已暂停的 Tauri GUI(sysknife-shell)是审批关卡的第三种实现,并非前两种实现会经过的步骤。
- 输入自然语言请求。
- 大脑提出计划——每一步都是带有风险级别(
Low·Medium·High)的类型化操作。 - Shell 展示计划及其预览、副作用和回滚元数据。
- 明确批准每一步(或使用
--yes,将批准范围设为不超过指定风险上限)。 - 守护进程执行操作、实时传输输出,并在失败时自动回滚 atomic-host(rpm-ostree)变更。
- 每次执行都会记录到哈希链式 SQLite 或 Postgres 审计跟踪中,你可以使用
sysknife audit verify验证该跟踪。
大脑只负责提出方案;只有守护进程拥有特权。守护进程负责强制执行策略、执行类型化操作、写入签名链,并在失败时触发 atomic-host(rpm-ostree)回滚。信任边界由机制保障:不会有 Shell 字符串通过通信线路传输。
为什么不直接用 X?
| 工具 | 不足之处 |
|---|---|
| Open Interpreter | 可运行任意 Python/Shell。没有正式的风险模型,也没有审计链。 |
| Goose / Continue | 通用工具。确认流程临时拼凑,而非采用类型化风险级别。 |
| Claude Computer Use | 无管控的桌面自动化,并非系统管理工具。 |
| Ansible | 需要预先编写 YAML。不是对话式工具,也没有风险分类。 |
| shell-gpt / Copilot | 只建议原始 Shell 命令。仍需由你运行原始 Shell 命令。 |
| AIShell-Gate | 最接近的同类工具,但为专有闭源软件;审计采用对称 HMAC(验证方持有签名密钥,因此这份证明无法说服其他人)。没有回滚功能。 |
| 手动操作 | 没有审计跟踪,也没有回滚功能。一个拼写错误就可能造成工作损失。 |
SysKnife 从设计上就与众不同:采用类型化操作、Ed25519 签名审计链、明确的审批关卡、针对 atomic-host(rpm-ostree)变更的自动回滚,以及跨 sudo 和 polkit、按操作划定的特权边界。AI 始终无法访问 Shell。请参阅完整的 SysKnife 与替代方案对比(AIShell-Gate、gate-oc-audit、MCP 网关、通用 mcp-shell)。
状态
信任链已经构建完成、通过测试并投入使用。多发行版支持是当前的里程碑。
| 组件 | 状态 |
|---|---|
sysknife-brain — 大模型规划器、工具循环、安全防护栏 | ✅ |
sysknife-daemon — 190 多种类型化操作、身份验证、预览、事务 | ✅ |
| 实时 IPC + 流式传输 + atomic-host 回滚(rpm-ostree) | ✅ |
| 终端审批关卡 — 一次性、有 TTL 限制的回执 | ✅ |
| MCP 服务(Claude Code / Cursor / 任意 MCP 客户端) | ✅ |
| 防篡改 Ed25519 签名审计链 | ✅ |
| RFC 5424 syslog 转发(Splunk / Sentinel / QRadar) | ✅ |
| Postgres 后端(RDS / Cloud SQL / Neon / Supabase) | ✅ |
支持 Ubuntu — 在运行中的 22.04 VM 上完成 79/79 个故事,记录在 tests/evidence/story-runs/ 中 | ✅ |
| 已验证所有 Ubuntu LTS 版本 — 22.04、24.04 和 26.04 均达到 79/79,每个版本都有可重放的副本,能够复现测试结果 | ✅ |
| Telegram 审批界面 | 📋 规划中 |
2,000 多项 Rust 测试和 70 多项前端测试构成当前确定性发布基线。
配置你的 LLM
SysKnife 支持 Ollama(无需密钥,推荐用于隐私保护/离线/ 家庭实验室),以及 OpenAI、Anthropic、Gemini、Groq、DeepSeek、 Mistral、xAI。
# ~/.config/sysknife/config.toml
[llm]
provider = "ollama" # or anthropic / openai / gemini / groq / ...
model = "qwen3:8b" # provider-specific
ollama_url = "http://localhost:11434"
max_turns = 10
[daemon]
socket = "/run/sysknife/daemon.sock"
database = "/var/lib/sysknife/daemon.sqlite"
[storage] # production-recommended
backend = "postgres"
url = "postgres://sysknife:${PG_PASSWORD}@db.example.com/audit?sslmode=verify-full"
环境变量始终优先于配置文件。完整参考请见
docs/configuration.md。
MCP 协议
SysKnife 实现了 Model Context Protocol
,并提供需要审批的规划与执行工具。sysknife_plan
会为每个步骤返回由守护进程签发的事务 ID。检查计划后,用户在真实终端中运行
sysknife approve <transaction-id>,并将一次性回执交给 Agent。sysknife_execute
会拒绝缺失、过期、不匹配或重放的回执。MCP 服务自身无法签发审批回执。
使用设置向导(上文)将其接入 Claude Code、Cursor 或 Codex CLI。
所有可能包含 API 密钥的配置文件都会以 chmod 0600 创建。
路线图
完整的里程碑细分请见 ROADMAP.md。
- ✅ Ubuntu 22.04 — 在运行中的 VM 上完成 79/79 个故事(记录于
tests/evidence/story-runs/) - ✅ Ubuntu 24.04 和 26.04 — 在运行中的 VM 上分别完成 79/79 和 79/79;每次 LTS 运行都有一个可重放的副本,可复现运行结果
- ✅
sysknife audit export— 将存储的签名链记录导出为 JSON,支持--since/--limit - 📋 Telegram 内联按钮审批
- 📋 用于 SIEM 数据接入的 CEF / NDJSON 输出模式
- 📋 机群规划/执行(一个计划,N 个目标,并行审批)
协议
SysKnife 是 LACS(Linux Agent Control Standard) 协议的参考实现,涵盖类型化操作、风险分类、审批关卡和审计要求。规范采用 CC0 许可(公有领域):
我们明确鼓励为其他发行版和语言开发其他实现。
贡献
我们欢迎帮助。多发行版支持是目前最有影响力的参与方向——路线图矩阵请见
docs/distro-support.md,工作流程请见
CONTRIBUTING.md。
标记为
good first issue
的问题都有明确的验收标准和限定范围。
致谢
目前收到的补丁来自 @ITSMERNB、 @QinXi-ai、@Osheun、 @danial-razi、 @vsolano9 和 @Georgefifth。每次发布都会在 CHANGELOG.md 中注明每项修复的贡献者。
如果你提交了补丁,关注
Releases 是了解补丁发布情况最快的方式,也能及时发现新添加的
good first issue。点个星有助于其他人发现这个项目。
文档
- 类型化操作 — 为什么绝不使用 shell 字符串
- 操作参考 — 每项操作,均由代码生成
- 审计链 — Ed25519,可通过公钥验证
- 自动回滚
- SysKnife 与替代方案的比较
- 架构概览
- 发行版支持矩阵
- 配置
- 审计存储与恢复
- 开发者指南
- 测试指南
- VM 守护进程设置
- 安全策略
- 发布就绪检查清单
- 路线图
- ADR 0001 — 系统边界
- ADR 0002 — Brain 提供方层
- ADR 0003 — IPC 线协议
在哪里获取 SysKnife
| 渠道 | 安装方式 | 备注 |
|---|---|---|
| npm | npx sysknife-setup | npmjs.com/package/sysknife-setup — 设置向导;需要 Node 22+,无需编译 |
| crates.io | cargo install sysknife-cli / cargo install sysknife-daemon | 需要 build-essential;编译约需 7-12 分钟。通过审核的版本标签发布;参见 docs/release.md |
| MCP Registry | io.github.lacs-project/sysknife | registry.modelcontextprotocol.io — 对应上方 crates.io 安装方式。会沙盒运行服务的目录页面会列出所有工具,但无法调用需要守护进程的工具;docs/mcp-registry.md 说明了其中的区别 |
| GitHub Releases | 从 Releases 下载 | 每个标签都提供预编译的 x86_64 + aarch64 二进制文件及 SHA-256 校验和 |
许可证
MIT。可自由使用、修改、分发,并嵌入专有产品,不受限制。
LACS specification 采用 CC0 1.0 许可,属于公有领域。
由 Vladimir Rotariu 构建。 · 有问题、想法或实战经验?——欢迎来聊。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。