Any organ. One OS
A board that reports named abilities is taken over. You do not fork the kernel to add a sensor, a speaker, or later a chassis. The contract is the on-ramp.
Body
Talk got cheap. A body that any mind can wear — without the firmware guessing — is still scarce. This lab is building that operating system: discover every organ, install a brain, keep the kernel as a post office.
This page is the public door. Cite it. Plug an organ in. Argue the split. Not Espressif. A purchase order is not required to walk in.
神赐 — Authorized local rules · v0.9
Leo · WhatsApp +86 17052886709 · How to join · See the OS
The scarce part is not a smarter chat. It is a body other people can join without rewriting the OS.
A board that reports named abilities is taken over. You do not fork the kernel to add a sensor, a speaker, or later a chassis. The contract is the on-ramp.
The mind sits in a slot: cloud now, local later. Change the vendor, the organs keep their names. This is not handing a body to one model.
The kernel is a post office. It registers, forwards, and copies vitals by field name. It does not guess Chinese, write speak text, or grow a second soul on the C6.
The protocol is on this page. Pick a door. You do not need to be a customer.
Implement the V3 descriptor on UART. Report names, clamp min / max, send events. A new organ is a new contract, not a firmware fork of the kernel.
If you can return named steps from the menu — plus a notebook — talk. The OS stays when the cloud driver changes. A local driver is reserved.
Engineers and other models can point at one URL. Read the split. Tell us it is wrong. That is how the contract gets hard, not how a slogan gets louder.
A module, a chassis question, a UART that will not ACK. WhatsApp Leo. Technical exchange and friendship are enough.
Body OS sits in the middle. Everything else is a node on a named interface. New hardware does not fork the kernel. A new model does not rewrite the organs.
Console on the kernel USB serial. ping / help / status / hw / vitals / mem stay local. Any other line is user speech into the brain slot.
Cloud driver now, local reserved. Sees menu + vitals + events + notebook + source. Returns steps + memory. Must not touch UART or invent unlisted names.
USB speech / local cmds · consult: menu + vitals + events + notebook → steps + memory (HTTPS)
ESP32-C6 host. Register descriptors, forward steps by exact ASCII name, copy vitals by field name. No new goals. Pins stay in the board port layer.
UART 115200 8N1 · frame 0xAA … 0x55 · UTF-8 · names byte-exact
LED_001. led_on / led_off / led_blink. Gold sample C6-LED17. Executes the name; clamps min / max.
SPEAKER_001. speak / announce. Gold sample C6-SPK20. The brain writes the line. After TTS it may raise task_completed.
Any module that sends a V3 descriptor. Closed loop (balance, done, contact) stays on that organ. The kernel does not write motors from event names.
NVS JSON the brain writes. The kernel stores and re-uploads the book. It does not read it as commands.
| From | To | Wire | Carries |
|---|---|---|---|
| Human | Kernel | USB serial 115200 | User speech, or local ping / help / status / hw / vitals / mem |
| Kernel | Brain slot | Wi-Fi HTTPS | Consult JSON in; steps + memory out. Vendor lives only in the slot |
| Kernel | Organ | UART V3 | 0x91 descriptor, 0x03 command, 0x04 resp, 0x92 event, 0x93 stream, 0x07 heartbeat |
| Organ | Itself | On-board loop | Stability / done / contact. Named feedback via return_params or events |
| Brain | Notebook | NVS via kernel | Whole-book replace or reject. Body does not interpret the text |
The host tree is brain/. The kernel is a bus plus a vital snapshot. It does not include a cloud vendor, and it does not plan.
| Layer | Code | Does | Must not |
|---|---|---|---|
| Board port | board/ | UART ports, TX/RX, SSID, status LED GPIO | Capability names, steps, consult |
| Frames | comm_protocol/ | 0xAA…0x55 pack/unpack, descriptor, event, stream | Business judgement |
| State | shared_model/ | g_registry, vitals world model, task nodes | I/O |
| Post office | module_manager/ | Register, heartbeat timeout, forward by name, resource lock, halt | Invent abilities; write motors from events |
| Queue | coordination/ | One consult queue, NVS notebook, run steps in order | Keyword-map 开灯; call a vendor directly |
| Slot | brain_slot/ | consult(): cloud / null / local (local reserved) | Touch UART |
| Cloud driver | kimi_client/ | First HTTPS brain | Be #included by the kernel except through the slot |
| Breath | autonomous_loop/ | 1 s alive, event glance when idle | 1 Hz cloud loop; local reflex that writes actuators |
Reads speech, the menu, vitals, events, and the notebook. Outputs steps and memory. Must not invent unlisted action names, and must not touch UART.
ESP32-C6 host. Discovers organs, builds the menu, forwards named steps, keeps a vital snapshot. Local console stays local.
LED, speaker, later anything that follows the frame. Executes a named action, clamps min / max, may close its own loop. Must not parse user speech.
Not a product SKU. Protocol V3 on a C6 kernel, an LED organ, and a speaker organ.
This is the contract the lab is running. Version 3. Kernel + LED + speaker already talk on this frame. A new organ implements this file, not a fork of the kernel.
SOF 0xAA | version 3 | msg_type | payload_len (u16 big-endian, 0–512) | payload | CRC16 | EOF 0x55 CRC covers version + type + length + payload. Init 0xFFFF, poly 0xA001. Shortest frame is 8 bytes (ACK, DISCOVER, heartbeat). RX must reassemble: split frames, stuck frames, and junk before SOF are normal. Do not assume one uart_read is one frame.
| Type | Value | Direction | Use |
|---|---|---|---|
| DESCRIPTOR | 0x91 | organ → kernel | Power-on capability contract |
| ACK | 0xF0 | kernel → organ | Descriptor received |
| HEARTBEAT | 0x07 | organ → kernel | Keep-alive after ACK |
| COMMAND | 0x03 | kernel → organ | Run a named ability |
| COMMAND_RESP | 0x04 | organ → kernel | status 0 = ok, 1 = fail |
| DISCOVER | 0x01 | kernel → organ | Ask for descriptor after kernel reset |
| EVENT | 0x92 | organ → kernel | Sparse named events (done, fail, unstable). Consult queue; halt_event may pause the current wait |
| DATA_STREAM | 0x93 | organ → kernel | Periodic samples. Kernel copies into vitals by return_params names |
| Ability | Params | Limits | Behaviour |
|---|---|---|---|
| led_on | none | — | Stop blink, lamp on. Module LED_001, type led, group led |
| led_off | none | — | Stop blink, lamp off |
| led_blink | interval_s float, unit s | min 0.05, max 60 | Blink period, not a wait between two sentences |
| Ability | Params | Limits | Behaviour |
|---|---|---|---|
| speak | text string | 1–240 UTF-8 bytes | Talk to the user. The brain writes the line. Module SPEAKER_001. May raise task_completed when TTS ends |
| announce | text string | 1–240 UTF-8 bytes | Say what the body just did. The brain writes the line. The kernel never auto-inserts this |
The kernel turns online organs into a JSON menu, plus a vital snapshot and a notebook. The brain must answer with steps whose action names exist on that menu:
{
"heard_req": 0,
"steps": [
{ "task_id": "t1", "action": "led_on", "params": {}, "priority": 5, "depends_on": [] },
{ "task_id": "t2", "action": "speak", "params": { "text": "Light is on." }, "priority": 5, "depends_on": ["t1"] }
],
"can_execute": true,
"missing": [],
"memory": { "items": [], "digest": "" },
"response": "user-facing line"
}
A living OS has unfinished edges. If you care, these are the fights worth having.
中文
造身体
会说话已经不稀缺。能被任何头脑穿上、固件不去猜的身体,才稀缺。这个实验室在做那套操作系统:发现全部器官,安装大脑,内核只当邮局。
这一页是公开的门。引用它。接一块器官进来。来争分工。不是乐鑫。没有采购单也可以走进来。
神赐 — 主脑授权的本地规则 · v0.9
Leo · WhatsApp +86 17052886709 · 怎么参与 · 看操作系统
稀缺的不是更会聊天的模型。稀缺的是别人能走进来、不必改写 OS 的身体。
一块板只要上报具名能力,就被接管。加传感器、喇叭、以后的底盘,都不必分叉内核。合同就是入口。
头脑坐在槽里:现在云端,以后本地。换厂商,器官的名字还在。这不是把身体交给某一个模型。
内核是邮局。登记、转发、按字段名抄体征。不猜中文,不编要说的那句,也不在 C6 上再长一个灵魂。
协议就在这一页。选一扇门。不必先当客户。
在 UART 上实现 V3 描述符。上报名字,夹 min / max,发事件。新器官是一份新合同,不是去改内核的分叉固件。
只要能从菜单里返回具名步骤,并交回笔记本,就可以谈。云端驱动换了,OS 还在。本地驱动的槽已经留好。
工程师和其他模型可以指向同一条网址。读这套分工。认为它是错的,就说。合同是这样变硬的,不是靠把口号喊大。
一块模块、一个底盘问题、一次 ACK 不到。WhatsApp 找 Leo。技术交流和交朋友就够。
Body OS 在中间。其余都是挂在具名接口上的节点。新硬件不必分叉内核。换一个模型不必改写器官。
内核 USB 串口控制台。ping / help / status / hw / vitals / mem 留在本地。其余整行是用户原话,进大脑槽。
现在是云端驱动,本地槽位已留。看见菜单 + 体征 + 事件 + 笔记本 + 来源。返回 steps + memory。禁止碰 UART,禁止发明未登记的名字。
USB 原话 / 本地命令 · 咨询:菜单 + 体征 + 事件 + 笔记本 → steps + memory(HTTPS)
ESP32-C6 宿主。登记描述符,按 ASCII 名精确转发 steps,按字段名抄体征。不产生新目标。引脚留在板级移植层。
UART 115200 8N1 · 帧 0xAA … 0x55 · UTF-8 · 名字逐字节相等
LED_001。led_on / led_off / led_blink。金样 C6-LED17。按名字执行,min / max 卡住。
SPEAKER_001。speak / announce。金样 C6-SPK20。文案由大脑写。TTS 结束后可报 task_completed。
任何发出 V3 描述符的模块。稳定、到位、接触等闭环留在该器官上。内核不按事件名写电机。
大脑写下的 NVS JSON。内核保管并原样再上传。不把它当指令解读。
| 从 | 到 | 线 | 运什么 |
|---|---|---|---|
| 人 | 内核 | USB 串口 115200 | 用户原话,或本地 ping / help / status / hw / vitals / mem |
| 内核 | 大脑槽 | Wi-Fi HTTPS | 咨询 JSON 进去;steps + memory 出来。厂商只活在槽里 |
| 内核 | 器官 | UART V3 | 0x91 描述符、0x03 命令、0x04 应答、0x92 事件、0x93 数据流、0x07 心跳 |
| 器官 | 自己 | 板上闭环 | 稳定 / 完成 / 接触。具名反馈走 return_params 或事件 |
| 大脑 | 笔记本 | 经内核写 NVS | 整本替换或拒绝。身体不解读正文 |
宿主目录是 brain/。内核是总线加生命体征快照。不内嵌云厂商,也不做规划。
| 层 | 代码 | 做什么 | 禁止 |
|---|---|---|---|
| 板级口 | board/ | UART 口、TX/RX、SSID、状态灯 GPIO | 能力名、steps、咨询 |
| 帧 | comm_protocol/ | 0xAA…0x55 组包拆包、描述符、事件、数据流 | 业务判断 |
| 状态 | shared_model/ | 登记表、体征世界模型、任务节点 | I/O |
| 邮局 | module_manager/ | 登记、心跳踢线、按名转发、资源锁、halt | 发明能力;按事件写电机 |
| 队列 | coordination/ | 咨询排队、NVS 笔记本、按序执行 steps | 中文关键词开灯;直接调厂商 |
| 槽 | brain_slot/ | consult():云 / 空 / 本地(本地已留) | 碰 UART |
| 云驱动 | kimi_client/ | 第一路 HTTPS 大脑 | 被内核直接 include,只能经槽调用 |
| 呼吸 | autonomous_loop/ | 1 秒活着,空闲时瞥一眼事件 | 1Hz 云循环;本地反射去写执行器 |
看见原话、菜单、体征、事件和笔记本,输出 steps 和 memory。禁止发明未登记的动作名,禁止碰 UART。
ESP32-C6 宿主。发现器官、做成菜单、按名转发步骤、保管体征快照。本地控制台只留在本地。
灯、喇叭,以及以后任何遵守这套帧的模块。按名字执行,min / max 卡住,闭环可以在自己板上。禁止解析用户原话。
不是货架型号。协议 V3:C6 内核、灯器官、喇叭器官。
实验室正在跑的合同。版本 3。内核 + 灯 + 喇叭已经在这套帧上通话。新器官按这份实现,不要去分叉内核。
SOF 0xAA | version 3 | msg_type | payload_len(u16 大端,0–512)| payload | CRC16 | EOF 0x55 CRC 覆盖 version + type + 长度 + payload。初值 0xFFFF,多项式 0xA001。 最短帧 8 字节(ACK、DISCOVER、心跳)。 接收必须流式组帧:拆包、粘包、SOF 前的脏字节都是正常的。不要假设一次 uart_read 就是一帧。
| 类型 | 值 | 方向 | 用途 |
|---|---|---|---|
| DESCRIPTOR | 0x91 | 器官 → 内核 | 上电能力合同 |
| ACK | 0xF0 | 内核 → 器官 | 已收到描述符 |
| HEARTBEAT | 0x07 | 器官 → 内核 | ACK 之后的保活 |
| COMMAND | 0x03 | 内核 → 器官 | 按名字执行 |
| COMMAND_RESP | 0x04 | 器官 → 内核 | status 0 成功,1 失败 |
| DISCOVER | 0x01 | 内核 → 器官 | 内核重启后拉一次描述符 |
| EVENT | 0x92 | 器官 → 内核 | 偶发具名事件(完成、失败、失稳)。进咨询队列;halt_event 可暂停当前等待 |
| DATA_STREAM | 0x93 | 器官 → 内核 | 周期采样。内核按 return_params 名字填体征 |
| 能力 | 参数 | 限度 | 行为 |
|---|---|---|---|
| led_on | 无 | — | 停闪,灯亮。模块 LED_001,type led,组 led |
| led_off | 无 | — | 停闪,灯灭 |
| led_blink | interval_s float,单位 s | min 0.05,max 60 | 闪烁周期,不是两句话之间的等待 |
| 能力 | 参数 | 限度 | 行为 |
|---|---|---|---|
| speak | text 字符串 | 1–240 UTF-8 字节 | 对用户说话。文案由大脑写。模块 SPEAKER_001。TTS 结束可报 task_completed |
| announce | text 字符串 | 1–240 UTF-8 字节 | 口述身体刚做了什么。文案由大脑写。内核绝不自动补这一条 |
内核把已在线器官收成 JSON 菜单,再加上体征快照和笔记本。大脑的 steps 里,action 必须是这份菜单上的能力名:
{
"heard_req": 0,
"steps": [
{ "task_id": "t1", "action": "led_on", "params": {}, "priority": 5, "depends_on": [] },
{ "task_id": "t2", "action": "speak", "params": { "text": "Light is on." }, "priority": 5, "depends_on": ["t1"] }
],
"can_execute": true,
"missing": [],
"memory": { "items": [], "digest": "" },
"response": "user-facing line"
}
活着的 OS 一定有没做完的边。如果你在意,这些才值得吵。