# Skald Circle — SKALD _This file MUST be written in English. All project notes, decisions, and documentation here are in English._ ## Installation ### Stable release ```sh curl -fsSL https://builds.skaldagent.net/install.sh | bash ``` ### Nightly (latest automatic build) ```sh curl -fsSL https://builds.skaldagent.net/install-nightly.sh | bash ``` ### Requirements | Required | Notes | |----------|-------| | **Docker** | User container sandbox. The installer can install it | | **Linux (amd64/arm64)** or **macOS ARM64 (Apple Silicon)** | Intel Mac not supported | | **systemd** (Linux) or **launchd** (macOS) | For running as a service | | **Python 3** (optional) | For Python MCP servers (Gmail, GCal, GMaps, weather, SSH) and local TTS plugins | | **Node.js ≥ 18** (optional) | For WhatsApp MCP server | The installer checks each requirement and offers to install Docker if missing. Python and Node.js are optional — the server starts regardless, but certain MCP servers won't work. ### What it does 1. Downloads the tarball from `builds.skaldagent.net` 2. Extracts to `~/.local/share/skald-circle/` (or `$SKALD_DIR`) 3. Configures the service (systemd user service / launchd agent) 4. Runs `skald-setup` to create the admin account 5. The server starts at `https://localhost:8443` ### Uninstallation ```sh curl -fsSL https://builds.skaldagent.net/install.sh | bash # The tarball contains uninstall.sh: ~/.local/share/skald-circle/uninstall.sh ``` Or, after installation: `~/.local/share/skald-circle/uninstall.sh` ## Bug fix: uninstall.sh fails on Docker-owned files in homes/ ✅ **Problem**: `uninstall.sh` runs `rm -rf "$INSTALL_DIR"` as the normal user, but `homes/` contains files created by Docker containers running under different UIDs (often root). The removal fails with "Permission denied" on those files, leaving a broken install behind. **Fix**: if `rm -rf` fails (non-zero exit), the script retries with `sudo rm -rf`. If even sudo fails, it prints an error message and exits non-zero so the user knows manual cleanup is needed. ### From source ```sh git clone https://github.com/.../skald-circle.git cd skald-circle cargo build --release ./run.sh ``` ## Current status New application with agents and chatbots to help families and small groups collaborate, with supervised chat for children and vulnerable people. ## Installer & startup architecture ``` install.sh ├── extracts tarball ├── creates .venv (inline — does NOT call run.sh) └── runs skald-setup for interactive config systemd service → ExecStart=run.sh run.sh (supervisor) ├── creates .venv if it doesn't exist (for local dev) ├── runs skald-setup (first run only) └── loop: executes skald binary, restart on exit 255 ``` **Rule**: `install.sh` must NEVER call `run.sh`. The venv is created inline in the installer. `run.sh` is only for the service supervisor or local development. `skald-setup` is the only setup executable called by install.sh. ## Bug fix: install.sh stuck on "Setting up Python virtual environment" ✅ **Problem**: the installer called `"$INSTALL_DIR/run.sh"` to create the venv. But `run.sh` after the venv runs `skald-setup` and then the server in a loop, hanging the installer forever. **Fix**: the venv is now created *inline* in `install.sh` and `install-nightly.sh`, using the same logic as `run.sh` (uv > python3) but without starting the server. ## Bug fix: "Unit docker.service not found" in user service ✅ **Problem**: the systemd user unit had `Requires=docker.service`, but `docker.service` is a system-level unit (not a user unit). `systemctl --user` couldn't find it and refused to start Skald. **Fix**: removed `Requires=docker.service` from the user unit template in both install scripts. Kept `After=docker.service` (advisory, doesn't block if the unit isn't found). ## Bug fix: skald-setup non interattivo con curl | bash ✅ **Problem**: `skald-setup` controlla `isatty(0)`, ma con `curl ... | bash` stdin è un pipe, quindi saltava senza chiedere username/password. L'installer arrivava fino in fondo ma senza aver creato l'admin. **Fix**: se `IS_INTERACTIVE=false` ma `/dev/tty` esiste, l'installer chiama `skald-setup