Claude Code Agent Setup — IONOS VPS
VPS Specifications
| Property | Value |
|---|---|
| Provider | IONOS |
| IP | 217.154.82.162 |
| OS | AlmaLinux 9.7 |
| CPU | 6 vCPU |
| RAM | 7.4 GB |
| Disk | 239 GB |
| Cost | ~6€/month |
Users
| User | Purpose |
|---|---|
root | Initial setup only |
claude-admin | Docker, systemctl, UFW (scoped sudo) |
claude-runner | GitHub Actions runner, Claude Code execution |
Claude Code Installation
# As claude-runner user:
npm install -g @anthropic-ai/claude-code
claude --version # Verify
# Auth: use ANTHROPIC_API_KEY environment variable
# OAuth token synced via sync-claude-token.sh for interactive sessionsGitHub Actions Runner
Location: /opt/actions-runner
Service: systemd actions.runner.radieu-et-operational-platform.ionos.service
Labels:
self-hosted(default)ionos(custom, used by all cron workflows)
Runner management:
sudo /opt/actions-runner/svc.sh status
sudo /opt/actions-runner/svc.sh start
sudo /opt/actions-runner/svc.sh stopParallelism Limits
| Mode | Max Agents | Time Window (UTC) |
|---|---|---|
| daily-scan | 4 | 09:00–22:45 |
| nightly-reviews | 5 | 23:00–01:00 |
| nightly-tests | 0 (processes) | 01:00–04:00 |
| nightly-synthesis | 1 | 04:00–05:00 |
Rationale (7.4 GB RAM):
- Existing services: ~3.2 GB (OpenClaw ×3 + GitHub Actions runners + system)
- Per Claude Code agent: ~700 MB (process + git worktree I/O)
- Daily headroom: ~4.2 GB → max 4 agents + safety buffer
- Nightly (scanner paused): ~4.6 GB → max 5 agents
Skills Sync
Claude Code skills are in .claude/commands/ of the et-operational-platform repo.
Synced via git pull on the workspace directory:
# As claude-runner on IONOS VPS:
cd ~/workspace/et-oper && git pull origin dev
# Skills are in .claude/commands/ — git pull syncs them automaticallySkill sync is automatic when GitHub Actions checks out the repo at the start of each workflow run.
Environment Variables Required
The following must be set as GitHub Actions secrets (available to self-hosted, ionos runner):
| Variable | Source |
|---|---|
ANTHROPIC_API_KEY | Anthropic Console — rotate after any suspected leak |
GITHUB_TOKEN | Auto-provided by GitHub Actions |
TRELLO_API_KEY | Trello Power-Up settings |
TRELLO_TOKEN | Trello authorization |
NEXT_PUBLIC_SUPABASE_URL | Supabase project settings |
SUPABASE_SERVICE_ROLE_KEY | Supabase API settings |
DISCORD_WEBHOOK_URL | Discord Server Settings → Integrations |
Availability Monitoring
Server availability is tracked in Supabase (server_schedules, server_mode_status tables).
Before scheduling any agent work, check:
SELECT mode, max_agents
FROM server_schedules
WHERE server_name = 'ionos'
AND window_start <= NOW()::TIME
AND window_end > NOW()::TIME;