AnyBot: first commit of the working desktop app
Rust/egui rebuild of Grok Bot as of 2026-11-04: chat with streaming
providers (xAI, OpenAI, Claude, Gemini, OpenRouter, OpenCode Go, Ollama,
custom), tools and approvals, the bot's Docker computer, computer use on
macOS / Linux X11 / Wayland, AnyBot's browser with a full DevTools-based
toolset, the encrypted vault, pinned grid and sidebar sections, Markdown
with Mermaid diagrams, phone access through the relay, and the Linux
build and test scripts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 08:51:51 +00:00
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
# Install AnyBot on a Linux desktop for the current user (no root needed for this part).
|
|
|
|
|
|
#
|
|
|
|
|
|
# ./deploy/linux/install.sh build from source, then install
|
|
|
|
|
|
# ./deploy/linux/install.sh --deps also install the system packages (asks for sudo)
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
# ./deploy/linux/install.sh --deps-only only the system packages (make deps)
|
AnyBot: first commit of the working desktop app
Rust/egui rebuild of Grok Bot as of 2026-11-04: chat with streaming
providers (xAI, OpenAI, Claude, Gemini, OpenRouter, OpenCode Go, Ollama,
custom), tools and approvals, the bot's Docker computer, computer use on
macOS / Linux X11 / Wayland, AnyBot's browser with a full DevTools-based
toolset, the encrypted vault, pinned grid and sidebar sections, Markdown
with Mermaid diagrams, phone access through the relay, and the Linux
build and test scripts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 08:51:51 +00:00
|
|
|
|
#
|
|
|
|
|
|
# Puts the app in ~/.local/bin/anybot, the menu entry in ~/.local/share/applications and the
|
|
|
|
|
|
# icon in ~/.local/share/icons. Run it from the app/ folder.
|
|
|
|
|
|
set -e
|
|
|
|
|
|
cd "$(dirname "$0")/../.."
|
|
|
|
|
|
|
|
|
|
|
|
# What AnyBot uses on Linux (all optional except the first line; the app explains what's missing):
|
|
|
|
|
|
# libasound2 libxkbcommon-x11-0 libgl1 xdg-utils – the window and sound
|
|
|
|
|
|
# libnotify-bin notifications libsecret-tools saved logins (系統鑰匙圈)
|
|
|
|
|
|
# espeak-ng reading answers aloud zenity file pickers
|
|
|
|
|
|
# xclip / wl-clipboard pasting pictures; typing Chinese on GNOME/KDE Wayland
|
|
|
|
|
|
# ffmpeg video posters, Opus, demo videos
|
|
|
|
|
|
# docker.io the bot's own computer fonts-noto-cjk extra CJK glyphs (粉圓體 is built in)
|
|
|
|
|
|
DEPS_DEBIAN="libasound2 libxkbcommon-x11-0 libgl1 xdg-utils libnotify-bin libsecret-tools espeak-ng zenity xclip wl-clipboard ffmpeg docker.io fonts-noto-cjk"
|
|
|
|
|
|
DEPS_FEDORA="alsa-lib libxkbcommon-x11 mesa-libGL xdg-utils libnotify libsecret espeak-ng zenity xclip wl-clipboard ffmpeg-free moby-engine google-noto-sans-cjk-fonts"
|
|
|
|
|
|
DEPS_ARCH="alsa-lib libxkbcommon-x11 mesa xdg-utils libnotify libsecret espeak-ng zenity xclip wl-clipboard ffmpeg docker noto-fonts-cjk"
|
|
|
|
|
|
BUILD_DEBIAN="build-essential pkg-config libasound2-dev"
|
|
|
|
|
|
|
One-step install: install.sh, fixed Linux and server builds, clearer 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
2026-11-04 16:52:10 +00:00
|
|
|
|
# The package lists above are for reference; ../../install.sh installs them (it picks the right
|
|
|
|
|
|
# names per release, e.g. libasound2t64 on Ubuntu 24.04, and installs Rust when it's missing).
|
|
|
|
|
|
if [ "${1:-}" = "--deps" ] || [ "${1:-}" = "--deps-only" ]; then
|
|
|
|
|
|
sh ./install.sh deps
|
AnyBot: first commit of the working desktop app
Rust/egui rebuild of Grok Bot as of 2026-11-04: chat with streaming
providers (xAI, OpenAI, Claude, Gemini, OpenRouter, OpenCode Go, Ollama,
custom), tools and approvals, the bot's Docker computer, computer use on
macOS / Linux X11 / Wayland, AnyBot's browser with a full DevTools-based
toolset, the encrypted vault, pinned grid and sidebar sections, Markdown
with Mermaid diagrams, phone access through the relay, and the Linux
build and test scripts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 08:51:51 +00:00
|
|
|
|
fi
|
|
|
|
|
|
|
One-step install: install.sh, fixed Linux and server builds, clearer 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
2026-11-04 16:52:10 +00:00
|
|
|
|
[ "${1:-}" = "--deps-only" ] && exit 0
|
make, README and docs: build and install from source
- Makefile: make / run / install / uninstall / deps / test / serve / setup /
hands / relay-run / server / dist / clean (macOS and Linux).
- README.md and docs/: install (all platforms, data locations, troubleshooting),
multi-device (brain, hands, screens, pairing, what the offline messages mean),
architecture (layers, data, security, sync, keys, hands, picture helper),
protocol (relay and AnyBot endpoints, WebSocket frames, sync ops), release
(packaging, Gitea Actions, Linux and Mac runners).
- install.sh --deps-only, bundle.sh KEEP_APP=1 (used by make deps / install).
- FEATURES.md: the multi-device part is done.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 14:16:45 +00:00
|
|
|
|
|
AnyBot: first commit of the working desktop app
Rust/egui rebuild of Grok Bot as of 2026-11-04: chat with streaming
providers (xAI, OpenAI, Claude, Gemini, OpenRouter, OpenCode Go, Ollama,
custom), tools and approvals, the bot's Docker computer, computer use on
macOS / Linux X11 / Wayland, AnyBot's browser with a full DevTools-based
toolset, the encrypted vault, pinned grid and sidebar sections, Markdown
with Mermaid diagrams, phone access through the relay, and the Linux
build and test scripts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 08:51:51 +00:00
|
|
|
|
OUT="${CARGO_TARGET_DIR:-target}/release/anybot"
|
One-step install: install.sh, fixed Linux and server builds, clearer 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
2026-11-04 16:52:10 +00:00
|
|
|
|
if [ -x "$OUT" ] && [ "${1:-}" != "--rebuild" ]; then
|
AnyBot: first commit of the working desktop app
Rust/egui rebuild of Grok Bot as of 2026-11-04: chat with streaming
providers (xAI, OpenAI, Claude, Gemini, OpenRouter, OpenCode Go, Ollama,
custom), tools and approvals, the bot's Docker computer, computer use on
macOS / Linux X11 / Wayland, AnyBot's browser with a full DevTools-based
toolset, the encrypted vault, pinned grid and sidebar sections, Markdown
with Mermaid diagrams, phone access through the relay, and the Linux
build and test scripts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 08:51:51 +00:00
|
|
|
|
echo "Using the existing build ($OUT)."
|
|
|
|
|
|
else
|
|
|
|
|
|
command -v cargo >/dev/null || { echo "Rust is needed to build: https://rustup.rs"; exit 1; }
|
|
|
|
|
|
cargo build --release
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
BIN="$HOME/.local/bin"
|
|
|
|
|
|
APPS="$HOME/.local/share/applications"
|
|
|
|
|
|
ICONS="$HOME/.local/share/icons/hicolor"
|
|
|
|
|
|
mkdir -p "$BIN" "$APPS" "$ICONS/256x256/apps" "$ICONS/128x128/apps" "$ICONS/scalable/apps"
|
|
|
|
|
|
install -m 755 "$OUT" "$BIN/anybot"
|
|
|
|
|
|
install -m 644 deploy/linux/anybot.desktop "$APPS/anybot.desktop"
|
|
|
|
|
|
install -m 644 icons/anybot.svg "$ICONS/scalable/apps/anybot.svg"
|
|
|
|
|
|
"$BIN/anybot" --write-icon "$ICONS/256x256/apps/anybot.png" 256
|
|
|
|
|
|
"$BIN/anybot" --write-icon "$ICONS/128x128/apps/anybot.png" 128
|
|
|
|
|
|
command -v update-desktop-database >/dev/null && update-desktop-database "$APPS" 2>/dev/null || true
|
|
|
|
|
|
command -v gtk-update-icon-cache >/dev/null && gtk-update-icon-cache -q "$ICONS" 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
|
|
echo "AnyBot is installed: find it in your app menu, or run: anybot"
|
2026-11-04 12:38:45 +00:00
|
|
|
|
echo "To make this computer a brain, or hands for your brain (also without a screen): anybot setup"
|
AnyBot: first commit of the working desktop app
Rust/egui rebuild of Grok Bot as of 2026-11-04: chat with streaming
providers (xAI, OpenAI, Claude, Gemini, OpenRouter, OpenCode Go, Ollama,
custom), tools and approvals, the bot's Docker computer, computer use on
macOS / Linux X11 / Wayland, AnyBot's browser with a full DevTools-based
toolset, the encrypted vault, pinned grid and sidebar sections, Markdown
with Mermaid diagrams, phone access through the relay, and the Linux
build and test scripts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uirha3oEtWeHh58zA7ErHa
2026-11-04 08:51:51 +00:00
|
|
|
|
case ":$PATH:" in *":$BIN:"*) ;; *) echo "(Add $BIN to your PATH to start it from a terminal.)" ;; esac
|
|
|
|
|
|
if [ "${XDG_SESSION_TYPE:-}" = "wayland" ]; then
|
|
|
|
|
|
echo "Wayland: bots can see and use your screen. On GNOME/KDE the first time, a system window asks:"
|
|
|
|
|
|
echo " turn on 「允許遠端操作」 (Allow remote interaction), then press 「分享」 (Share)."
|
|
|
|
|
|
echo " Recording a demonstration (教它一項任務) needs an Xorg session."
|
|
|
|
|
|
fi
|