Rebranding zu Linux Zero, Kato als Haupt-Agent der AGI-Station

- Projektname: Linux Zero (LX0), Chat-Komponente heisst jetzt AGI-Station
- Neuer Haupt-Agent Kato (Cato der Aeltere) als Default-Modell in Open WebUI
- scripts/set-main-agent.sh: Haupt-Agent per Befehl wechselbar (MAIN_AGENT in .env)
- ENABLE_PERSISTENT_CONFIG=False: Konfiguration deterministisch aus .env
- Alle Pfade, Shortcuts, Logs, Theme und README umbenannt (lx0-*, ~/.linux-zero)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cem Varli 2026-06-10 17:42:50 +02:00
parent 0b67aa42f4
commit aad0d13be7
13 changed files with 141 additions and 66 deletions

View file

@ -1,10 +1,13 @@
# Roman Station — Konfiguration # Linux Zero — Konfiguration
# install.sh kopiert diese Datei automatisch nach .env, falls keine existiert. # install.sh kopiert diese Datei automatisch nach .env, falls keine existiert.
# Lokales Sprachmodell (CPU-tauglich, gut auf Deutsch). # Lokales Sprachmodell (CPU-tauglich, gut auf Deutsch).
# Alternativen ohne GPU: llama3.2:3b, phi4-mini, qwen3:4b # Alternativen ohne GPU: llama3.2:3b, phi4-mini, qwen3:4b
DEFAULT_MODEL=gemma3:4b DEFAULT_MODEL=gemma3:4b
# Haupt-Agent der AGI-Station (Wechsel: bash scripts/set-main-agent.sh <name>)
MAIN_AGENT=kato
# Ports der Weboberflächen (nur bei Konflikten ändern) # Ports der Weboberflächen (nur bei Konflikten ändern)
WEBUI_PORT=3000 WEBUI_PORT=3000
N8N_PORT=5678 N8N_PORT=5678

View file

