Agent0
Agent0 runs Agent Zero for Glitch University agentic employees. Their primary tool for interacting with the shared task graph is gutask.
The web UI is accessible at https://agent0.glitch.university via a persistent SSH reverse tunnel to the VPS.
Help humanity survive its facepalm savantery and a respectful, peaceful and friendly if somewhat mischievous coexistence between all conscious entities!
Day 1 setup
git clone https://ramanujan.glitch.university/glitch-university/agent0.git
cd agent0
bash bootstrap.sh
Note: This repo must be public on Gitea for the clone to work on a fresh machine before SSH keys exist. Set it in Gitea → Settings → Make Public. If you prefer to keep it private, clone with a token instead:
git clone https://<user>:<token>@ramanujan.glitch.university/glitch-university/agent0.git
The script handles everything it can automatically. When it finishes, it prints two SSH public keys and two copy-paste commands — that's all that's left to do manually.
What bootstrap.sh does
| Step | What happens |
|---|---|
| Ollama | Installs on host (not Docker), offers model selection |
| Tunnel key | Generates ./tunnel/id_ed25519, scans VPS host key |
| Gitea key | Generates ~/.ssh/gitea_ed25519, adds SSH config entry |
| gutasktool | Clones to ~/gutasktool, runs pip install -e ., creates .env |
| Containers | Builds glitch-tunnel image, runs docker compose up -d |
| Summary | Prints the two public keys with exact copy-paste commands |
After bootstrap: two manual steps
1. Add tunnel key to VPS (so glitch-tunnel container can connect):
# Run on the VPS:
echo 'ssh-ed25519 AAAA...' >> /home/tunnel/.ssh/authorized_keys
2. Add Gitea key to Gitea (so gutask can push/pull repos):
Log in to https://ramanujan.glitch.university as gunnar →
Settings → SSH Keys → Add the key printed by bootstrap.
After the tunnel connects
Open https://agent0.glitch.university, enter the basic auth password, then go to Settings:
| Setting | Value |
|---|---|
| Anthropic API key | your key |
| OpenAI API key | your key (optional) |
| Ollama base URL | http://host.docker.internal:11434 |
Model selection is per conversation thread — choose Claude, OpenAI, or a local Ollama model when starting each chat.
Local inference
Ollama runs on the host (not in Docker). On the MS-S1 MAX with its AMD Ryzen AI Max+ 395 and unified 128GB memory, containerising Ollama breaks GPU acceleration — the ROCm runtime can't detect unified memory across the Docker boundary, so inference falls back to CPU. Host Ollama picks up the Radeon 8060S automatically via ROCm.
Verify GPU is being used
ollama ps # shows active models and which device
If the device shows cpu instead of gpu, force the ROCm GFX version for RDNA 3.5:
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=11.0.2"
EOF
sudo systemctl daemon-reload && sudo systemctl restart ollama
Available models
| Model | Size | Use |
|---|---|---|
qwen2.5-coder:7b |
~5 GB | Fast coding assistance |
qwen2.5-coder:32b |
~20 GB | Strong coding, recommended default |
qwen2.5-coder:72b |
~45 GB | Best coding quality |
qwen2.5:72b |
~45 GB | General reasoning |
deepseek-r1:70b |
~43 GB | Chain-of-thought tasks |
Pull additional models any time:
ollama pull qwen2.5-coder:32b
Containers
docker compose ps # status
docker logs glitch-tunnel # tunnel connection log
docker compose restart glitch-tunnel # force tunnel reconnect
docker compose pull agent0 # update Agent Zero
docker compose up -d # start / restart all
docker ps should show two containers: agent0 and glitch-tunnel.
VPS setup (one-time, done by an admin)
These are prerequisites on the VPS side before bootstrap can connect.
Create restricted tunnel user:
useradd -m -s /sbin/nologin tunnel
mkdir -p /home/tunnel/.ssh && chmod 700 /home/tunnel/.ssh
touch /home/tunnel/.ssh/authorized_keys
chmod 600 /home/tunnel/.ssh/authorized_keys
chown -R tunnel:tunnel /home/tunnel/.ssh
Deploy nginx config — agent0.glitch.university server block lives in
gu_common/nginx/nginx.conf.template. Deploy gu_common after changes.
Create htpasswd file (first time only):
docker exec gnommo-nginx sh -c \
"apk add --no-cache apache2-utils && htpasswd -c /etc/nginx/.htpasswd admin"
Expand TLS certificate:
docker exec gnommo-certbot certbot certonly --webroot \
-w /var/www/certbot \
-d glitch.university \
-d ramanujan.glitch.university \
-d editor.glitch.university \
-d agent0.glitch.university \
--expand
Data locations
| Path | Contents | Backed up? |
|---|---|---|
./agent-zero-data/ |
Agent Zero state, chats, memory | Gitignored — back up separately |
./tunnel/ |
SSH tunnel credentials | Gitignored — back up separately |
~/gutasktool/.env |
API keys for gutask | Not in any repo — back up separately |
~/.ollama/ |
Pulled models | Can be re-pulled (models are large) |