Claude Code Agent Setup — IONOS VPS

VPS Specifications

PropertyValue
ProviderIONOS
IP217.154.82.162
OSAlmaLinux 9.7
CPU6 vCPU
RAM7.4 GB
Disk239 GB
Cost~6€/month

Users

UserPurpose
rootInitial setup only
claude-adminDocker, systemctl, UFW (scoped sudo)
claude-runnerGitHub 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 sessions

GitHub 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 stop

Parallelism Limits

ModeMax AgentsTime Window (UTC)
daily-scan409:00–22:45
nightly-reviews523:00–01:00
nightly-tests0 (processes)01:00–04:00
nightly-synthesis104: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 automatically

Skill 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):

VariableSource
ANTHROPIC_API_KEYAnthropic Console — rotate after any suspected leak
GITHUB_TOKENAuto-provided by GitHub Actions
TRELLO_API_KEYTrello Power-Up settings
TRELLO_TOKENTrello authorization
NEXT_PUBLIC_SUPABASE_URLSupabase project settings
SUPABASE_SERVICE_ROLE_KEYSupabase API settings
DISCORD_WEBHOOK_URLDiscord 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;