不是翻译 —— 多数文档描述的行为已经不存在了。 先修一个更基本的问题:我们不拥有 u-claw.org 域名,那是上游的。所以之前写在 README、诊断包提示、联系方式里的 help@u-claw.org 全都会把用户的问题发给 上游 —— 一个没有理由回复的人。改为指向我们自己的 issue tracker,并加断言 禁止再出现指向该域名的支持入口。 重写(内容过时,不是语言问题): - install/README.md —— 还写着 10 个中国技能、DeepSeek 优先、国内镜像。 现在按实际流程写:技能读 manifest、模型菜单 Gemini 优先、bundle 有 SHA256 校验。并如实写明 curl|bash 在受管企业电脑上会被 EDR 拦。 - CLAUDE.md 的模型配置整节 —— 还在描述虾盘云首选卡片和 12 个 provider, 那个界面已经换成单框 Key 输入了。 - SECURITY.md —— 安全报告原本指向上游维护者个人邮箱。fork 之后那条路由 是错的:漏洞会发给写不了这份代码、也修不了的人。 - CONTRIBUTING.md —— 补上 fork 关系、pre-push 钩子怎么装、以及 `node --test tests/` 为什么不能用。 翻译并保留: - bootable/README.md、TROUBLESHOOTING.md —— 面向用户,顺带把 「国内镜像」「小米/华为 BIOS 按键」等换成目标市场的实际情况 HANDOFF.md 重写为一份事故复盘:原文一半是过时的一次性交接笔记(引用的 website/guide.html 已不在本仓库),另一半是 persistence.dat 未格式化导致 启动失败的排查记录 —— 后者有长期价值,尤其是「读 offset 1080 的两字节 验证 ext4」这个判断方法,已同时写进 bootable/README.md。 bootable/IMPROVEMENTS_SUMMARY.md 保留中文,加了说明:它是上游 fork 前的 历史改进记录,没人引用,描述的是已完成的工作而非当前行为。翻译它反而会 让人误以为是现行文档。 新增 skills/en/uclaw-help —— 把「怎么用、东西在哪、出问题怎么办」做成 内置知识,每个角色都装。方案 C10.8:能问的产品才是不需要学的产品。
5.7 KiB
Contributing
The mental model, first
This repository is the USB drive's contents — scripts, HTML, small files. After
setup.shit is a working drive — the above plus Node.js and OpenClaw.
It is not a build tool that produces a drive. It is the drive. That one idea explains most of the layout.
Four distribution forms, deliberately independent — changing one does not touch the others:
| Directory | Form | Entry point |
|---|---|---|
portable/ |
USB drive — the main product | advanced/setup.sh → START HERE - Mac.command |
bootable/ |
Linux USB that boots a machine with no OS | 1-prepare-usb.ps1 → 4-copy-to-usb.ps1 |
install/ |
One-line network install | install.sh / install.ps1 |
u-claw-app/ |
Electron desktop — deprecated, archive only | not built |
This is a fork
Upstream is github.com/dongsheng123132/u-claw. We host at
gitea.fanghe.it.com/zhenghy/u-claw and do not send changes back: this build
removes the China-market defaults that are the point of the upstream project.
If you are fixing something we inherited unchanged, consider telling them too.
Getting set up
git clone ssh://git@gitea.fanghe.it.com:222/zhenghy/u-claw.git
cd u-claw
# Enable the pre-push hook. Nothing installs it for you, and it is the only
# thing reliably running the tests — see below.
git config core.hooksPath .githooks
# The fastest thing to iterate on is the portable build
cd portable/advanced && bash setup.sh # fetches Node.js + OpenClaw into ../app/
cd .. && bash "START HERE - Mac.command"
| Platform | State |
|---|---|
| macOS Apple Silicon | ✅ main development platform |
| macOS Intel | ✅ works — setup.sh fetches node-mac-x64 first |
| Windows x64 | 🚧 needs verification — see below |
| Linux x64 | ✅ via bootable/ |
Windows currently carries unverified changes. A large amount of PowerShell and several
.batpath-resolution changes were written on a Mac with no PowerShell available, so they have never been through a parser. If you have a Windows machine, running that check is the single most useful thing you can do right now.U盘实测清单.mdin the workspace root has the exact commands.
Tests
node --test # everything
node --test tests/windows-launchers.test.mjs # one file
Not node --test tests/. Node reads that path as a module to load and dies
with "Cannot find module" — zero tests run, exit code 1. That form was the
documented command here for a long time, which is a good part of why the suite
went unrun for the life of the project.
The suite asserts on the text and behaviour of scripts rather than spawning
OpenClaw: that .bat files stay pure ASCII (Chinese Windows cmd.exe reads
non-ASCII as GBK and mis-parses), that .command files stay LF-only, that no
China-routed download source comes back, that both installers resolve skills
identically, that every UI string exists in every language, and that nothing
points at a host origin.json does not declare.
CI runs it where a runner exists (.gitea/workflows/tests.yml, mirrored to
.github/). On our Gitea there is currently no registered runner, so the
pre-push hook is doing the work. Install it.
Filing an issue
A bug report needs four things, or nobody can act on it:
- OS and version —
macOS 14.5,Windows 11 23H2 - Which form — portable / install / bootable
- The full error as text. Not a screenshot of text.
- What you already tried
A feature request needs a situation, not a feature. "I'd like X" is not enough to discuss. "I'm doing Y, I need X, because Z" is.
Sending a change
Before you write it:
- Does anyone need this? For anything large, open an issue first.
- Does it break another form? A change in
portable/should not affectbootable/. - Did you run it? Not just the tests — the actual thing.
Do not:
- Commit
node_modules/,app/,data/,*.dmg,*.exe— all in.gitignore - Put an API key, token or password in any file
- Reformat unrelated code ("ran prettier over everything" makes review impossible)
- Open a PR with a title and no description
Commit messages: say what changed and why, in a sentence someone can act on.
fix(install.sh): npm wrapper cannot be run through node directly
feat(skills): add linkedin-post
docs: note Windows 11 ARM64 support
Not update, fix, or changed some files.
git switch -c fix/something # never work on main
git add <specific files> # not git add .
git push -u origin fix/something
Notes per form
portable/
- Never commit
app/ordata/—setup.shproduces them .commandfiles need the executable bit and LF endings.batfiles must be pure ASCII with CRLF, and must not contain an unescaped)inside anIF (...)block — that closes the block early and the window flash-exits. There is a test for it, and it has caught real regressions.- User config lives in
data/.openclaw/openclaw.json. That file being on the drive is the entire portability story; do not move it. - User-facing text belongs in
lib/messages/*.json, never in a script
bootable/
- The four PowerShell scripts must run in order
- Fully self-contained: it references nothing from
portable/on purpose
install/
- These run through
curl | bashwith no checkout, so they cannot readorigin.jsonand carry URLs as literals.tests/origin.test.mjsfails if those literals drift fromorigin.json— that is what stops a host migration from half-happening. - Neither script may contain skill text. Both call
lib/install-skills.mjs.
u-claw-app/ — deprecated 2026-06-19, kept for archive. Do not add to it.