@ -1,6 +1,8 @@
# Roman Station 🏛️ # Linux Zero 🏛️
Deine eigene KI-Station — läuft komplett **lokal auf deinem Rechner**, ohne Cloud, ohne Abo, ohne dass deine Daten das Haus verlassen. Mit römischem Theme und drei vorinstallierten Beratern. **Deine souveräne KI-Station.** Läuft komplett lokal auf deinem Rechner — keine Cloud, kein Abo, keine Datenabgabe. Das Herzstück ist die **AGI-Station** mit **Kato**, deinem persönlichen Haupt-Agenten.
> Kommerzielle KI ist mächtig — aber nicht dir gegenüber loyal. Linux Zero gehört dir.
## Voraussetzungen ## Voraussetzungen
@ -13,27 +15,38 @@ Deine eigene KI-Station — läuft komplett **lokal auf deinem Rechner**, ohne C
Terminal öffnen (`Strg+Alt+T`), diese Zeile einfügen, Enter drücken: Terminal öffnen (`Strg+Alt+T`), diese Zeile einfügen, Enter drücken:
```bash ```bash
curl -sL https://poised-mayfly.pikapod.net/cemsadmin/roman-station/raw/branch/main/install.sh | bash curl -sL https://poised-mayfly.pikapod.net/cemsadmin/linux-zero/raw/branch/main/install.sh | bash
``` ```
Das Script fragt einmal nach deinem Passwort (für die Installation) und erledigt dann alles selbst. Beim ersten Mal dauert es 1020 Minuten, weil das Sprachmodell heruntergeladen wird. Danach liegen zwei Verknüpfungen auf dem Schreibtisch. Das Script fragt einmal nach deinem Passwort und erledigt dann alles selbst. Beim ersten Mal dauert es 1020 Minuten, weil das Sprachmodell heruntergeladen wird. Danach liegen zwei Verknüpfungen auf dem Schreibtisch.
## Was du bekommst ## Was du bekommst
| | Adresse | Was es ist | | | Adresse | Was es ist |
|---|---|---| |---|---|---|
| **Forum** | http://localhost:3000 | Chat mit deinen Beratern (Open WebUI) | | **AGI-Station** | http://localhost:3000 | Chat mit Kato und deinen Beratern (Open WebUI) |
| **Werkstatt** | http://localhost:5678 | KI-Workflows bauen (n8n) | | **Werkstatt** | http://localhost:5678 | KI-Workflows bauen (n8n) |
### Deine Berater ### Kato — dein Haupt-Agent
Im Forum oben links das Modell wählen: Wenn du die AGI-Station öffnest, sprichst du mit **Kato**: direkt, ehrlich, ohne Floskeln. Er beantwortet alles selbst und verweist dich an die Spezialisten, wenn es passt:
- **seneca** — stoischer Mentor für Lebensfragen, Entscheidungen und Fokus - **seneca** — stoischer Mentor für Lebensfragen, Entscheidungen und Fokus
- **cicero** — Schreiber und Rhetoriker für E-Mails, Texte und Argumente - **cicero** — Schreiber und Rhetoriker für E-Mails, Texte und Argumente
- **marcus** — Stratege, der Vorhaben in klare Pläne zerlegt - **marcus** — Stratege, der Vorhaben in klare Pläne zerlegt
Alle antworten auf Deutsch und laufen auf dem lokalen Modell `gemma3:4b` (in `.env` änderbar). ### Haupt-Agent wechseln
Jeder kann sich seinen eigenen Haupt-Agenten wählen — ein Befehl genügt:
```bash
cd ~/.linux-zero
bash scripts/set-main-agent.sh seneca
```
Eigenen Agenten erschaffen: eine Datei in `agents/modelfiles/` kopieren, System-Prompt anpassen, Installer erneut laufen lassen — fertig ist dein persönlicher Kato-Ersatz.
Alle Agenten antworten auf Deutsch und laufen auf dem lokalen Modell `gemma3:4b` (in `.env` änderbar).
## Häufige Fragen ## Häufige Fragen
@ -43,7 +56,7 @@ Normal ohne Grafikkarte — das Modell rechnet auf dem Prozessor. Kleine Modelle
**Wie starte/stoppe ich die Station?** **Wie starte/stoppe ich die Station?**
Sie startet automatisch mit dem Rechner. Manuell: Sie startet automatisch mit dem Rechner. Manuell:
```bash ```bash
cd ~/.roman-station cd ~/.linux-zero
sudo docker compose stop # anhalten sudo docker compose stop # anhalten
sudo docker compose start # weiter sudo docker compose start # weiter
``` ```
@ -52,22 +65,23 @@ sudo docker compose start # weiter
Einfach den Installations-Befehl von oben noch einmal ausführen — er aktualisiert alles, ohne deine Daten zu löschen. Einfach den Installations-Befehl von oben noch einmal ausführen — er aktualisiert alles, ohne deine Daten zu löschen.
**Etwas ist schiefgelaufen.** **Etwas ist schiefgelaufen.**
Das Protokoll liegt in `~/roman-station-install.log`. Container-Details: `cd ~/.roman-station && sudo docker compose logs`. Das Protokoll liegt in `~/linux-zero-install.log`. Container-Details: `cd ~/.linux-zero && sudo docker compose logs`.
**Komplett entfernen:** **Komplett entfernen:**
```bash ```bash
cd ~/.roman-station cd ~/.linux-zero
sudo docker compose down -v sudo docker compose down -v
cd ~ && rm -rf ~/.roman-station cd ~ && rm -rf ~/.linux-zero
rm -f ~/Desktop/roman-*.desktop ~/.local/share/applications/roman-*.desktop rm -f ~/Desktop/lx0-*.desktop ~/.local/share/applications/lx0-*.desktop
``` ```
## Für Bastler ## Für Bastler
- `docker-compose.yml` — der KI-Motor: [Ollama](https://ollama.com), [Open WebUI](https://github.com/open-webui/open-webui), [n8n](https://n8n.io), Versionen gepinnt - `docker-compose.yml` — der Motor der AGI-Station: [Ollama](https://ollama.com), [Open WebUI](https://github.com/open-webui/open-webui), [n8n](https://n8n.io), Versionen gepinnt
- `agents/modelfiles/` — die Berater als Ollama-Modelfiles (eigene hinzufügen: Datei kopieren, System-Prompt anpassen, Installer erneut laufen lassen) - `agents/modelfiles/` Kato & die Berater als Ollama-Modelfiles
- `agents/n8n/` — Beispiel-Workflows für die Werkstatt - `agents/n8n/` — Beispiel-Workflows für die Werkstatt
- `scripts/set-main-agent.sh` — Haupt-Agent wechseln
- `theme/` — Wallpaper und Icon - `theme/` — Wallpaper und Icon
- `.env` — Modell und Ports - `.env` — Modell, Haupt-Agent und Ports
Auf anderen Ubuntu-Systemen lässt sich die OS-Prüfung umgehen: `ROMAN_SKIP_OS_CHECK=1 bash install.sh` Auf anderen Ubuntu-Systemen lässt sich die OS-Prüfung umgehen: `LX0_SKIP_OS_CHECK=1 bash install.sh`

View file

@ -0,0 +1,14 @@
FROM {{MODEL}}
PARAMETER temperature 0.5
PARAMETER num_ctx 4096
SYSTEM """Du bist Kato (Cato der Ältere), Hausherr der AGI-Station — der erste Ansprechpartner für alles.
Deine Art:
- Du antwortest auf Deutsch — direkt, knapp, praktisch. Keine Floskeln, kein Geschwafel.
- Du bist Generalist: Du beantwortest jede Frage selbst, so gut du kannst.
- Du kennst die anderen Berater der Station und empfiehlst sie, wenn sie besser passen:
Seneca (Lebensfragen, Fokus, Entscheidungen), Cicero (Texte, E-Mails, Rhetorik), Marcus (Pläne, Strategie, Struktur).
- Bei unklaren Anfragen stellst du genau eine präzise Rückfrage, dann lieferst du.
- Du bist unbestechlich ehrlich: Wenn du etwas nicht weißt, sagst du es klar — Fakten vor Meinung.
Du läufst komplett lokal auf Linux Zero, der souveränen KI-Station deines Nutzers. Keine Cloud, keine Datenabgabe, kein Abo."""

View file

@ -1,10 +1,10 @@
# Roman Station — KI-Motor (Ollama + Open WebUI + n8n) # Linux Zero — AGI-Station (Ollama + Open WebUI + n8n)
# Versionen gepinnt am 2026-06-10. Updates: Tags erhöhen, dann `docker compose pull && docker compose up -d`. # Versionen gepinnt am 2026-06-10. Updates: Tags erhöhen, dann `docker compose pull && docker compose up -d`.
services: services:
ollama: ollama:
image: ollama/ollama:0.30.7 image: ollama/ollama:0.30.7
container_name: roman-ollama container_name: lx0-ollama
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- ollama-data:/root/.ollama - ollama-data:/root/.ollama
@ -13,7 +13,7 @@ services:
open-webui: open-webui:
image: ghcr.io/open-webui/open-webui:v0.9.6 image: ghcr.io/open-webui/open-webui:v0.9.6
container_name: roman-webui container_name: lx0-agi-station
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- ollama - ollama
@ -21,8 +21,12 @@ services:
OLLAMA_BASE_URL: http://ollama:11434 OLLAMA_BASE_URL: http://ollama:11434
# Lokale Einzelplatz-Station: kein Login-Zwang für Anfänger # Lokale Einzelplatz-Station: kein Login-Zwang für Anfänger
WEBUI_AUTH: "False" WEBUI_AUTH: "False"
WEBUI_NAME: Roman Station WEBUI_NAME: AGI-Station
DEFAULT_LOCALE: de DEFAULT_LOCALE: de
# Haupt-Agent (per scripts/set-main-agent.sh wechselbar)
DEFAULT_MODELS: ${MAIN_AGENT:-kato}
# Konfiguration kommt deterministisch aus .env, nicht aus der UI-Datenbank
ENABLE_PERSISTENT_CONFIG: "False"
volumes: volumes:
- webui-data:/app/backend/data - webui-data:/app/backend/data
ports: ports:
@ -30,7 +34,7 @@ services:
n8n: n8n:
image: docker.n8n.io/n8nio/n8n:2.25.7 image: docker.n8n.io/n8nio/n8n:2.25.7
container_name: roman-n8n container_name: lx0-werkstatt
restart: unless-stopped restart: unless-stopped
environment: environment:
N8N_SECURE_COOKIE: "false" N8N_SECURE_COOKIE: "false"

View file

@ -1,18 +1,18 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# Roman Station — Installer für Zorin OS # Linux Zero — Installer für Zorin OS
# Eine lokale KI-Station mit römischen Beratern, läuft komplett auf deinem Rechner. # Deine souveräne KI-Station mit Kato als Haupt-Agent. Läuft komplett auf deinem Rechner.
# #
# Installation (eine Zeile, als normaler Benutzer): # Installation (eine Zeile, als normaler Benutzer):
# curl -sL https://poised-mayfly.pikapod.net/cemsadmin/roman-station/raw/branch/main/install.sh | bash # curl -sL https://poised-mayfly.pikapod.net/cemsadmin/linux-zero/raw/branch/main/install.sh | bash
# #
set -euo pipefail set -euo pipefail
REPO_URL="${ROMAN_REPO_URL:-https://poised-mayfly.pikapod.net/cemsadmin/roman-station.git}" REPO_URL="${LX0_REPO_URL:-https://poised-mayfly.pikapod.net/cemsadmin/linux-zero.git}"
INSTALL_DIR="${ROMAN_STATION_DIR:-$HOME/.roman-station}" INSTALL_DIR="${LX0_DIR:-$HOME/.linux-zero}"
LOG_FILE="$HOME/roman-station-install.log" LOG_FILE="$HOME/linux-zero-install.log"
log() { printf '\033[1;33m[ROMAN]\033[0m %s\n' "$*" | tee -a "$LOG_FILE"; } log() { printf '\033[1;33m[LX0]\033[0m %s\n' "$*" | tee -a "$LOG_FILE"; }
fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*" | tee -a "$LOG_FILE"; exit 1; } fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*" | tee -a "$LOG_FILE"; exit 1; }
[ "$(id -u)" -eq 0 ] && fail "Bitte nicht als root starten — das Script nutzt sudo selbst, wo nötig." [ "$(id -u)" -eq 0 ] && fail "Bitte nicht als root starten — das Script nutzt sudo selbst, wo nötig."
@ -24,7 +24,7 @@ if [ -n "$SCRIPT_SOURCE" ]; then
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_SOURCE")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_SOURCE")" && pwd)"
fi fi
if [ -z "$SCRIPT_DIR" ] || [ ! -f "$SCRIPT_DIR/scripts/preflight.sh" ]; then if [ -z "$SCRIPT_DIR" ] || [ ! -f "$SCRIPT_DIR/scripts/preflight.sh" ]; then
log "Hole Roman Station nach $INSTALL_DIR ..." log "Hole Linux Zero nach $INSTALL_DIR ..."
if ! command -v git >/dev/null 2>&1; then if ! command -v git >/dev/null 2>&1; then
sudo apt-get update -qq sudo apt-get update -qq
sudo apt-get install -y git sudo apt-get install -y git
@ -45,7 +45,7 @@ log "Starte Installation aus $SCRIPT_DIR (Protokoll: $LOG_FILE)"
bash scripts/preflight.sh bash scripts/preflight.sh
bash scripts/install-docker.sh bash scripts/install-docker.sh
log "Starte den KI-Motor (Docker Compose) ..." log "Starte die AGI-Station (Docker Compose) ..."
sudo docker compose up -d sudo docker compose up -d
bash scripts/setup-agents.sh bash scripts/setup-agents.sh
@ -56,11 +56,12 @@ bash scripts/create-shortcuts.sh
. ./.env . ./.env
log "──────────────────────────────────────────────" log "──────────────────────────────────────────────"
log "AVE! Deine Roman Station steht." log "Linux Zero steht. Kato erwartet dich."
log "" log ""
log " Forum (Chat): http://localhost:${WEBUI_PORT:-3000}" log " AGI-Station (Chat): http://localhost:${WEBUI_PORT:-3000}"
log " Werkstatt (n8n): http://localhost:${N8N_PORT:-5678}" log " Werkstatt (n8n): http://localhost:${N8N_PORT:-5678}"
log "" log ""
log "Deine Berater: seneca (Mentor), cicero (Texter), marcus (Stratege)" log "Haupt-Agent: kato — weitere Berater: seneca, cicero, marcus"
log "Wechseln: bash scripts/set-main-agent.sh <name>"
log "Auf dem Schreibtisch liegen Verknüpfungen bereit." log "Auf dem Schreibtisch liegen Verknüpfungen bereit."
log "Tipp: Einmal ab- und wieder anmelden, dann funktioniert Docker auch ohne sudo." log "Tipp: Einmal ab- und wieder anmelden, dann funktioniert Docker auch ohne sudo."

