Veda 发布智能体原生操作系统,语音智能体内置为系统服务
Veda: First AI Agentic Hobby OS
Veda 发布一个从零用 Rust 编写的智能体原生操作系统,语音智能体作为系统服务在启动时运行,通过与应用相同的代码路径执行操作,而非截屏或模拟点击。应用以 JSON 声明动作、参数和风险等级,内置应用提供 70 多个动作;每个动作分为常规、敏感和破坏性三档,后两档由系统服务而非语言模型持有,需用户在三分钟内确认。
Veda:智能体原生操作系统
Veda 是一个内置语音智能体的操作系统。说一句“Hey Veda,把我的壁纸换成沙丘”,它就会在任何应用程序中完成这项工作,走的是和你的键盘、鼠标相同的代码路径。对于任何难以撤销的操作,它都会先征求你的同意。
一切都用 Rust 从零编写,并放在这个仓库里:UEFI 引导加载程序、基于能力的微内核、系统服务、窗口系统、工具包和应用程序。少数成熟的 crate 提供 TCP/IP、TLS 和密码学功能(smoltcp、rustls、RustCrypto)。Veda 可在 x86-64 PC 和 QEMU 上运行。
为什么是智能体原生
操作系统的设计初衷是让人坐在键盘前使用。后来添加的助手必须读取屏幕、模仿点击,或者使用少数提供 API 的应用程序,而系统无法对它施加任何约束。在 Veda 中,智能体是系统的一等用户:
- 系统的一部分。智能体是一个系统服务,在启动时启动,失败时会重启。它会休眠,直到你叫它的名字、点击任务栏上的圆环,或按下 Super+Space。
- 在每个应用程序中都是原生的。应用程序声明自己的操作(带类型的参数和风险等级),并以 JSON 报告自己显示的内容。智能体调用这些操作,它们运行的是与键盘和鼠标相同的代码:没有屏幕抓取,没有模拟点击。内置应用程序提供了 70 多个操作。
- 由系统强制执行的同意机制。每个操作都是常规、敏感或破坏性的。智能体服务——而不是语言模型——会扣住后两类,直到你允许为止。只有桌面 shell 才能作答(
init会告诉每个服务是哪个程序在调用),因此智能体在文档中读到的任何内容都无法批准任何操作。 - 真实的上下文。每次对话开始时都会带上时间、打开的窗口、每个应用程序的操作、智能体对你的了解,以及你上次对话是如何结束的。在行动之前,它会读取应用程序的当前状态。
- 由你控制的记忆。它只记住你明确告诉它的内容(你的名字、你生活中的人、你喜欢的做事方式),从不记住它自己的猜测。记忆保存在你的电脑上,设置中会显示并遗忘其中的任何部分。
- 语音优先。你可以随时打断它。回声消除和回声门控让它听不到自己,对话期间其他声音会降低 20 dB。休眠时,它用一个本地运行的语音检测器来监听,因此没人说话时不会有音频离开电脑。
- 智能是一项设置。语音识别、语言模型和声音来自 Deepgram 的 Voice Agent API,音频已选择退出 Deepgram 的模型改进。模型(默认是 OpenAI 的 gpt-4.1-mini)、声音,甚至智能体的名字都可以在设置中选择。
智能体如何工作
- 监听。休眠时,智能体在电脑上运行语音检测器。它听到的语音会发送到 Deepgram 的识别器,并以智能体的名字作为关键术语。以名字开头或结尾的句子(“Hey Veda,……”“……,Veda?”)会唤醒智能体,句子的其余部分就是它的第一个请求。
- 对话。唤醒会打开一个 Deepgram Voice Agent 会话,其中包含智能体的指令、上下文和函数。Deepgram 负责轮流发言、语言模型和声音;Veda 的音频服务双向传输声音。
- 操作。模型调用代理的 17 个函数(窗口、文件、音量、Wi-Fi、壁纸、通知、计时器和提醒、记忆、系统及其程序),并通过
use_app和read_app调用每个应用的操作和状态。每次调用都返回一个结构化结果。 - 同意。需要你确认的调用会等待在代理窗口中或通知里,明确说明将要发生什么以及针对什么。只有你在三分钟内允许,它才会执行。敏感操作可以永久允许;破坏性操作每次都会询问。
代理完整涵盖了设计:协议、语音管线、同意、记忆和测试。
操作系统
- 微内核。
vkernel只处理隔离、调度、内存和 IPC:带权限的能力句柄、传递消息和句柄的通道、VMO、事件、futex 和中断对象。它支持带 x2APIC 的 SMP、无滴答定时器和 XSAVE。 - 受监督的服务。驱动程序、文件系统、窗口系统、音频、网络和代理都是用户空间进程。
init会在窗口系统、shell、音频、网络和代理崩溃时重启它们,因此桌面会自行恢复。 - 虚拟机中的 Linux 驱动。Veda 只驱动自己的磁盘(virtio-blk、AHCI、NVMe)。Linux 在 驱动虚拟机 中驱动其他一切,运行在 Veda 自己的虚拟机监控程序上(VMX 带 EPT,无模拟硬件)。设备整体交给它,其 DMA 被限制,中断由 Veda 的 IOMMU 驱动重新映射。崩溃的驱动只会拖垮该虚拟机,Veda 会重置并重启它。参见 驱动虚拟机。
- 桌面。一个合成窗口管理器,具有服务端装饰、阴影、动画、吸附和带实时缩略图的 Alt+Tab 切换器。它在 Intel 显卡上通过 GPU 合成,在其他地方通过处理器合成;一旦 Linux 驱动显示,每一帧都在垂直消隐时整体翻转。shell 有任务栏、可搜索的开始菜单、桌面图标、日历和通知。
- 工具包。
vui是一个即时模式工具包:控件、菜单、对话框、矢量图标以及 Inter 和 JetBrains Mono 中的抗锯齿文本。每个vui应用都与代理兼容。 - 3D 图形。OpenGL ES 3.0 配合 GLSL ES 1.00 和 3.00,用 Rust 实现(
vgl、vglsl),每次调用都按规范要求检查。它通过驱动虚拟机中的 Mesa 在 GPU 上渲染(Intel 的 iris;在 QEMU 下使用宿主 GPU 上的 virgl),或在多线程软件渲染器上渲染。Interceptor 全屏展示它:一座海湾城市及其交通、基于物理的光照、阴影、泛光和 4 倍多重采样。 - 网络。一个网络服务,支持 IPv4 和 IPv6、DHCP、DNS、TCP、UDP 和 ICMP,以及一个 Wi-Fi 服务,可加入 WPA2、WPA3 和开放网络并支持管理帧保护,记住它们、重新连接并漫游。Linux 的驱动只移动帧,永远看不到密码。应用程序从
vtls获得 TLS 1.3 和 1.2,证书对照 Mozilla 的根证书进行检查。参见 网络。 - 音频。一个混音服务,具有回声消除录音和闪避功能,既为代理的对话也为音乐而构建。
- 存储。 主目录有自己的磁盘。在更改停止半秒后保存,在两个带校验和的槽位之间交替,因此中断的保存永远不会损坏前一个。代理的内存和密钥位于只有代理才能打开的私有目录中。
- C 和 GCC。 镜像包含 GCC 16、binutils 和 musl:在终端中编写 C 程序,编译并运行它,在 QEMU 或 PC 上。C 程序是静态可执行文件,其系统调用转到
vposix,一个用 Rust 编写的 POSIX 层。交叉编译器还在开发机器上为 Veda 构建 C 和 C++ 程序。参见 Veda 上的 C。
应用程序
每个应用程序都与代理兼容:你能用鼠标和键盘做的事情,代理也能做。
| 应用程序 | 它做什么 | 代理能做什么 |
|---|---|---|
| 文本编辑器 | 标签页、语法高亮(Rust、C、TOML、Markdown)、查找和替换、自动换行、缩放、无限撤销。 | 创建、打开、读取和写入文档;查找和替换、撤销、保存;另存为或放弃更改(经你同意)。 |
| 照片 | ~/Pictures 的缩略图库和具有缩放、旋转、全屏和幻灯片放映的查看器;PNG、JPEG、BMP 和 QOI。 |
显示、缩放和旋转图片,全屏,运行幻灯片放映,将图片设置为壁纸。 |
| 音乐 | ~/Music 的库(QOA 和 WAV)、封面艺术、实时频谱可视化器、跳转、随机播放和重复。 |
按名称播放歌曲、暂停、停止、跳过、跳转、随机播放、重复、设置音量。 |
| 文件 | 位置、面包屑、带缩略图的列表和图标视图、搜索、复制和粘贴、属性,以及一个将项目恢复到原位置的回收站。 | 打开、搜索、创建文件夹;复制、移动、重命名和删除到回收站(经你同意);恢复;清空回收站(每次都询问)。 |
| 终端 | 一个带有约五十个内置命令(文件、进程、wifi、ping、curl、...)、历史记录和制表符补全的 shell;运行 C 程序和 GCC,支持管道、重定向和 Ctrl+C。 |
运行命令(经你同意),读取其输出,中断它。 |
| 任务管理器 | 具有 CPU 和内存使用情况的进程、“结束任务”和实时性能图表。 | 列出进程、读取图表、结束程序(每次都询问)。 |
| 设置 | 壁纸、代理(密钥、名称、语音、模型、监听、内存、权限)、网络和 Wi-Fi、显示和系统。 | 打开页面,更改代理的语音和语速;重命名它或更改其模型(经你同意)。永远不能更改密钥。 |
| 拦截者 | 在 OpenGL ES 3.0 中穿越海湾城市的警察追捕:八个任务、快速追逐和巡逻,白天、日落、夜晚和雨中,带有合成的引擎声、警笛声和音乐。 | 开始任务、追逐或巡逻;暂停、恢复、重新开始或退出;更改声音、单位、相机和显示。 |
截图
![]() |
![]() |
| 文本编辑器,高亮 Rust | 照片,图片库 |
![]() |
![]() |
| 音乐,带有可视化器 | 文件,带有缩略图 |
![]() |
![]() |
| 终端中的 GCC 16 | 拦截者,在 OpenGL ES 3.0 中 |
每张截图都是 1280x800。它们是在 QEMU 中由 cargo xtask script docs/screenshots.vts 拍摄的,代理与 Deepgram 的替身对话。拦截者的截图由 cargo xtask script docs/interceptor.vts --resolution 1920x1200 以 1920x1200 拍摄并缩小。
快速开始
要求
Veda 构建在带有 Linux 的 x86-64 PC 上。
- Rust,稳定版。
rust-toolchain.toml使 rustup 在首次使用时安装额外的目标,Rust 自己的链接器(rust-lld)链接所有内容。 - QEMU 和 OVMF UEFI 固件(在 Debian 和 Ubuntu 上:
qemu-system-x86、qemu-system-gui、qemu-system-modules-opengl和ovmf),可以访问/dev/kvm。 - 对于驱动 VM:Linux 的构建工具、交叉编译器和 Mesa
(在 Debian 和 Ubuntu 上:
build-essential、bc、curl、rsync、m4、flex、bison、meson、ninja-build、libgmp-dev、libmpfr-dev、libmpc-dev、python3-mako和python3-packaging),以及 KVM 的嵌套 虚拟化(kvm_intel nested=1)。参见 驱动 VM。 - 可选:为 agent 提供 Deepgram API 密钥,以及
你的发行版中用于 C 工具链的构建工具,
cargo xtask toolchain会 构建一次(参见 Veda 上的 C)。
检查环境:
cargo xtask doctor
构建并运行
首先,构建驱动 VM 的 Linux(其内核、交叉编译器和 Mesa),这需要一段时间。没有它,Veda 启动时就没有键盘、 鼠标、声音或网络。
cargo xtask linux
然后构建并运行 Veda:
cargo xtask run
这会构建每个组件,写入 target/veda/veda.img 并在 1920x1080 的 QEMU 窗口中
启动它。首次构建还会渲染示例
图片和音乐。之后的构建是增量的。
cargo xtask run --resolution 1280x800 --smp 4 --memory 2048
cargo xtask run --cmdline "run=editor"
cargo xtask run --net wifirun=NAME 在启动后启动 /system/bin/NAME.exe。默认情况下,
机器通过 QEMU NAT 上的有线网卡接入互联网。
--net wifi 改为给它一个 Wi-Fi 无线电,并启动 airsim,一个
模拟的 Wi-Fi 环境,其网络("Veda Home"、"Veda WPA3"、
……)以密码 veda-wifi 通向互联网;--net both
则两者都提供。cargo xtask help 列出所有命令和选项。
真实 PC,从 USB 启动盘启动
cargo xtask iso
这会写入 target/veda/veda.iso,一个 live 系统。要启动它:
- 用 Rufus 将其写入 USB 启动盘(分区 方案 GPT,目标系统 UEFI,ISO 模式),或使用任何镜像写入工具。
- 在 PC 的固件设置中,打开 VT-x 和 VT-d,并关闭 Secure Boot(Veda 的加载器未签名)。
- 以 UEFI 模式从启动盘启动 PC,通常从启动菜单 (开机时按 F12、F11 或 Esc)。
Veda 从内存运行,不启动任何磁盘驱动,因此它从不读取或
写入 PC 的磁盘。其主目录会一直保留到 PC 关机
为止。要先在 QEMU 中试用启动盘,请运行 cargo xtask run --live。
启动盘会在 VEDA/LOGS 中保留每次启动的日志,每次启动一个
编号文件夹(最新的编号最大):来自 Veda 的 VEDA.TXT 和
来自驱动 VM 的 LINUX.TXT。它们每秒同步一次,因此即使一次
启动什么都没显示,也能在另一台电脑上诊断。
驱动 VM 中 Linux 的驱动支持:
| 设备 | 支持 |
|---|---|
| 显示 | 固件报告的接近 1920x1080 的屏幕模式,在固件报告的情况下采用面板自身的形状;每一帧都在垂直消隐期整体翻转 |
| GPU | Intel 的集成显卡(i915,配合 Mesa 的 iris) |
| 输入 | USB 3(xHCI)控制器上的 USB 键盘、鼠标和集线器;PS/2 键盘、鼠标和触摸板 |
| 网络 | Intel 和 Realtek 的以太网、Intel 的 Wi-Fi、USB 网络适配器 |
| 声音 | HD Audio(扬声器、耳机、线路输出、编解码器的麦克风)、笔记本放大器(Cirrus Logic CS35L41)、HDMI 和 DisplayPort 音频 |
| 音频 DSP 上的内置麦克风 | Intel 的 Tiger Lake 到 Raptor Lake(第 11 到第 13 代 Core),通过 Sound Open Firmware;更晚的目前还没有声音 |
没有 VT-x 和 VT-d 时,Veda 只驱动磁盘(仅 VT-x 时,还有 PS/2 键盘和鼠标)。USB 磁盘,包括启动盘,则不予处理。 状态 显示每个设备类别 进展如何。要在 QEMU 中试用 USB 输入或 HD Audio:
cargo xtask run --input usb cargo xtask run --sound hda
与 Veda 对话
- 打开 Settings → Agent 并添加你的 Deepgram API 密钥。agent 的 名称、语音、语言模型、聆听和记忆都在同一页上。
- 说 "Hey Veda",点击任务栏右侧的圆环,或按 Super+Space。
- 自然地说话,随时可以打断。说完后说再见, 它就会回到睡眠状态。
Veda 使用 PC 的麦克风和扬声器,在 QEMU 下也是如此。目前它只说英语。Deepgram 按每分钟对话计费;在休眠状态下,只有检查其名称的短暂识别会计费,每小时最多十分钟。
可以问的事情:
- "把我的壁纸换成沙丘。"
- "播放 Neon Horizon。"
- "写一个购物清单,包含鸡蛋、牛奶和咖啡。"
- "给我看灯塔照片,全屏。"
- "二十分钟后提醒我伸展一下。"
- "什么占用的内存最多?"
- "在 Interceptor 中开始一场日落时分的快速追逐。"
- "删除 City Lights 照片。"(它会先问你。)
- "你对我了解多少?"
使用桌面
- 点击任务栏中间的圆环,或轻触 Super,打开开始菜单,然后输入以搜索。
- 点击任务栏按钮可打开、聚焦或最小化应用程序;中键点击会打开另一个窗口。点击时钟查看日历。
- 双击桌面图标即可打开。右键点击桌面可更改壁纸。
- 将窗口拖到屏幕顶部可最大化,或拖到一侧以填满那一半(或按 Super+Left/Right/Up/Down)。Super+D 显示桌面,Alt+Tab 切换窗口,Alt+F4 关闭一个窗口。
- 删除的项目会进入 Trash,即第一个桌面图标:将桌面项目拖到它上面,或在 Files 中按 Delete(Ctrl+Z 可将其恢复,Shift+Delete 则永久删除)。打开它以将项目恢复到原处,或清空它。
- 任务栏上的扬声器图标可设置音量(在其上滚动);旁边的网络图标列出可加入的 Wi-Fi 网络。
你的文件位于 /home/user,在重启和重建后保留在 target/veda/home.img 上(--fresh-home 会重新开始)。
构建兼容代理的应用程序
代理支持是 vui 应用程序平台的一部分。应用程序描述其操作、报告其状态并执行操作;vui::run 将其注册到代理服务,并在帧之间应答代理:
use vui::agent::{self, Action, AppAgentInfo, Risk, Value, arg_path, arg_str, object, show_path}; impl vui::App for Notes { fn update(&mut self, ui: &mut vui::Ui) { /* ... */ } fn agent_info(&self) -> Option<AppAgentInfo> { Some(agent::info( "A notes app: one note per file in ~/Notes.", vec![ Action::new("add_line", "Adds a line at the end of the note shown") .param("text", "string", "The line", true) .build(), Action::new("delete_note", "Deletes a note for good") .param("path", "string", "The note's file, such as ~/Notes/Ideas.txt", true) .risk(Risk::Destructive) .build(), ], )) } fn agent_state(&self) -> Value { object! { "note" => self.title.as_str(), "lines" => self.lines.len() } } fn agent_invoke(&mut self, action: &str, args: &Value) -> Result<Value, String> { match action { "add_line" => { self.append(arg_str(args, "text")?); Ok(object! { "lines" => self.lines.len() }) } "delete_note" => { let path = arg_path(args, "path")?; self.delete(&path).map_err(|e| format!("{} could not be deleted: {e}", show_path(&path)))?; Ok(object! { "deleted" => show_path(&path) }) } other => Err(format!("Notes has no action called {other}")), } } }
为语言模型编写操作描述:简短、命令式,并明确说明单位和默认值。声明每个操作的风险,明确命名其目标(已批准的操作可能会在几分钟后运行),并让它通过与键盘和鼠标相同的代码运行。同意、记忆和对话是系统的职责,而不是应用程序的职责。参见 使应用程序兼容代理。
测试
cargo xtask test这会在主机上运行库的单元测试,然后以无头模式启动 Veda,并运行 systest 集成测试(IPC、内存、线程、文件系统、窗口系统的崩溃恢复、C 和 C++ 程序)。任何 panic 都会导致运行失败。
cargo xtask test --ui这会添加 tests/ui/ 中的 GUI 脚本和 tests/agent/ 中的代理脚本。它们点击浏览桌面和应用程序,检查日志和截图,并以多种方式破坏模拟的 Wi-Fi 网络,以检查 Veda 能否自行恢复。需要 GCC 的脚本在没有 C 工具链时会被跳过。
代理的脚本在主机上针对 Deepgram 的替身运行,因此它们是确定性的、离线的且免费的。它们涵盖对话、函数调用、中断、回声、同意、在音乐中通过名字唤醒以及每个应用程序的操作。tests/real/ 与真实的 Deepgram 通信(密钥在 DEEPGRAM_API_KEY 中),在虚拟麦克风中使用合成语音。
网络有其自己的主机测试:802.11 及其密码学针对已发布的测试向量,TCP/IP 通过模拟电缆,以及 TLS 针对 rustls 服务器和真实证书链。在 Veda 内部,nettest 检查 DNS、TCP、HTTP、HTTPS 和 ping。
运行一个脚本,或者无头启动并保存 target/veda/screen.png:
cargo xtask script tests/agent/wake-name.vts cargo xtask shot --wait 20
每次运行都会将串口控制台(内核日志和每个程序的输出)保存到 target/veda/serial.log。
仓库布局
| 路径 | 内容 |
|---|---|
services/agent/、lib/agent/ |
该 agent:对话、名称监听器、函数、同意与记忆;其逻辑(Deepgram 的协议、指令、唤醒词、回声门控)位于 lib/agent |
boot/ |
vboot,UEFI 引导加载程序 |
kernel/ |
vkernel,微内核,包含 hypervisor 和 IOMMU 驱动 |
services/ |
init(服务注册表、启动器、进程身份)、vfs、devmgr(PCI)、compositor、audio、agent、netd(网络)、wlan(Wi-Fi)、drivervm(驱动 VM 的监视器) |
drivers/ |
Veda 自有的驱动:virtio-blk、ahci 和 nvme |
lib/ |
共享库:系统调用 ABI 与运行时、IPC 与服务协议、POSIX 层、2D 图形、字体与图像、vui 工具包、OpenGL ES 与 GLSL、网络与 TLS、音频、agent 的逻辑等等 |
apps/ |
桌面 shell 和应用程序;Interceptor 的游戏可在宿主机上测试,位于 interceptor/game |
guest/ |
驱动 VM 的程序:其 init、Veda 为 Linux 提供的驱动(input、alsa、net、wifi、kms)、OpenGL ES renderer,以及 logkeeper(U 盘的日志) |
ports/ |
带有 Veda 补丁的上游发布版:用于 C 工具链的 GCC、binutils、GMP、MPFR、MPC 和 musl,以及用于驱动 VM 的 Linux |
tests/ |
systest 和 nettest(系统内测试)、C 和 C++ 测试程序、GUI 和 agent 脚本 |
tools/ |
在构建时生成壁纸、图片和音乐的宿主机程序,以及 airsim(模拟 Wi-Fi) |
xtask/ |
构建系统:交叉编译、磁盘镜像、QEMU、自动化、Deepgram 的替身 |
third_party/ |
带有 Veda 补丁的 vendored crate(smoltcp) |
assets/ |
字体和应用程序清单 |
docs/ |
文档、README 的截图,以及图标和社交预览图(docs/icon/) |
website/ |
www.vedaos.org,一个静态页面 |
文档
- 该 agent:语音 agent、其函数、同意与记忆,以及应用程序如何变得兼容 agent。
- 架构:系统如何组合在一起。
- 网络:网络与 Wi-Fi 服务、模拟 Wi-Fi 环境、安全与测试。
- Veda 上的 C:编写、编译和运行 C 程序、POSIX 层,以及工具链如何构建。
- 驱动 VM:hypervisor、平台、桥接、IOMMU 和设备。
- 开发:构建命令、系统镜像、编写应用程序、性能说明。
- 编码约定。
许可证
版权所有 © 2026 Vahid Mohammadi。
Veda 是自由软件:你可以根据自由软件基金会发布的 GNU 通用公共许可证第 3 版条款重新分发和/或修改它(见 LICENSE)。分发它是希望它有用,但不提供任何保证;甚至没有适销性或特定用途适用性的默示保证。
其他部分保留各自的许可证:
- 字体(Inter、Lato、JetBrains Mono):SIL 开放字体许可证 1.1;见
assets/fonts/。 - 驱动 VM 的 Linux 加载到设备中的设备固件(
ports/linux/firmware.txt)运行在设备上,而非 Veda 中。它未经修改地来自 Linux 固件集合,遵循其WHENCE为每个文件制作者给出的条款(他们允许再分发),并来自 Sound Open Firmware 的发布版(sof-bin:Intel 签名的音频 DSP 固件构建,遵循 BSD 许可证及其LICENCE.Intel中的 Intel 专利许可)。 - Vendored 代码保留自己的许可证;见
third_party/。 - C 工具链 镜像可能包含:GCC 和 binutils,采用 GPL 第 3 版或更高版本(GCC 运行时库附带其运行时库例外条款,因此 GCC 构建的程序保留自己的许可证),GMP、MPFR 和 MPC 采用 LGPL 第 3 版或更高版本,musl 采用 MIT 许可证。其源代码是
ports/*/port.toml所指的上游发布版本,补丁就在旁边。
来源:Hacker News · github.com






