关于 nightrun
nightrun 是用于安全构建和测试 NightRun 的技能;NightRun 是直接启动至聊天提示界面的裸机 UEFI 应用,可运行量化本地大模型。该技能指导模型转换、主机与 QEMU 验证,以及需要确认的真实硬件刷写流程。
主要功能
- 01指导固件和可启动镜像构建
- 02将 GGUF 检查点转换为 .nrm
- 03使用 nrhost 测试推理
- 04在 QEMU 中验证启动和对话
- 05依据 llama.cpp 测试样例诊断一致性
- 06保持真实设备刷写为交互操作
适用场景
- 01构建 BOOTX64.EFI 或 nightrun.img
- 02启动测试前转换模型
- 03在主机上检查推理行为
- 04刷写前在 QEMU 中验证启动
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ akillness/ jeo-skills --skill nightrun安装后在 Claude Code 中输入/nightrun确认已加载。
附带文件scripts/nightrun.shreferences/commands.md
详细介绍
NightRun
NightRun 是一款单体 no_std Rust UEFI 应用,可直接启动到量化本地大模型(Llama 3.2、Qwen3 或密集型 Granite
4.1)的聊天提示界面——无需 Linux、内核、浏览器或网络栈。模型会流式载入 RAM,并进行内联 CRC-32 校验;载入后存储会被封存,推理完全在 CPU 上运行(x86_64 上使用 AVX2+FMA+F16C,Pi 5 上使用 NEON)。此技能可安全地驱动构建 → 转换 → 测试 → 刷写工作流。
何时使用此技能
- 从源代码构建
BOOTX64.EFI或完整的可启动nightrun.img - 使用
nrconvert将 GGUF 检查点转换为.nrm容器 - 在使用 QEMU 前,先在主机上运行/调试推理引擎(
nrhost) - 在 QEMU/OVMF 中启动 NightRun(
cargo xtask run),以获取屏幕截图或进行脚本化验证 - 通过
install.sh将镜像刷写到实体 U 盘或 Raspberry Pi 5 SD 卡 - 对照 llama.cpp 参考固件排查分词器/一致性失败
何时不使用此技能
- 在没有裸机/无操作系统限制的情况下运行通用本地大模型服务 → 使用常规推理运行时,而非此技能
- 与启动/模型/内核路径无关的通用 Rust 工作区重构 → 使用
build-fix - 为 x86_64 UEFI / Raspberry Pi 5 以外的目标交叉编译 → 不在范围内;NightRun 仅支持 UEFI,不支持传统 BIOS
说明
步骤 1:先克隆并阅读工作区规则
git clone https://github.com/hardrave/NIGHTRUN.git
cd NIGHTRUN
在操作 crates/nr-boot 前,先阅读 CLAUDE.md。两条硬性规则:
- 绝不运行
cargo build --workspace/cargo test --workspace——nr-boot只能通过cargo xtask构建(nightly +-Zbuild-std+ 自定义硬浮点目标x86_64-nightrun-uefi.json);其 panic handler 会与主机 std 目标冲突。 - 绝不添加
ExitBootServices(),也绝不在 AP 工作线程代码中调用固件服务(nr-tensor::parallel工作线程仅执行原子操作和计算)。
步骤 2:选择可用的最小模式
完整命令参考请查看 references/commands.md。选择一项:
- 主机端引擎开发(内核、分词器、采样)→
cargo test、cargo run --release -p nrhost - 模型转换 →
cargo run --release -p nrconvert - 仅构建固件 →
cargo xtask build - 完整镜像 + QEMU 验证 →
cargo xtask image,然后运行cargo xtask run - 刷写实体硬件 →
./install.sh(交互式,需确认)
QEMU 启动成功前,不要直接刷写实体介质。
步骤 3:任何启动尝试前先转换模型
cargo run --release -p nrconvert -- path/to/model.gguf models/model.nrm
转换器会重新解析并重新校验自身的输出,之后才会报告成功。Qwen 需要 6 GB 的 QEMU RAM(--mem 6G);其他模型需要 4 GB。
步骤 4:先在主机上验证,再在 QEMU 中验证,然后再刷写硬件
cargo run --release -p nrhost -- models/model.nrm --prompt "..." --temp 0
cargo xtask image --model models/model.nrm
cargo xtask run --img --model models/model.nrm --mem 4G --smp 8 \
--shot 5:boot.png
只有在 QEMU 启动和聊天响应均正常后,才可执行 ./install.sh(将镜像刷写到实体 USB/SD 设备)。安装程序会拒绝不可移动磁盘,并要求原样输入 FLASH /dev/sdX——绝不要绕过此确认步骤来编写脚本。
步骤 5:使用封装工具进行引导式、无破坏性的试运行
bash .agent-skills/nightrun/scripts/nightrun.sh doctor /path/to/NIGHTRUN
bash .agent-skills/nightrun/scripts/nightrun.sh build /path/to/NIGHTRUN
bash .agent-skills/nightrun/scripts/nightrun.sh convert /path/to/NIGHTRUN in.gguf models/model.nrm
bash .agent-skills/nightrun/scripts/nightrun.sh qemu /path/to/NIGHTRUN models/model.nrm
doctor 只报告先决条件状态(Rust 工具链、QEMU、磁盘空间);它绝不会写入磁盘。刷写实体介质仍需手动交互运行 ./install.sh——封装工具特意不对此进行自动化。
步骤 6:使用参考固件调试一致性失败
每个模型系列的贪心输出都与 llama.cpp 逐 token 对照固定(crates/nr-model/tests/parity.rs)。如果内核/rope/rmsnorm 更改导致一致性失败,问题出在内核,而非固件。更改分词器或聊天模板时,使用 scripts/gen_tokenizer_fixtures.py 重新生成分词器固件。
最佳实践
- 绝不绕过刷写确认——
install.sh要求准确输入FLASH /dev/sdX;不要用脚本输入该内容。 - 始终先用 QEMU,再用硬件——QEMU 启动失败,就说明真实介质也尚未就绪。
- 将奇偶校验不一致视为引擎错误——llama.cpp 测试固件才是事实依据,而不是新内核。
- 通过 xtask 路径运行
nr-boot——使用 nightly、-Zbuild-std和自定义 hard-float 目标,绝不要直接运行cargo build --workspace。 - 更改 tokenizer 或格式后重新生成模型——过期的
.nrm文件会让测试失败看起来像是回归问题,实际上只是测试固件过期。
参考资料
- 上游仓库:hardrave/NIGHTRUN
- 完整命令参考:
references/commands.md - 包装脚本:
scripts/nightrun.sh - 项目规范:
.agent-skills/skill-standardization/SKILL.md
示例
示例 1:在不接触真实硬件的情况下为新模型制作原型
bash .agent-skills/nightrun/scripts/nightrun.sh doctor ~/src/NIGHTRUN
cargo run --release -p nrconvert -- ~/models/llama-3.2-1b-q8_0.gguf ~/src/NIGHTRUN/models/model.nrm
cargo run --release -p nrhost -- ~/src/NIGHTRUN/models/model.nrm --prompt "hello" --temp 0
示例 2:刷写 USB 盘前进行完整的 QEMU 验证
bash .agent-skills/nightrun/scripts/nightrun.sh qemu ~/src/NIGHTRUN models/model.nrm --shot 5:boot.png
# only after a correct boot + chat response:
cd ~/src/NIGHTRUN && ./install.sh