Sets Hermes default model provider to MiniMax (MiniMax-M3) using MINIMAX_API_KEY from shared.env. Updates PaperClip OpenCode providers with MiniMax baseURL and additional models (MiniMax-M3, MiniMax-Text-01).
PaperClip
PaperClip ist eine Plattform zur Orchestrierung von KI-Agenten, die über Docker und Caddy betrieben wird.
Dieses Repository enthält die Infrastruktur, um PaperClip inklusive Caddy (Reverse-Proxy) und einer Postgres-Datenbank auf einem neuen Server auszurollen.
Architektur
- Reverse Proxy: Caddy
- Datenbank: Postgres 17
- Anwendung: PaperClip (via
ghcr.io/paperclipai/paperclip:latest) - Agent-Runtime: Hermes Agent (via
nousresearch/hermes-agent:latest) — Dashboard:hermes.paperclip.orfel.de
Alle Volumes werden als lokale Mounts unter /opt/PaperClip-Data/ auf dem Host abgelegt.
Installation & Deployment
Um das System auf einem neuen Server (z. B. Hetzner CX23) aufzusetzen, klone das Repository nach /opt/PaperClip und führe das Master-Deployment-Skript als root aus.
# Repository klonen
sudo mkdir -p /opt/PaperClip
sudo git clone https://git.orfel.de/Jannik/PaperClip.git /opt/PaperClip
# Setup & Deploy
sudo bash /opt/PaperClip/deploy_script.sh
Das Skript ist idempotent und kümmert sich um:
- Die Installation von Docker, age und fail2ban.
- Das Einrichten des Swaps und der Cronjobs (für automatische Updates).
- Das Entschlüsseln der
.env-Dateien mit age. - Das Starten von Caddy, Postgres und PaperClip.
Umgebungsvariablen hinzufügen oder ändern
Es gibt zwei Arten von .env-Dateien:
| Datei | Inhalt | Gilt für |
|---|---|---|
services/shared.env(.age) |
API Keys (OpenRouter, Mistral, etc.) | Alle Services |
services/<name>/.env(.age) |
Service-spezifische Secrets (DB-Passwort, Auth-Secret) | Nur dieser Service |
Da .env-Dateien per .gitignore ausgeschlossen sind, wird stattdessen jeweils die .age-Variante ins Repository gepusht. Nach Änderungen neu verschlüsseln:
# Geteilte API Keys (alle Services)
age -r <AGE_PUBLIC_KEY> -o services/shared.env.age services/shared.env
# Service-spezifisch (z. B. PaperClip)
age -r <AGE_PUBLIC_KEY> -o services/paperclip/.env.age services/paperclip/.env
LLM Konfiguration & Onboarding Workaround
Paperclip ist in seiner Benutzeroberfläche bei der Erstinstallation stark auf offizielle OpenAI- oder Anthropic (Claude)-Accounts fokussiert. Wenn du stattdessen alternative Provider wie OpenRouter oder Mistral nutzen möchtest, greift ein Workaround im Deployment-Prozess:
-
API Keys in der
.envhinterlegen: Trage deine gewünschten API-Keys in dieservices/paperclip/.envein (z. B.OPENROUTER_API_KEY=sk-or-v1-...). -
Automatischer Patch durch das Deploy-Skript: Das
deploy_script.sherkennt automatisch, wenn einOPENROUTER_API_KEY(oderMISTRAL_API_KEY) vorhanden ist, aber kein nativer OpenAI/Claude-Key. Es führt dann folgende Schritte aus:- Setzt
OPENAI_API_KEYauf deinen OpenRouter/Mistral-Key. - Setzt
OPENAI_BASE_URLauf die entsprechende API-URL (z. B.https://openrouter.ai/api/v1). - WICHTIG: Das Skript patcht den Paperclip-Container (die Datei
ai-connections.js) direkt nach dem Start. Dadurch wird sichergestellt, dass die strenge UI-Validierung beim Onboarding deine alternative URL (OPENAI_BASE_URL) verwendet und nicht hartcodiert bei OpenAI anfragt.
- Setzt
-
Das Onboarding in der UI abschließen:
- Sobald du deinen CEO-Account über den Invite-Link erstellst, landest du im Schritt "Connect a model".
- Klicke hier auf die Schaltfläche OpenAI (API).
- Füge exakt deinen OpenRouter- oder Mistral-Key in das Textfeld ein und klicke auf "Connect".
- Paperclip testet den Key nun erfolgreich gegen deinen Provider und lässt dich ins Dashboard!
Hermes Agent
Hermes Agent ist ein Open-Source-KI-Agent von Nous Research, der als eigenständiger Docker-Service läuft und von PaperClip als "Mitarbeiter" eingestellt werden kann.
Architektur
- Container:
hermes(Image:nousresearch/hermes-agent:latest) - Netz: Im selben
paperclip-net - API Gateway:
https://hermes.paperclip.orfel.de(Port 8642 via Caddy HTTPS) - Web-Dashboard:
https://hermes-ui.paperclip.orfel.de(Port 9119 via Caddy HTTPS) - Daten:
/opt/PaperClip-Data/hermes/auf dem Host
Hermes in PaperClip einbinden
Das Setup-Unterskript services/hermes/setup_hermes.sh wird automatisch beim Deployment ausgeführt und richtet die hermes CLI vollständig im PaperClip-Container ein (pip install hermes-agent).
In PaperClip kann Hermes auf zwei Arten eingestellt werden:
-
hermes_local(Standard & empfohlen):- Im PaperClip-Dashboard → "Hire Agent"
- Adapter:
hermes_local - PaperClip ruft die CLI
hermesdirekt im Container auf. API Keys werden automatisch ausservices/shared.envbereitgestellt.
-
hermes_gateway(Standalone):- Adapter:
Hermes Gateway - Gateway-URL:
http://hermes:8642(intern) oderhttps://hermes.paperclip.orfel.de
- Adapter:
Manuelles Setup
Falls Hermes manuell neu eingerichtet werden soll:
sudo bash /opt/PaperClip/services/hermes/setup_hermes.sh
Weitere Adapter einbinden
1. OpenCode
PaperClip unterstützt OpenCode nativ mit OpenAI-kompatiblen Endpunkten. In services/paperclip/docker-compose.yml ist OpenRouter bereits vorkonfiguriert:
- Im PaperClip-Dashboard → "Hire Agent"
- Adapter wählen:
OpenCode - Model eintragen, z. B.:
openrouter/anthropic/claude-sonnet-4-5openrouter/deepseek/deepseek-r1openrouter/google/gemini-2.5-proopenrouter/openai/gpt-4o
2. Gemini CLI
Der GEMINI_API_KEY ist in services/shared.env hinterlegt und wird automatisch in den PaperClip-Container geladen:
- Im PaperClip-Dashboard → "Hire Agent"
- Adapter wählen:
Gemini CLI - Modell / Parameter konfigurieren und Agent starten.
Umgebungsvariablen ändern & verschlüsseln
Alle geteilten Keys liegen in services/shared.env. Nach Änderungen neu verschlüsseln:
age -r age1sa3q5qxl5dylld7v839m9lkv5h7l457wq4h40pt7kfmcfhcqkfjqspdjpn -o services/shared.env.age services/shared.env