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)
|
|
|
|
|
|
#
|
|
|
|
|
|
# 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"
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$1" = "--deps" ]; then
|
|
|
|
|
|
if command -v apt-get >/dev/null; then
|
|
|
|
|
|
sudo apt-get update && sudo apt-get install -y $DEPS_DEBIAN $BUILD_DEBIAN
|
|
|
|
|
|
elif command -v dnf >/dev/null; then
|
|
|
|
|
|
sudo dnf install -y $DEPS_FEDORA gcc pkgconf alsa-lib-devel
|
|
|
|
|
|
elif command -v pacman >/dev/null; then
|
|
|
|
|
|
sudo pacman -S --needed $DEPS_ARCH base-devel
|
|
|
|
|
|
else
|
|
|
|
|
|
echo "Install these with your package manager: $DEPS_DEBIAN"
|
|
|
|
|
|
fi
|
|
|
|
|
|
if command -v docker >/dev/null && ! id -nG | grep -qw docker; then
|
|
|
|
|
|
echo "Adding you to the docker group (the bot's computer needs it); log out and back in afterwards."
|
|
|
|
|
|
sudo usermod -aG docker "$USER"
|
|
|
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
OUT="${CARGO_TARGET_DIR:-target}/release/anybot"
|
|
|
|
|
|
if [ -x "$OUT" ] && [ "$1" != "--rebuild" ]; then
|
|
|
|
|
|
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
|