The phone shot stood alone as a 300px column, so it read as cut off at
one side. The desktop approval card and the phone sign-in are now one
composite (docs/demo/composite.py), and every README still is dark and
2x-captured, so the page reads as one product.
The document table lists user-facing documents; the README style notes
stay in docs/ for whoever edits the README.
Studied OpenClaw, ollama, Dify, AnythingLLM, Meetily, LobeHub, n8n:
logo, one-line pitch, language bar, badges, hero shot, install in the
first third as fenced blocks, quick start, architecture, a two-column
document table, short closing sections.
Both READMEs now follow that. What was breaking the page: a three-column
install table holding a 90-character URL (URLs cannot wrap, so the table
pushed the page sideways) and a 1414px PowerShell line inside a code
block. Install moved to code fences, the long line is wrapped, the
Windows hands snippet is one statement per line, and screenshots are
re-taken at 2x and downscaled to 960 px so they fit the ~980 px document
column and stay sharp on Retina. docs/readme-style.md records the rules
and how to check the render locally (marked + headless Chrome, measure
scrollWidth and pre.scrollWidth).
The top block now gives the three roles their own paste line (Windows
included), matching what install.sh --print reports. Hands takes the URL
and the one-time code from "Add a computer".
Both READMEs now open with a quick install: curl… | sh on Mac and Linux,
irm… | iex on Windows, then where the key goes. The role table moved
below it for the server, hands, and agent paths.
Both languages now open with what AnyBot does, in plain words, before
the install table and the flow diagram. The four stills are re-taken
from this build (shots/readme/) and tracked, since the READMEs point at
them; the old shots/ stayed ignored.
- SECURITY.md (zh) + docs/en/security.md: trust boundaries (app /
box / Docker API / relay / providers), where every secret lives and
what a thief holding that thing actually gets, the injection layers
with an honest limit (no absolute defense — the human at the gate
is the last line), the network surface, the known-limits list and
hardening advice
- state.json is written 0600: it carries model keys, and now says so
with its permissions like the vault's key file
- README (zh + en) link it; reporting = private security advisory
- README.en.md: full English front door (install table, quick start,
deployment, security-in-one-paragraph, license) + a positioning table
against OpenClaw / OpenHands / Khoj / UI-TARS
- docs/en/{architecture,install,multi-device,protocol}.md: faithful English
summaries of the Chinese docs, each linking to the canonical version
- docs/demo/README.md: how to record the GIF/MP4 the README reserves space for
- language switch line at the top of the Chinese README
- install.sh (curl | sh): app, hands, server and deps modes; installs system packages
(right names per release, e.g. libasound2t64 on Ubuntu 24.04), Rust via rustup (1.95+),
Docker for the server; limits parallel compiles on small machines
- Server Docker image: add the ALSA build/runtime packages (the build failed), cache the
cargo registry and target between rebuilds, JOBS build arg
- 加一台電腦 now gives a line that installs AnyBot on a blank computer before joining it
- Makefile: make deps installs Rust too, make doctor, clear message when Rust is missing/old
- README rewritten: one line per use, getting started, update/remove, troubleshooting,
deployment options; docs/install.md and multi-device.md follow it
- Tested on fresh ubuntu:24.04 (app) and debian:12 (curl | sh hands) containers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa