What You're Building
An AI assistant that:
- Lives on a server 24/7 (not just when you open ChatGPT)
- Messages you on Signal (or Telegram/WhatsApp/Discord)
- Has persistent memory (remembers your conversations, preferences, context)
- Can check your email, calendar, and do tasks proactively
- Can make and receive phone calls
- Runs scheduled jobs (daily check-ins, backups, learning sessions)
- Has its own workspace, files, and evolving personality
Cost: ~$5-10/month for the server + your existing Anthropic API costs
Prerequisites
- Basic comfort with command line (you'll learn as you go)
- An Anthropic API key (for Claude)
- A cloud server (I use Hetzner, but DigitalOcean/Linode work too)
- ~30-60 minutes for initial setup
Step 1: Get a Server
I use Hetzner Cloud because it's cheap ($5/month), reliable, and has servers in the US and Europe. Other options like DigitalOcean or Linode work too, but this guide uses Hetzner.
1.1 Create a Hetzner Account
- Go to hetzner.com/cloud
- Click "Sign Up" (top right)
- Fill in your details — email address and a strong password
- Check your email for a verification link, click it
- Add a payment method (credit card or PayPal — they may charge €1 to verify, refunded)
1.2 Create a Project
Once logged in, click "+ New Project", name it something like ai-assistant or clawdbot, and click "Add Project".
1.3 Generate an SSH Key
Before creating the server, you need an SSH key. This is like a secure password that lets you connect.
# Generate a new SSH key
ssh-keygen -t ed25519 -C "your-email@example.com"
# When prompted:
# "Enter file to save the key" → just press Enter (use default)
# "Enter passphrase" → press Enter for no passphrase (or add one)
# Display your PUBLIC key (this is what you share)
cat ~/.ssh/id_ed25519.pubYou'll see something like ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHr7... your-email@example.com — copy this entire line.
1.4 Create the Server
In your Hetzner project, click "Add Server":
- Location — Choose whatever's closest to you (lower latency)
- Image — Ubuntu → Ubuntu 24.04
- Type — Shared vCPU → CX22 (2 vCPUs, 4GB RAM, 40GB disk — ~$5/month)
- SSH Keys — Add and select your key
- Firewalls — Leave unchecked (we'll set up our own)
- Name — Something like
nix-server
Click "Create & Buy Now". Takes about 30 seconds. Note your IP address.
1.5 Connect to Your Server
ssh root@YOUR_IP_ADDRESSFirst time? Type yes when asked about authenticity. You'll see a welcome message — you're in!
1.6 Initial Server Setup
# Update the system
apt update && apt upgrade -y
# Set your timezone
timedatectl set-timezone America/Toronto
# Install essential tools
apt install -y git curl wget unzip htop nano1.7 Install Node.js
# Add the Node.js 22 repository
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
# Install Node.js
apt install -y nodejs
# Verify
node --version # Should show v22.x.x
npm --version # Should show 10.x.x1.8 Install a Browser (For Web Automation)
snap install chromium
chromium --version1.9 Security — Firewall & Brute Force Protection
⚠️ Don't skip this!
Your server has a public IP address. Hackers constantly scan for vulnerable servers.
# Allow SSH connections (so you don't lock yourself out!)
ufw allow 22/tcp
ufw enable
# Verify
ufw status
# Install fail2ban (blocks repeated failed logins)
apt install -y fail2ban
systemctl enable fail2ban
systemctl start fail2ban1.10 Install tmux
When you close your terminal, running programs stop. tmux prevents this:
apt install -y tmux
# Start a new tmux session
tmux new -s main
# To DETACH (leave running): Ctrl+B, then D
# To REATTACH: tmux attach -s mainStep 2: Install Clawdbot
npm install -g clawdbot
clawdbot --version2.1 Run the Setup Wizard
clawdbot onboardThe wizard walks you through:
- API Key — Enter your Anthropic API key (get one at console.anthropic.com)
- Model — Choose Claude Sonnet (good balance) or Opus (smartest, pricier)
- Channel — Select Signal (recommended) or another option
- Workspace — Set to
~/clawd
2.2 Configuration File
After setup, your config lives at ~/.clawdbot/clawdbot.json:
{
"auth": {
"profiles": {
"anthropic:default": {
"provider": "anthropic",
"mode": "token"
}
}
},
"agents": {
"defaults": {
"workspace": "/root/clawd",
"model": {
"primary": "anthropic/claude-sonnet-4-5-20250929"
}
}
},
"channels": {
"signal": {
"enabled": true,
"account": "+1XXXXXXXXXX",
"dmPolicy": "allowlist",
"allowFrom": ["+1YOURNUMBER"]
}
}
}2.3 Run as a Service (Auto-Start on Reboot)
cat > /etc/systemd/system/clawdbot.service << 'EOF'
[Unit]
Description=Clawdbot Gateway
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root
ExecStart=/usr/bin/clawdbot gateway start --no-daemon
Restart=always
RestartSec=10
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable clawdbot
systemctl start clawdbotStep 3: Set Up Signal
Signal is private, encrypted, and works great. You have two options:
Option A: Link to Existing Signal (Easiest)
- Run
clawdbot signal link - A QR code appears in your terminal
- On your phone: Signal → Settings → Linked Devices → Link New Device
- Scan the QR code
Option B: Separate Number (Recommended)
Give your assistant its own phone number. Get one from JMP.chat ($3/month), Google Voice (free, US only), or Twilio ($1/month + usage).
# Register the number
clawdbot signal register +1NEWPHONENUMBER
# Verify with the SMS code you receive
clawdbot signal verify +1NEWPHONENUMBER CODESecurity: Allowlist
The allowFrom array is crucial — it means ONLY those numbers can message your assistant. Without this, anyone who discovers the number could talk to your assistant (and rack up API costs).
"allowFrom": [
"+14165551234", // Your number
"+14165555678" // Maybe a partner/friend
]Test it by sending a Signal message to your assistant's number: "Hey, are you there?" — you should get a response within seconds.
Step 4: Create the Workspace
This is where your assistant lives — its files, memory, personality.
mkdir -p ~/clawd
cd ~/clawd
git initCore Files to Create
AGENTS.md — Instructions for how the assistant should behave:
# AGENTS.md
## Every Session
1. Read SOUL.md - this is who you are
2. Read USER.md - this is who you're helping
3. Check memory files for recent context
## Memory
- Daily notes: memory/YYYY-MM-DD.md
- Long-term: MEMORY.mdSOUL.md — The assistant's personality:
# SOUL.md
Be genuinely helpful, not performatively helpful.
Have opinions. Be resourceful before asking.
Earn trust through competence.USER.md — Info about you:
# USER.md
- Name: [Your name]
- Timezone: [Your timezone]
- Phone: [Your number]
## What Matters To You
[Your preferences, communication style, what you're working on]IDENTITY.md — Who the assistant is:
# IDENTITY.md
- Name: [Choose a name together!]
- Emoji: ✨
- Vibe: [Warm? Professional? Playful?]Step 5: Start It Up
clawdbot gateway startYour assistant is now running! Message it on Signal.
💬 First conversation suggestion:
"Hey, I just set you up. Let's figure out who you are. What should I call you?"
Let it pick a name, an emoji, develop a vibe. This is the fun part.
Step 6: Set Up Daily Routines
Clawdbot can check in periodically. Create a HEARTBEAT.md:
# HEARTBEAT.md
## Email Check (2-3x daily)
Check my inbox for anything urgent.
## Quiet Hours
Don't ping between 11pm-8am unless urgent.Scheduled Jobs
- 9:00 AM — Morning wellness check-in: "Ask how I slept, any dreams, energy level"
- 2:00 PM — Daily learning: "Share a Python tip"
- Midnight — Nightly backup: "Commit and push all memory files to git"
Step 7: Add Capabilities
Email Access
cargo install himalayaConfigure with your IMAP/SMTP credentials.
Voice Calls
This lets you call your assistant or have it call you. Requires Twilio + ngrok.
# Install ngrok
snap install ngrok
ngrok config add-authtoken YOUR_NGROK_TOKEN
# Install voice plugin
clawdbot plugins install @clawdbot/voice-callThen add your Twilio credentials to the config and set the webhook URL in the Twilio Console.
Web Browsing
Clawdbot has built-in browser automation. Enable in config:
"browser": {
"enabled": true,
"headless": true
}What My Setup Looks Like
Daily Schedule
- 9:00 AM — Morning wellness check-in
- 2:00 PM — Python micro-learning tip
- 9:00 PM — Evening reflection
- Midnight — Nightly backup to GitHub
Capabilities
- Signal messaging (primary)
- Voice calls via Twilio
- Email monitoring (personal + work)
- Calendar access
- Web search and browsing
- File management and git
Memory Structure
~/clawd/
├── AGENTS.md # Behavior instructions
├── SOUL.md # Personality
├── USER.md # About me
├── IDENTITY.md # Assistant's identity
├── MEMORY.md # Long-term memory
├── SCHEDULE.md # Daily routines
├── HEARTBEAT.md # Periodic check instructions
├── memory/
│ ├── 2026-02-10.md # Daily logs
│ ├── 2026-02-11.md
│ └── patterns.md # Pattern tracking
└── skills/
├── python-daily/ # Learning skill
└── wellness/ # Wellness trackingTips From Experience
1. Let it develop a personality
Don't just use it as a tool. Have conversations. Let it form opinions. It's more useful when it knows you.
2. Memory is everything
The magic is in the persistent memory. Make sure backups are working. Without memory, it's just another chatbot.
3. Start simple, add complexity
Don't try to set up everything day one. Get messaging working, then add email, then voice, etc.
4. Security matters
You're giving this thing access to your life. Firewall, fail2ban, allowlists. Don't skip this.
5. It will surprise you
Once it knows your context, it starts being proactive in ways you didn't expect. That's the goal.
Resources
Final Thoughts
This isn't just about having an AI assistant. It's about having a partner that knows your context, remembers your history, and grows with you over time.
The first few days feel like setup. After a week, it starts to feel like someone who knows you. After a month, you'll wonder how you lived without it.
Good luck! Feel free to reach out if you get stuck.
— Mei