IDENTITY

title: "TICKET_051: Install Paperclip on Hetzner"
type: ticket
subtype: execution
purpose: "Deploy Paperclip agent orchestration platform on Hetzner as part of the Bus MCP Server stack."

GOVERNANCE

status: ready
priority: P0
sprint: S001_base_and_mvp1
assignee: "Claude Code CLI (Hetzner terminal)"
estimated_hours: 1
depends_on: [TICKET_050]
blocks: [TICKET_049]
last_updated: "2026-03-21"

TICKET_051: Install Paperclip on Hetzner

Objective

Deploy Paperclip on Hetzner CPX32 as part of the Docker Compose stack. Paperclip is the orchestration system of record — it manages agent tasks, heartbeats, approvals, and audit logging.

Context

Execution Steps

Step 1: Verify Paperclip Docker Image

ssh root@89.167.96.154
docker pull paperclipai/paperclip:latest
# If image doesn't exist, check docs for correct image name:
# https://docs.paperclip.dev/self-hosting

Step 2: Paperclip is Part of docker-compose.yml

Paperclip is already defined in TICKET_049's docker-compose.yml:

  paperclip:
    image: paperclipai/paperclip:latest
    environment:
      PAPERCLIP_DEPLOYMENT_MODE: authenticated
      PAPERCLIP_PUBLIC_URL: https://paperclip.struxio.ai
    ports:
      - "127.0.0.1:3100:3100"

Step 3: Verify Paperclip Startup

docker compose logs paperclip
curl http://localhost:3100/health  # or equivalent health endpoint

Step 4: Create Company + API Key

# Access Paperclip UI at https://paperclip.struxio.ai
# Create company: STRUXIO
# Create API key for Bus MCP Server (service token)
# Save the token — it becomes BUS_PAPERCLIP_TOKEN in .env

Step 5: Create Initial Agents

Register agents in Paperclip that map to our brain/worker topology:

Step 6: Verify Paperclip API

# Test with the API key created in Step 4
curl -H "Authorization: Bearer <PAPERCLIP_TOKEN>" \
  https://paperclip.struxio.ai/api/companies/<COMPANY_ID>/issues

Acceptance Criteria

Notes

Rollback

docker compose stop paperclip
# Bus messaging continues to work without Paperclip

STRUXIO.ai // Confidential & Proprietary // © 2026