# Set up Dotobot for the user

Use this guide when the user asks you to install Dotobot. Follow the user's instructions and your tool permissions.

## 1. Confirm the target

- Identify the remote server or dedicated always-on computer that the user wants to use, such as a Raspberry Pi or Mac mini.
- Ask for the target if the request does not identify it. Do not assume that your current environment is the target.
- Identify the devices that will connect. Set up HTTPS so the Mac and iPhone apps can reach the server.
- Keep the harness on the chosen server; installing the app on a device does not make that device the harness host.
- Check for an existing Dotobot installation. Preserve its configuration and data. Do not replace an existing installation without the user's instruction.

Dotobot requires a server or local machine that the user owns or controls. The native app connects to that machine; it does not host the bots.
The harness is free and open source under Apache 2.0. Native app access requires a subscription. Server costs and AI service costs are separate.
Do not buy a server or subscription unless the user authorizes the purchase.

## 2. Check the server

Use a terminal on the target server with Bash, curl, and an internet connection. Check that Docker can run on its 64-bit Linux or macOS system (amd64 or arm64). A Raspberry Pi needs a 64-bit Linux OS.
The installer can help install Docker if Docker is absent. Do not replace an existing Docker engine that is unavailable.
On a Mac mini, the user must complete Docker Desktop setup and accept its terms. Keep Docker Desktop running so the bots stay available.
On Windows, use a Linux shell with Docker Desktop integration. Do not run the installer in PowerShell.

## 3. Install the harness

Run the command on the target computer. Let the installer request administrator access when necessary.
Do not add sudo before the pipe.

Confirm the server’s public IP address. Allow incoming TCP connections on ports 80 and 443 within the user's authorized scope.
Replace YOUR_PUBLIC_IP before you run this command:

```sh
curl -fsSL https://dotobot.com/install.sh | bash -s -- --ip YOUR_PUBLIC_IP
```

For a domain, point its DNS record to the server. Use --domain bots.example.com instead of --ip YOUR_PUBLIC_IP.
Replace bots.example.com with the user's domain. A private LAN address cannot use a public IP certificate.
A home router can require port forwarding. The installer does not provide a tunnel.
Do not expose the Docker socket to the network.

Wait for the installer to finish. It prints a private link code that starts with dotobot_.
Do not put this code in public logs, issues, screenshots, or shared files. Give it only to the user through a private channel.

## 4. Verify the installation

Check the installer's exit status. Check that the Dotobot containers are running with the local Docker tools.
If setup fails, read setup.log in the installation directory. Do not claim success from a download or build alone.
Check the HTTPS address from the device or network that will connect to the server.
Report any check that you cannot complete.

## 5. Help the user connect

Get the current app download options from https://dotobot.com/documentation/.
Do not invent an iOS download link if the website says Coming soon.
Ask the user to open Dotobot and sign in. Do not request the user's password or payment details in chat.
In the app, open Your servers from the user menu. Paste the private link code.
Use the same Dotobot account and sign-in method on each device. Accounts are not automatically merged because their email addresses match.
Confirm an app connection if you can inspect it. Otherwise, state that app connection still needs the user's check.

To show the link code again, run this command on the server:

```sh
curl -fsSL https://dotobot.com/install.sh | bash -s -- --link
```

## 6. Connect AI and check a first task

In Providers, help the user connect their chosen AI provider using the sign-in or API-key method offered in the app.
Do not request AI credentials in chat. Use the provider's sign-in flow or the app's credential field.
Choose the provider and model for a bot. Send a simple first message and verify its reply if the user has authorized this use of their AI account.
If the user wants a plugin, connect it in Plugins and select which bots can access it. Name the service or connected account in the task.
Verify a read-only result within the user's requested scope. A connected status alone does not prove that a task works.
Signing in to Dotobot with Google does not connect Google Workspace tools.

Voice and Jev are optional. Do not enable additional services without the user's instruction.
For ElevenLabs voice, the user must connect a key, choose a voice and select the provider; connecting a key alone does not select it.
Let the app show its data-sharing consent before starting a voice call. Optional services have their own usage charges.

## 7. Finish

Tell the user what you installed, which checks passed, and which steps remain.
Keep the installation and user data intact. Do not uninstall the server as task cleanup.
The default installation directory is ~/.local/share/dotobot. Bot homes and the shared workspace also use Docker volumes.
Back up both locations. If DOTOBOT_HOME is set, preserve its value for later commands.
The native apps and server update separately. Do not report a server update as an app update, or a download as a working connection.
Removing a saved connection or deleting a Dotobot account does not erase the user's server data.

Reference: https://github.com/slunkeh/dotobot-harness#readme