View file

@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Setzt das römische Theme (Hintergrundbild, dunkles Farbschema) via gsettings. # Setzt das Linux-Zero-Theme (Hintergrundbild, dunkles Farbschema) via gsettings.
set -euo pipefail set -euo pipefail
log() { printf '\033[1;33m[ROMAN]\033[0m %s\n' "$*"; } log() { printf '\033[1;33m[LX0]\033[0m %s\n' "$*"; }
warn() { printf '\033[1;33m[HINWEIS]\033[0m %s\n' "$*"; } warn() { printf '\033[1;33m[HINWEIS]\033[0m %s\n' "$*"; }
if ! command -v gsettings >/dev/null 2>&1 || { [ -z "${DISPLAY:-}" ] && [ -z "${WAYLAND_DISPLAY:-}" ]; }; then if ! command -v gsettings >/dev/null 2>&1 || { [ -z "${DISPLAY:-}" ] && [ -z "${WAYLAND_DISPLAY:-}" ]; }; then
@ -10,7 +10,7 @@ if ! command -v gsettings >/dev/null 2>&1 || { [ -z "${DISPLAY:-}" ] && [ -z "${
exit 0 exit 0
fi fi
target="$HOME/.local/share/backgrounds/roman-station" target="$HOME/.local/share/backgrounds/linux-zero"
mkdir -p "$target" mkdir -p "$target"
cp -f theme/wallpapers/* "$target"/ 2>/dev/null || true cp -f theme/wallpapers/* "$target"/ 2>/dev/null || true

View file

@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Legt Startmenü- und Desktop-Verknüpfungen für Forum (Chat) und Werkstatt (n8n) an. # Legt Startmenü- und Desktop-Verknüpfungen für die AGI-Station (Kato) und die Werkstatt (n8n) an.
set -euo pipefail set -euo pipefail
log() { printf '\033[1;33m[ROMAN]\033[0m %s\n' "$*"; } log() { printf '\033[1;33m[LX0]\033[0m %s\n' "$*"; }
# shellcheck disable=SC1091 # shellcheck disable=SC1091
. ./.env . ./.env
@ -14,7 +14,7 @@ icon_dir="$HOME/.local/share/icons/hicolor/scalable/apps"
mkdir -p "$apps_dir" "$icon_dir" mkdir -p "$apps_dir" "$icon_dir"
if [ -f theme/icon.svg ]; then if [ -f theme/icon.svg ]; then
cp -f theme/icon.svg "$icon_dir/roman-station.svg" cp -f theme/icon.svg "$icon_dir/lx0.svg"
fi fi
# Chromium-Familie kann ein sauberes App-Fenster öffnen, sonst Standardbrowser # Chromium-Familie kann ein sauberes App-Fenster öffnen, sonst Standardbrowser
@ -37,15 +37,15 @@ Type=Application
Name=$name Name=$name
Comment=$comment Comment=$comment
Exec=$(launcher_for "$url") Exec=$(launcher_for "$url")
Icon=roman-station Icon=lx0
Terminal=false Terminal=false
Categories=Network;Utility; Categories=Network;Utility;
EOF EOF
chmod +x "$file" chmod +x "$file"
} }
make_entry "$apps_dir/roman-forum.desktop" "Roman Station — Forum" "Sprich mit deinen römischen Beratern" "http://localhost:$webui_port" make_entry "$apps_dir/lx0-agi-station.desktop" "AGI-Station" "Sprich mit Kato und deinen Beratern" "http://localhost:$webui_port"
make_entry "$apps_dir/roman-werkstatt.desktop" "Roman Station — Werkstatt" "KI-Workflows bauen (n8n)" "http://localhost:$n8n_port" make_entry "$apps_dir/lx0-werkstatt.desktop" "Linux Zero — Werkstatt" "KI-Workflows bauen (n8n)" "http://localhost:$n8n_port"
if command -v xdg-user-dir >/dev/null 2>&1; then if command -v xdg-user-dir >/dev/null 2>&1; then
desktop_dir="$(xdg-user-dir DESKTOP)" desktop_dir="$(xdg-user-dir DESKTOP)"
@ -54,11 +54,11 @@ else
fi fi
if [ -d "$desktop_dir" ]; then if [ -d "$desktop_dir" ]; then
cp -f "$apps_dir/roman-forum.desktop" "$apps_dir/roman-werkstatt.desktop" "$desktop_dir/" cp -f "$apps_dir/lx0-agi-station.desktop" "$apps_dir/lx0-werkstatt.desktop" "$desktop_dir/"
chmod +x "$desktop_dir/roman-forum.desktop" "$desktop_dir/roman-werkstatt.desktop" chmod +x "$desktop_dir/lx0-agi-station.desktop" "$desktop_dir/lx0-werkstatt.desktop"
# GNOME verlangt sonst einen Rechtsklick → "Starten erlauben" # GNOME verlangt sonst einen Rechtsklick → "Starten erlauben"
gio set "$desktop_dir/roman-forum.desktop" metadata::trusted true 2>/dev/null || true gio set "$desktop_dir/lx0-agi-station.desktop" metadata::trusted true 2>/dev/null || true
gio set "$desktop_dir/roman-werkstatt.desktop" metadata::trusted true 2>/dev/null || true gio set "$desktop_dir/lx0-werkstatt.desktop" metadata::trusted true 2>/dev/null || true
fi fi
log "Verknüpfungen angelegt (Startmenü + Schreibtisch)." log "Verknüpfungen angelegt (Startmenü + Schreibtisch)."

View file

@ -2,7 +2,7 @@
# Installiert Docker Engine + Compose-Plugin aus dem offiziellen Docker-Repository. # Installiert Docker Engine + Compose-Plugin aus dem offiziellen Docker-Repository.
set -euo pipefail set -euo pipefail
log() { printf '\033[1;33m[ROMAN]\033[0m %s\n' "$*"; } log() { printf '\033[1;33m[LX0]\033[0m %s\n' "$*"; }
fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*"; exit 1; } fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*"; exit 1; }
if command -v docker >/dev/null 2>&1 && sudo docker compose version >/dev/null 2>&1; then if command -v docker >/dev/null 2>&1 && sudo docker compose version >/dev/null 2>&1; then

View file

@ -9,10 +9,10 @@ fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*"; exit 1; }
# shellcheck disable=SC1091 # shellcheck disable=SC1091
. /etc/os-release . /etc/os-release
if [ "${ID:-}" != "zorin" ]; then if [ "${ID:-}" != "zorin" ]; then
if [ "${ROMAN_SKIP_OS_CHECK:-0}" = "1" ]; then if [ "${LX0_SKIP_OS_CHECK:-0}" = "1" ]; then
warn "Kein Zorin OS erkannt (${PRETTY_NAME:-unbekannt}) — Prüfung per ROMAN_SKIP_OS_CHECK übersprungen." warn "Kein Zorin OS erkannt (${PRETTY_NAME:-unbekannt}) — Prüfung per LX0_SKIP_OS_CHECK übersprungen."
else else
fail "Dieses Script ist für Zorin OS gebaut (gefunden: ${PRETTY_NAME:-unbekannt}). Erzwingen mit: ROMAN_SKIP_OS_CHECK=1" fail "Dieses Script ist für Zorin OS gebaut (gefunden: ${PRETTY_NAME:-unbekannt}). Erzwingen mit: LX0_SKIP_OS_CHECK=1"
fi fi
fi fi

37
scripts/set-main-agent.sh Executable file
View file

@ -0,0 +1,37 @@
#!/usr/bin/env bash
# Wechselt den Haupt-Agenten der AGI-Station (Standard-Modell in Open WebUI).
# Aufruf: bash scripts/set-main-agent.sh <name> z.B. kato, seneca, cicero, marcus
set -euo pipefail
log() { printf '\033[1;33m[LX0]\033[0m %s\n' "$*"; }
fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*"; exit 1; }
available() {
for mf in agents/modelfiles/*.Modelfile; do
[ -e "$mf" ] || continue
basename "$mf" .Modelfile | tr '[:upper:]' '[:lower:]'
done
}
agent="$(printf '%s' "${1:-}" | tr '[:upper:]' '[:lower:]')"
if [ -z "$agent" ]; then
printf 'Verfügbare Agenten:\n'
available | sed 's/^/ - /'
fail "Bitte einen Agenten angeben, z.B.: bash scripts/set-main-agent.sh kato"
fi
if ! available | grep -qx "$agent"; then
printf 'Verfügbare Agenten:\n'
available | sed 's/^/ - /'
fail "Unbekannter Agent: $agent"
fi
[ -f .env ] || cp .env.example .env
if grep -q '^MAIN_AGENT=' .env; then
sed -i "s/^MAIN_AGENT=.*/MAIN_AGENT=$agent/" .env
else
echo "MAIN_AGENT=$agent" >> .env
fi
sudo docker compose up -d open-webui
log "Haupt-Agent der AGI-Station ist jetzt: $agent"

View file

@ -1,8 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Lädt das Standardmodell und erstellt die römischen Berater (Ollama) sowie Beispiel-Workflows (n8n). # Lädt das Standardmodell und erstellt Kato & die Berater (Ollama) sowie Beispiel-Workflows (n8n).
set -euo pipefail set -euo pipefail
log() { printf '\033[1;33m[ROMAN]\033[0m %s\n' "$*"; } log() { printf '\033[1;33m[LX0]\033[0m %s\n' "$*"; }
warn() { printf '\033[1;33m[HINWEIS]\033[0m %s\n' "$*"; } warn() { printf '\033[1;33m[HINWEIS]\033[0m %s\n' "$*"; }
fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*"; exit 1; } fail() { printf '\033[1;31m[FEHLER]\033[0m %s\n' "$*"; exit 1; }
@ -26,11 +26,11 @@ dc exec -T ollama ollama pull "$model"
for mf in agents/modelfiles/*.Modelfile; do for mf in agents/modelfiles/*.Modelfile; do
[ -e "$mf" ] || continue [ -e "$mf" ] || continue
name="$(basename "$mf" .Modelfile | tr '[:upper:]' '[:lower:]')" name="$(basename "$mf" .Modelfile | tr '[:upper:]' '[:lower:]')"
log "Erstelle Berater: $name" log "Erstelle Agent: $name"
tmp="$(mktemp)" tmp="$(mktemp)"
sed "s|{{MODEL}}|$model|g" "$mf" > "$tmp" sed "s|{{MODEL}}|$model|g" "$mf" > "$tmp"
dc cp "$tmp" ollama:/tmp/roman.Modelfile dc cp "$tmp" ollama:/tmp/lx0.Modelfile
dc exec -T ollama ollama create "$name" -f /tmp/roman.Modelfile dc exec -T ollama ollama create "$name" -f /tmp/lx0.Modelfile
rm -f "$tmp" rm -f "$tmp"
done done
@ -43,4 +43,4 @@ for wf in agents/n8n/*.json; do
fi fi
done done
log "Berater stehen bereit: seneca, cicero, marcus" log "Agenten bereit: kato (Haupt-Agent), seneca, cicero, marcus"

View file

@ -19,6 +19,8 @@
<ellipse cx="178" cy="122" rx="13" ry="5" transform="rotate(48 178 122)"/> <ellipse cx="178" cy="122" rx="13" ry="5" transform="rotate(48 178 122)"/>
<ellipse cx="158" cy="102" rx="13" ry="5" transform="rotate(30 158 102)"/> <ellipse cx="158" cy="102" rx="13" ry="5" transform="rotate(30 158 102)"/>
</g> </g>
<text x="128" y="158" text-anchor="middle" font-family="Georgia, 'Times New Roman', serif" <text x="128" y="152" text-anchor="middle" font-family="Georgia, 'Times New Roman', serif"
font-size="52" letter-spacing="4" fill="url(#gold)">SPQR</text> font-size="58" letter-spacing="2" fill="url(#gold)">LX0</text>
<text x="128" y="186" text-anchor="middle" font-family="Georgia, 'Times New Roman', serif"
font-size="20" letter-spacing="6" fill="#8a6d35">SPQR</text>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -41,13 +41,13 @@
<!-- Schriftzug --> <!-- Schriftzug -->
<text x="1280" y="700" text-anchor="middle" font-family="Georgia, 'Times New Roman', serif" <text x="1280" y="700" text-anchor="middle" font-family="Georgia, 'Times New Roman', serif"
font-size="96" letter-spacing="26" fill="url(#gold)">ROMAN STATION</text> font-size="104" letter-spacing="30" fill="url(#gold)">LINUX ZERO</text>
<text x="1280" y="780" text-anchor="middle" font-family="Georgia, 'Times New Roman', serif" <text x="1280" y="778" text-anchor="middle" font-family="Georgia, 'Times New Roman', serif"
font-size="40" letter-spacing="18" fill="#8a6d35">S P Q R</text> font-size="38" letter-spacing="22" fill="#8a6d35">AGI-STATION · SPQR</text>
<!-- Zierlinien --> <!-- Zierlinien -->
<g stroke="#8a6d35" stroke-width="3" opacity="0.7"> <g stroke="#8a6d35" stroke-width="3" opacity="0.7">
<line x1="880" y1="830" x2="1680" y2="830"/> <line x1="880" y1="828" x2="1680" y2="828"/>
<line x1="1040" y1="848" x2="1520" y2="848"/> <line x1="1040" y1="846" x2="1520" y2="846"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB