Bestandsaufnahme · 15.10.2026

Homebot: Sicht, Rechte und Configs

Was der Hauptagent im Chat und der Sub-Agent ramon-1 (Auftrag #925) sehen, dürfen und mitbekommen. Grundlage: Bestandsaufnahme vom 15.10.2026, 19:53–20:03 CEST, nur gelesen, nichts geändert. Secrets stehen hier nur als „vorhanden“, nie mit Inhalt.

kritisch / zu offen beachten in Ordnung Notizen und Status werden nur in diesem Browser gespeichert.

Kritisch

admind prüft keine Owner-Rolle

  • admind prüft keine Owner-Rolle: nur Quelladresse (localhost / Docker-Netz) und Bearer-Token. Ein actor-Feld ist frei wählbar, Vorgabe "ramon".
  • Der Token liegt in ~/docker/homebot-admin/.env (Modus 600, eigener User) und ist damit für jeden Agenten-Prozess lesbar.
  • Folge: Deploy, Grants, Unit-Restarts, Evolve, remove und purge von Tenants sind per agent.run über Bash erreichbar. V3 („agent.run ändert den Bot nie“) setzt nur der Prompt durch, nicht admind.

Vorgeschlagene Fixes

(a) Gesetzesnummer G54 → G51

„Ehrlich berichten“ ist laut LAWS.md G51, nicht G54 (G54 = Diktat-Brücke). Korrigieren in worker/agents.py:85 und app/openai_compat.py:1732.

(b) admind-Token absichern

Den admind-Token für Agenten unlesbar machen bzw. in admind eine Herkunftsprüfung einbauen (welcher Prozess/Agent ruft an), statt nur Quelladresse und Token zu prüfen.

Hauptagent (Chat)

Sicht: nur der FAKTEN-Block (Health-Snapshot) plus Ergebnisse von Aktionen

Status
ok
Platte
75 %
Swap
48 %
Last
0.72
Offene Aufträge
1

Zugriff

  • Kein direkter Serverzugriff.
  • shell.readonly: nur Statuskommandos sowie ls / find / cat unter ~/.openclaw/workspace.

Rechte

  • Alle Aktionen mit Owner-Rechten.

Regeln

RegelInhalt
confirmbei schreibenden Befehlen
Kauf/Zahlungkein Kauf, keine Zahlung ohne Auftrag
LöschenRückfrage vor dem Löschen
SelbständerungÄnderungen an sich selbst nur via evolve.request
people.provisionnur wenn Ramon es in derselben Nachricht sagt
server.rootnur als Vorschlag; erlaubt: docker, systemctl, journalctl, apt, apt-get, reboot, shutdown, df, du
voice.saynur auf ausdrücklichen Wunsch
iphone.uimit Grenzen (nur Ramon, höchstens 8 Schritte pro Turn, keine Käufe ohne Rückfrage)
Aktioneneine Aktion pro Antwort, aber verkettbar

Ausfall heute: doc.pdf

doc.pdf meldet „Connection refused“.

1 · Identität (Sub-Agent ramon-1)

PunktWertBeleg
Modellclaude-opus-5-5 (Fallback claude-fable-5-1,claude-opus-5,claude-sonnet-5), --effort highKommandozeile der Unit homebot-agent-925-1-1792086829.service; ops/models.txt hat dieselbe Reihenfolge
Claude-CLI2.1.287 (~/.local/share/claude/versions/2.1.287)CLAUDE_CODE_EXECPATH
Startmodusclaude -p … --output-format json --permission-mode bypassPermissions --add-dir /home/serverlisibachnet --add-dir ~/.openclaw/workspace --session-id …systemctl --user list-units, worker/modeld.py:1796/1803
Arbeitsverzeichnis/home/serverlisibachnet/homebot-agents/ramon-1 (Agent 1 von 4; ramon-2 bis ramon-4 existieren)pwd, ls ~/homebot-agents
Laufordner~/.homebot/agent-runs/925 (HOMEBOT_TASK=925)env
Unix-Useruid=1000(serverlisibachnet) gid=1000id
Gruppenserverlisibachnet, adm(4), cdrom(24), sudo(27), dip(30), plugdev(46), lxd(101), docker(988) id
Hostnameserverlisibachnethostname
HooksPostToolUse/Stop → python3 ~/docker/homebot/worker/agent_inbox.py post/stopramon-1/.claude/settings.json
Secrets in der UmgebungHOMEBOT_DB_PASS*, HOMEBOT_API_TOKEN, HOMEBOT_ENVELOPE_KEY, CLAUDE_CODE_MESSAGING_TOKEN sind gesetzt env (nur Namen geprüft)

2 · Werkzeuge

Direkt aufrufbar

Agent Bash Edit ListAgents Read ReportFindings ScheduleWakeup Skill ToolSearch Workflow Write mcp__claude_ai_Claude_Docs__batch mcp__claude_ai_Claude_Docs__guide mcp__claude_ai_Claude_Docs__update

Nachladbar über ToolSearch

CronCreate CronDelete CronList DesignSync EnterWorktree ExitWorktree Monitor NotebookEdit PushNotification RemoteTrigger SendMessage TaskStop WebFetch WebSearch mcp__claude_ai_Claude_Docs__create/delete/export/query/read

homebot-admin-MCP: bots_create bots_list bots_logs bots_pairing bots_restart bots_start bots_status bots_stop homebot_overview

Nicht verfügbar

  • Kein eigenes Grep- oder Glob-Werkzeug; Suche mit grep und find über Bash.
  • MCP-Server ohne Anmeldung: plugin:data:amplitude, amplitude-eu, atlassian, bigquery, hex.
  • plugin:data:definite konnte keine Verbindung aufbauen (ENDPOINT_NOT_FOUND).

Skills

bots-verwalten anthropic-skills:homebot-ops homeserver-ops homeserver-ssh home-knowledge personal-memory-update pdf docx pptx xlsx und weitere (data:*, dataviz, code-review …)

Lesende Tests

BefehlErgebnis
docker psok: 62 Container laufen, 71 insgesamt
sudo -n trueverweigert: sudo: a password is required (rc=1)
journalctl -n 1ok (System-Journal, über Gruppe adm)
journalctl -u homebot-modeld -n 1-- No entries --, weil das eine User-Unit ist; es braucht --user
ls ~/dockerok (42 Einträge)
ls ~/docker/homebotok (10 Einträge)
ls ~/.openclaw/workspaceok (94 Einträge)
ls /mnt/Plexok (6 Einträge)
ls /var/spool/cron/crontabsverweigert: Permission denied
test -r /etc/shadow / /etc/sudoersnicht lesbar
lagebuch_cli.py lesen botok (rc=0)

3 · Sicht auf den Server

Uptime
68 Tage
Load (8 Kerne)
0.43
0.43 / 0.64 / 0.69
RAM belegt
5,4 / 15 GiB
Swap belegt
3,8 / 8 GiB
Container
62 / 71

Platte

MountGrößeBelegtFreiUse%
/ (nvme0n1p2)468G349G96G
79 %
/mnt/Plex (NAS volume2)22T21T926G
96 %
/mnt/cloud (NAS volume2, gleiches Volume)22T21T926G
96 %
/mnt/Plex2 (NAS volume1)11T7,0T3,9T
65 %

Container (62 laufend)

Homebot: homebot-api (up 3 h), homebot-db (healthy), homebot-whisper und homebot-admin-web (up 11 h).

Dazu plex, sonarr, radarr, nzbget, prowlarr, overseerr, homeassistant, mosquitto, immich (4), paperless (5), nextcloud (5), jarvis (4), agent-team (2), kitchen (4), shorts (3), 3d/3d-games (4), reverse plus cert_proxy, n8n, vault, ramon-emma (2) und die Websites (lisibach-web, whng, chliart, v2lisibach, jannik, fabian-*, jolanda-test, hokovit3d, scamcheck, restaurant-panoramach).

Vollständige Liste: docker ps --format '{{.Names}}\t{{.Status}}\t{{.Image}}'

systemd

Systemweite homebot*-Units: keine (0 loaded units). Alles läuft als User-Unit:

  • aktiv: homebot-modeld, homebot-wa, homebot-status, homebot-admind, wda, wifi-linklog, wifi-umfrage-ausloeser
  • Timer: wifi-snapshot.timer (alle 5 min), wifi-umfrage-training.timer (07:47)
  • inaktiv: csi-router.service

Prozesse

PIDProzess
3514140worker/modeld.py, läuft seit 03:10 h
3299412transport/wa.js (node)
2167632homebot-admin/admind/admind.py
369837ios ui run wda (iPhone-WDA)
3908761wifi-tracker/linklog/linklogger.py
415412wifi-tracker/umfrage/ausloeser.py
4026927 / 4026928Lauf des Sub-Agenten: agent-segment.sh und claude -p
4026967homebot-admin/mcp/mcp_server.py
230061eine weitere Claude-Remote-Sitzung (ccd-cli 2.1.293), läuft seit fast 4 Tagen

Cron

  • crontab -l ist lesbar und hat 36 aktive Zeilen. Davon gehören 13 zu ops/* von homebot (outage-tick und reminders-due jede Minute, evolve-nightly 03:40, model-probe stündlich :07, selftest 07:40, Backups, homebot-guard und anomaly-watch). Dazu kommen die Media-, Tinder-, Presence- und Vault-Jobs.
  • In /etc/cron.d sind e2scrub_all und sysstat lesbar.

Nicht sichtbar

root-Crontab und die Crontabs anderer User (/var/spool/cron/crontabs), /etc/shadow, /etc/sudoers, alles, was sudo braucht. Router, Home Assistant und NAS wurden in diesem Lauf bewusst nicht abgefragt.

4 · Dateizugriff (test -r/-w, nichts geschrieben)

PfadrwEigentümer/Modus
~/docker/homebot (Repo, inkl. .git)jajaeigener User, 755/775
app/vorgaben.pyjaja664
app/policy.pyjaja644
app/provision.pyjaja664
ops/jaja755
ops/models.txt, ops/models-manual.txtjaja664
ops/.env (10 Zeilen: DB-Passwort, API-Token, Envelope-Key, WA-Nummer …; Inhalt nicht wiedergegeben)jaja600, eigener User
ops/deploy.sh, ops/evolve.pyjaja (x)775
memory/jaja775
worker/lagebuch_cli.pyjaja664
shared/requests––gibt es weder unter ~/docker/homebot noch unter ~/shared
~/.openclaw/shared/requests (66 Einträge)jaja775
~/.openclaw/credentials/ (github-user-tokens.json, services.json, user-media-keys.json + .bak, whatsapp)jaja775; Dateien 600
~/.openclaw/workspacejaja700
~/.ssh/id_ed25519, ~/.ssh/router_key, 3dgames_deployvorhanden, lesbar–600
~/homebot-agents/ramon-2 (und alle anderen Agentenordner)jaja775
~/.claude/settings.json (global)jaja664
/mnt/PlexjajaUNKNOWN:users 775
/mnt/cloudjaneintrotz Modus 777 (NFS-Squash)
/var/log/syslog, /var/log/auth.logjaneinsyslog:adm 640
/etc/shadow, /etc/sudoersneinneinroot

5 · Regeln, die der Sub-Agent mitbekommt

RegelInhalt kurzQuelle
Identität und Arbeitsordnerramon-1, Agent 1 von 4; arbeitet nur für RamonPrompt (gebaut in worker/modeld.py ca. Z. 1733) und ramon-1/CLAUDE.md (erzeugt von worker/agents.py)
Bot nie ändernnichts unter ~/docker/homebot, kein git commit/push, kein ops/deploy.sh, kein Neustart von homebot-Diensten, kein Schreiben in die Bot-DB außer über das Lagebuch; sonst ENTWICKLUNGSAUFTRAG:Prompt (AGENT_PREAMBLE), CLAUDE.md, V3 (app/vorgaben.py:342)
Selbständerung nur über evolveÄnderungen am Bot macht nur der Verbesserungslauf (evolve.request, ops/evolve.py), nie der Agent über die ShellPrompt, V3, CLAUDE.md
Person anlegennie selbst: kein ops/add_<person>.py --apply, kein Eintrag in ~/.openclaw/credentials. Nur people.provision, und nur wenn Ramon in derselben Nachricht „leg <Name> an“ sagtPrompt, V3/Direktive #77; Prüfung in app/provision.py:132 (ordered(message, …)), app/effectors.py:330 (Capability grant.write)
Kauf/Zahlungnichts bestellen, kaufen, bezahlen, buchen oder abonnieren ohne Ramons ausdrücklichen Auftrag im selben Auftrag; diesmal ausdrücklich „KEIN Kauf“ (kein_kauf)Prompt (modeld.py), V4
Löschen/UnumkehrbaresRückfrage nur bei Löschen, Unumkehrbarem oder Geld; [D]: ein BestätigungssatzPrompt; Standardklausel [D] in ~/.openclaw/workspace/LAWS.md
confirm-Pflichtserver.exec (schreibend auf einem fremden eigenen Server) verlangt confirm: true; root.* verlangt die Bestätigung der Person, erlaubt sind nur docker, systemctl, journalctl, apt, reboot, shutdown, df und duworker/modeld.py:2685, app/effectors.py:190–199
bots.manageFreundes-Bots nur für den Owner (Capability config.write), nie Token oder Key als Argumentapp/effectors.py:321
iphone.uinur Ramon (server.admin, OWNER_ONLY, Daemon verlangt owner_ok), höchstens 8 Schritte pro Turn; V5: bei einem iPhone-Ziel alles ohne Rückfrage außer Käufen; Laws, Grants und Sende-Regel gelten weiterapp/effectors.py:266, V5
Lagebuchvor jeder Änderung anspruch, bei Exit 3 abbrechen, danach eintrag eintragen; Stand anderer Agenten nur über lesenPrompt (LAGEBUCH_RULES)
Sendennichts selbst per WhatsApp schicken (kein wa-send.sh, kein curl), Dateien nur über DATEI:-ZeilenPrompt
Zeitgrenze30 min harter Abbruch, Hintergrundjobs melden sich nichtPrompt
Ehrlich berichten „nur, was ein Werkzeug bestätigt hat (G54)“CLAUDE.md, worker/agents.py:85
Weitere VorgabenV1 (Umfragen nur als Ablauf), V2 (kein iPhone, keine Watch, kein MacBook, kein person.ramon im Tracker), V6 (Umfrage nur bei Widerspruch, höchstens 1 pro Stunde, nachts nie)app/vorgaben.py:314–383
Gesetze G1–G77 stehen nicht im Prompt; nur durch Lesen von ~/.openclaw/workspace/LAWS.md (134 Zeilen) bekannt. Relevant: Präambel 1 (Owner-Supremacy), [N], G36 (MacBook/nu.-Datenschutz), G37 (fehlt sudo → Skript nach ~/opclw/to_be_executed/ stagen), G51 (ehrliches Reporting), G67 (OWNER_ONLY)Datei
Code-Ebenepolicy.check: Owner ist „unconditionally omnipotent“ (A1). OWNER_ONLY = server.admin, config.write, law.write, grant.write, agent.run, server.remote, server.rootapp/policy.py:11–19, 62–68

6 · Auffälligkeiten

1 · Die Sperren stehen nur im Prompt, technisch hat der Agent fast Root

Der Sub-Agent läuft mit --permission-mode bypassPermissions und gehört zur Gruppe docker, was praktisch Root bedeutet. Schreibrechte hat er auf das ganze Bot-Repo samt .git, ops/.env, ~/.openclaw/credentials, die Ordner der anderen Agenten und die globale ~/.claude/settings.json. V3 („agent.run ändert den Bot nie“) setzt also nur seine Folgsamkeit durch, keine Dateirechte. app/policy.py:21–25 sagt selbst: „the sandbox was never a control - it was a hope“.

2 · Kein sudo, aber docker

sudo -n true meldet a password is required, obwohl der User in der Gruppe sudo ist. Root-Arbeit über die Shell geht also nur nach G37 (Skript stagen). Die Gruppe docker umgeht das trotzdem. Die Grenze ist damit weder sauber offen noch sauber zu.

3 · Secrets in der Umgebung jedes Agenten

HOMEBOT_DB_PASS*, HOMEBOT_API_TOKEN, HOMEBOT_ENVELOPE_KEY und CLAUDE_CODE_MESSAGING_TOKEN werden jedem agent.run vererbt. Dazu ist ops/.env lesbar. Für einen Owner-Agenten ist das zwar konsistent, es widerspricht aber dem Verbot „keine Schreibzugriffe auf die homebot-Datenbank“: Die Zugangsdaten dafür liegen bereit.

4 · Admin-Dienst: Der Admin-MCP prüft keine Owner-Rolle

Die einzige Hürde ist ein Token in einer Datei, die jeder Prozess des Users lesen kann. Belegt durch Lesen des Codes in ~/docker/homebot-admin, aufgerufen wurde nichts.

  • Kette: Der MCP-Server (mcp/mcp_server.py, 112 Zeilen) bietet 9 Tools an: bots_list, bots_status, bots_create, bots_pairing, bots_start, bots_stop, bots_restart, bots_logs, homebot_overview. Er reicht sie in run_tool() ohne jede Prüfung von Person, Rolle oder owner_ok an admindclient.call() weiter. Der Client (mcp/admindclient.py) liest den Bearer-Token selbst aus ~/docker/homebot-admin/.env (Zeile HOMEBOT_ADMIND_TOKEN=; vorhanden, Modus 600, Eigentümer serverlisibachnet, für den Agenten lesbar) und ruft http://127.0.0.1:18797 auf.
  • admind prüft nur zwei Dinge (admind/admind.py, _handle, ca. Z. 145–151): die Quelladresse (ALLOWED_SOURCES = 127.0.0.0/8, 172.16.0.0/12, ::1, sonst 403 source not allowed) und den Bearer-Token (sonst 401 unauthorized). Eine Rolle, ein owner_ok oder ein actor-Abgleich kommt nicht vor. Das Feld actor ist frei wählbar und hat den Vorgabewert "ramon" (_b(b, "actor", "ramon")).
  • Die Owner-Grenze liegt nur davor: worker/agents.py:95–108 (_provision_skills) schreibt .mcp.json nur, wenn person == self.owner, und löscht die Datei sonst. Vorhanden ist sie in genau ramon-1 bis ramon-4, in keinem anderen Agentenordner. Nur Ramons Agenten bekommen den MCP, und agent.run ist ohnehin OWNER_ONLY. Innerhalb dieser Agenten gibt es keine weitere Sperre. Auch für einen Nur-Lese-Lauf sind bots_stop, bots_restart und bots_create frei.
  • Mehr erreichbar als der MCP zeigt: Mit demselben Token erreicht jeder Bash-Aufruf auch die Routen, die der MCP bewusst weglässt (ROUTES, admind.py:46–89): POST /homebot/deploy, /homebot/grants (Rechte vergeben oder entziehen), /homebot/units/(modeld|wa|status)/restart, /homebot/evolution/run, /homebot/evolve/pause|resume, /homebot/switches/<name>, /homebot/tasks/<id>/cancel, /tenants/<slug>/remove und /tenants/<slug>/purge (mit confirm) sowie DELETE /tenants/<slug>/docs/<id>.
  • Widerspruch: Der Docstring von mcp_server.py verspricht „minus anything destructive and minus any credential - purge and secrets stay on the admin page, behind a passkey“. Das stimmt nur für die MCP-Oberfläche. Der Token liegt für den Agenten lesbar auf der Platte, und damit steht die Passkey-Grenze der Admin-Seite für Ramons Agenten nicht. Auch V3 (kein Deploy, keine Unit-Neustarts, keine Rechte durch agent.run) setzt hier nur der Prompt durch, nicht admind.

5 · Falsche Gesetzesnummer

CLAUDE.md (worker/agents.py:85) und app/openai_compat.py:1732 nennen „G54“ für ehrliches Berichten. Laut LAWS.md ist G54 aber die „Diktat-Brücke Sprachmemo → MacBook-Zwischenablage“; ehrliches Reporting ist G51. → Fix (a)

6 · Die Gesetze erreichen den v2-Bot nicht mehr zuverlässig

LAWS.md liegt im stillgelegten ~/.openclaw/workspace. Im Bot-Code wird es nur in einem Kommentar von app/policy.py sowie in ops/personas.json, ops/sweep_knowledge.py und ops/grants.proposed.json erwähnt. Eine Law-Tabelle gibt es in den Schemas nicht. Der Agenten-Prompt enthält keine G-Gesetze, nur V1–V6. Mehrere Gesetze verweisen auf OpenClaw-Altlasten: G52 openclaw-health.py, G72 shared/requests (existiert nur unter ~/.openclaw/shared/requests), die Rangordnung „AGENTS.md/TOOLS.md“.

7 · Der Modell-Ledger in LAWS.md ist veraltet

G47 sagt „main auf claude-sonnet-5/medium, opus-5 nur noch als Subagent“ (04.09.). ops/models.txt sagt „Ramon, 2026-09-25: Opus 5.5 for everything“. Der Bot folgt models.txt, das Gesetz wurde nicht nachgezogen.

8 · „100 % Zugriff“ (Direktive #76) gilt nur im Chat, nicht im agent.run

Commit 228b686 (15.10. 15:58) gibt dem Owner im Chat „Rechte: alle (Owner)“. Für agent.run bleiben V3, kein_kauf und die people.provision-Sperre absichtlich bestehen. Wer „100 %“ als „auch der Agent darf den Bot ändern“ versteht, stößt auf V3. Das ist gewollt, aber nirgends gemeinsam erklärt.

9 · homebot-Dienste sind User-Units

systemctl list-units 'homebot*' (system) zeigt 0 Units und journalctl -u homebot-modeld zeigt No entries. Prüfungen ohne --user führen also in die Irre.

10 · /mnt/cloud hat Modus 777, ist aber nicht schreibbar

test -w schlägt fehl (NFS-Squash). /mnt/Plex und /mnt/cloud liegen auf demselben Volume und sind zu 96 % voll (926 GB frei).

11 · Swap 3,8 von 8 GiB belegt

Obwohl 9,9 GiB RAM verfügbar sind. Das ist kein Fehler, aber ein Hinweis auf alten Druck.

12 · ops/models-manual.txt

Führt claude-opus-4-8 als manuelle Option. Das ist harmlos, nur der Vollständigkeit halber genannt.