docs: care chatbot e care — trei "Maria", doi boti de Discord, doua punti WhatsApp

Pe 2026-08-31 s-a pierdut aproape o ora de diagnostic fiindca Maria raspundea pe
WhatsApp, dar verificarile se faceau pe containerul gresit: pe LXC 171 totul parea
rupt (niciun LLM pe 8091, WhatsApp neasociat, log fara activitate) in timp ce
raspunsurile veneau de pe LXC 104. Nicio pagina nu spunea ca exista doua instalari.

docs/chatboti-si-punti.md, verificat live: tabel scurt "cine e cine", cate o
sectiune per instanta (Maria pe Flowise, Maria WhatsApp de pe 104 care e cea vie,
Maria din git de pe 171 care nu e asociata, Echo pe 110, puntea Discord), tabel de
porturi cu notarea ca 8099 si 11434 exista pe ambele containere cu continut
diferit, comenzi de verificat cu cine vorbesti, si capcanele (prototipul de pe 104
nu e in git, depozitul e oglinda a Drive-ului, reindexarea dureaza ~21 min,
granita Mariei fata de infrastructura).

Faptul care lega totul: WhatsApp-ul lui Echo (110) si al Mariei (104) sunt legate
la acelasi numar, +40723197939, ca dispozitive diferite ale aceluiasi cont.

Documentul e legat din CLAUDE.md si dintr-un citat pus in capul celor cinci
README-uri implicate, ca sa fie gasit de cine aterizeaza direct acolo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
Claude Agent
2026-08-31 19:30:06 +00:00
parent 16ac5a289f
commit ae8acfbc8b
7 changed files with 1260 additions and 1081 deletions

View File

@@ -45,6 +45,7 @@ input/ # Oracle DMP files for import
- **Oracle database setup**: `proxmox/lxc108-oracle/README.md`
- **Migration orchestration**: `proxmox/lxc108-oracle/migration/00-MASTER-MIGRATION.sh`
- **Chatbot architecture**: `proxmox/lxc104-flowise/docs/prd.md`
- **Care chatbot e care (trei „Maria", doi boți de Discord, două punți WhatsApp pe același număr)**: `docs/chatboti-si-punti.md`
- **Docker Sandboxes (sbx) — agenți AI izolați**: `proxmox/lxc102-docker/README.md`
- **Punte Discord → Claude Code (comandă LXC 171 de pe telefon, dintr-un guild privat)**: `proxmox/lxc171-claude-agent/discord-bridge/README.md`
- **Dashboard de control al punții Discord (stare, restart, orfani, confirmări; https://claude-agent.tailf7372d.ts.net/claude)**: `proxmox/lxc171-claude-agent/discord-bridge/dashboard/README.md`

158
docs/chatboti-si-punti.md Normal file
View File

@@ -0,0 +1,158 @@
# Chatboții și punțile de mesagerie — care e care
Există **trei lucruri numite „Maria"**, **doi boți pe Discord** și **două punți WhatsApp
legate la același număr de telefon**. Documentul ăsta spune care e care, unde rulează și
cum verifici, în 30 de secunde, cu care vorbești de fapt.
> **De ce există documentul:** pe 2026-08-31 s-a pierdut aproape o oră de diagnostic
> fiindcă Maria de pe WhatsApp răspundea, dar toate verificările se făceau pe containerul
> greșit. Pe LXC 171 totul părea rupt (niciun LLM, WhatsApp neasociat, log fără
> activitate) — răspunsurile veneau de pe LXC 104.
**Verificat live pe 2026-08-31.** Stările (`connected`, ce serviciu rulează) se schimbă;
topologia, nu.
---
## Tabelul scurt
| Cine | Unde rulează | Canal | Model | Sursa de cunoștințe |
|---|---|---|---|---|
| **Maria pe Flowise** | LXC 104, `flowise.service`, port 3000 | web (prin ngrok) | configurat în chatflow | chatflow Flowise + docstore propriu |
| **Maria WhatsApp — instanța vie** | LXC 104, `maria-whatsapp-*.service` | WhatsApp, nr. 40723197939 | `llama-qwen35` local (Qwen3.5-2B-Q4, port 8091) | `rag_index.json` propriu, mic |
| **Maria WhatsApp — versiunea din git** | LXC 171, `maria-*.service` | WhatsApp (**neasociat**) | același LLM, prin rețea | depozit sincronizat din Google Drive |
| **Echo (MoltBot)** | LXC 110, `echo-core.service` | Telegram + WhatsApp + Discord | Claude Opus 4.5 (API) | proiectele lui, roa2web |
| **Puntea Discord → Claude Code** | LXC 171, `claude-discord.service` | Discord (guild privat) | Sonnet/Opus, per fir | tot `/workspace`, acces SSH la cluster |
Cele două Marii de WhatsApp rulează **același cod**, din surse diferite. Vezi mai jos.
---
## Cele trei Marii
### 1. Maria pe Flowise — chatbot web
LXC 104 (`10.0.20.161`), `flowise.service` pe portul 3000, expus public prin
`ngrok.service` la `https://mutual-special-koala.ngrok-free.app`.
Chatflow-ul e definit în interfața Flowise; memoria e Buffer Window (ultimele 5 schimburi).
Sursa versionată a chatflow-ului: `vfp_roaauto/COMUN/utile/chatbot/`.
Detalii: [`proxmox/lxc104-flowise/README.md`](../proxmox/lxc104-flowise/README.md).
### 2. Maria WhatsApp + RAG — instanța care răspunde acum
**LXC 104**, `/root/maria-whatsapp-bridge/` — **în afara git-ului**.
| Serviciu | Ce face |
|---|---|
| `maria-whatsapp-bridge.service` | punte Baileys (Node), port 8099 |
| `maria-whatsapp-consumer.service` | `consumer.py` — citește mesaje, caută în RAG, întreabă LLM-ul |
| `llama-qwen35.service` | `llama.cpp` cu `Qwen3.5-2B-Q4_K_M`, API compatibil OpenAI pe **8091** |
| `ollama.service` | embeddings, port 11434 |
Legată la **+40723197939**, în modul self-chat: îi scrii ție însuți pe WhatsApp și ea
răspunde în aceeași conversație, cu prefixul `[Maria]`.
**Limitarea ei:** indexul are 24 de chunk-uri dintr-un singur fișier
(`knowledge/roaauto_instructiuni.txt`). Orice întrebare din afara subiectului roaauto
primește un răspuns inventat de model, fiindcă retrieval-ul nu are ce să găsească.
### 3. Maria WhatsApp + RAG — versiunea din git
**LXC 171**, cod în `proxmox/lxc171-claude-agent/maria-whatsapp-bridge/`, stare în
`~/.maria-bridge/`. Aceleași servicii, sub `systemctl --user`.
Are tot ce s-a construit peste prototip: depozit sincronizat din Google Drive prin rclone
(11 documente, 173 de chunk-uri), suport `.xml` preferat peste `.md`, lacăt între
reindexări, dashboard de control. Foloseste LLM-ul de pe 104 prin rețea
(`LLM_URL=http://10.0.20.161:8091`) — pe 171 nu există niciun model de chat, doar
embeddings.
**Nu e asociată la WhatsApp.** Până când e, instanța de pe 104 rămâne singura funcțională.
Migrarea e urmărită în `claude-agent/TODO.md`.
Detalii: [`maria-whatsapp-bridge/README.md`](../proxmox/lxc171-claude-agent/maria-whatsapp-bridge/README.md).
---
## Cei doi boți de Discord
### Puntea Discord → Claude Code (LXC 171)
`claude-discord.service`. Un fir de Discord = o sesiune Claude Code care rulează **pe
container, cu drepturile utilizatorului `claude`**: acces la `/workspace`, chei SSH,
`pct exec` pe tot clusterul. Comenzi `/new`, `/cd`, `/model`, `/status`, `/stop`,
`/cleanup`, `/permisiuni`.
Dashboard de control: `claude-discord-dashboard.service`, port 18790, expus prin Tailscale
la `https://claude-agent.tailf7372d.ts.net/claude`. Tot de acolo se comandă și Maria.
Detalii: [`discord-bridge/README.md`](../proxmox/lxc171-claude-agent/discord-bridge/README.md).
### Echo Core (LXC 110)
`echo-core.service` — bot pe Telegram, WhatsApp **și** Discord, cu Claude Opus 4.5 prin
API. Alt bot, alt scop, alt container. Dacă un mesaj de pe Discord primește un răspuns
care nu seamănă cu Claude Code, verifică dacă nu cumva a răspuns Echo.
Detalii: [`proxmox/lxc110-moltbot/README.md`](../proxmox/lxc110-moltbot/README.md).
---
## Porturi
| Port | Container | Serviciu |
|---|---|---|
| 3000 | LXC 104 | Flowise (web, prin ngrok) |
| 4040 | LXC 104 | ngrok, interfață locală |
| 8091 | LXC 104 | `llama.cpp` / Qwen3.5-2B — **LLM-ul de răspuns al Mariei** |
| 8099 | LXC 104 | punte WhatsApp Maria (instanța vie) |
| 11434 | LXC 104 | Ollama (embeddings) |
| 8098 | LXC 110 | punte WhatsApp Echo |
| 18789 | LXC 110 | gateway clawdbot |
| 7788 / 7789 | LXC 110 | supertonic-tts / pocket-tts |
| 8099 | LXC 171 | punte WhatsApp Maria (versiunea din git) |
| 11434 | LXC 171 | Ollama (doar embeddings, fără model de chat) |
| 18790 | LXC 171 | dashboard punte Discord + Maria |
`8099` și `11434` există pe **ambele** containere, cu conținut diferit. De aici jumătate
din confuzie — verifică întotdeauna pe ce container ești.
---
## Cum afli cu cine vorbești
```bash
# Care punte WhatsApp e conectata, si pe ce numar
ssh root@10.0.20.201 "pct exec 104 -- curl -s http://127.0.0.1:8099/status" # Maria vie
ssh root@10.0.20.171 "curl -s http://127.0.0.1:8099/status" # Maria din git
ssh root@10.0.20.200 "pct exec 110 -- curl -s http://127.0.0.1:8098/status" # Echo
# Ce a procesat consumer-ul Mariei din git (daca e gol, nu ea a raspuns)
tail -20 ~/.maria-bridge/logs/rag.log
# LLM-ul de raspuns
curl -s http://10.0.20.161:8091/v1/models
```
**Regula:** WhatsApp-ul lui Echo (LXC 110) și cel al Mariei (LXC 104) sunt legate la
**același număr**, `+40723197939`, ca dispozitive diferite ale aceluiași cont. Un mesaj
poate ajunge la ambele. Dacă primești două răspunsuri, două punți sunt active simultan.
---
## Capcane
- **„Maria" nu e un singur lucru.** Întreabă întâi: web (Flowise), WhatsApp de pe 104,
sau WhatsApp de pe 171?
- **Prototipul de pe 104 nu e în git.** Modificările făcute acolo nu se văd nicăieri și se
pierd. Codul versionat e cel de pe 171.
- **Depozitul Mariei din git e oglindă a Google Drive.** `rclone sync` șterge local ce nu
mai există în Drive; un document adăugat manual din dashboard dispare la următoarea
sincronizare.
- **Reindexarea durează ~21 de minute** pentru 173 de chunk-uri (embedding CPU-only,
~7,3 s per chunk pe LXC 171). Nu pare blocată — chiar durează.
- **Maria nu are voie la infrastructură.** E chatbot pentru clienții ERP ROA; nimic din
`proxmox/`, niciun IP, port sau credențial nu intră în depozitul ei de documente.
Puntea Discord, în schimb, are acces la tot. Vezi `claude-agent/CLAUDE.md`.

View File

@@ -1,171 +1,175 @@
# LXC 104 - Flowise AI (Chatbot Maria)
**Director:** `proxmox/lxc104-flowise/`
**VMID:** 104
**IP:** 10.0.20.161
**Host Proxmox:** pvemini
**Servicii:** Flowise AI, ngrok tunnel, Ollama (opțional)
---
## Documentație Adițională
| Fișier | Descriere |
|--------|-----------|
| `docs/prd.md` | Product Requirements Document - Chatbot Suport Tehnic |
| `docs/v1-arhitectura.md` | Arhitectură versiunea 1 (Flowise + Groq) |
| `docs/v2-arhitectura.md` | Arhitectură versiunea 2 (Claude Agent SDK) |
---
## Componente
| Componenta | Locație | IP | Port |
|------------|---------|-----|------|
| Flowise | LXC 104 | 10.0.20.161 | 3000 |
| ngrok tunnel | LXC 104 | 10.0.20.161 | - |
| Pagina chatbot | romfast.ro | - | 443 |
## Configurare Flowise
**Serviciu systemd**: `/etc/systemd/system/flowise.service`
```ini
[Unit]
Description=Flowise Service
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/bin/npx flowise start
Restart=always
Environment=PORT=3000
Environment=FLOWISE_USERNAME=admin
Environment=FLOWISE_PASSWORD=parola28
Environment=CORS_ORIGINS=https://www.romfast.ro,https://romfast.ro
WorkingDirectory=/root/.flowise
Environment=FLOWISE_DATABASE_PATH=/root/.flowise/database.sqlite
[Install]
WantedBy=multi-user.target
```
**Comenzi utile**:
```bash
# Status
pct exec 104 -- systemctl status flowise
# Restart
pct exec 104 -- systemctl restart flowise
# Logs
pct exec 104 -- journalctl -u flowise -f
```
## Configurare ngrok
**Configurare**: `/root/.config/ngrok/ngrok.yml`
```yaml
version: "2"
authtoken: 2mo9quiDc23B6U3TtTqWJEleEfM_jYeD1KYe9u7njaaQMZg2
tunnels:
web:
proto: http
addr: http://10.0.20.161:3000
domain: mutual-special-koala.ngrok-free.app
```
**Serviciu systemd**: `/etc/systemd/system/ngrok.service`
**URL public**: https://mutual-special-koala.ngrok-free.app
**API endpoint chatbot**:
```
POST https://mutual-special-koala.ngrok-free.app/api/v1/prediction/d4911620-07fe-41f8-adb4-f2f52d6ec766
```
**Comenzi utile**:
```bash
# Status
pct exec 104 -- systemctl status ngrok
# Restart
pct exec 104 -- systemctl restart ngrok
# Verificare tunel activ
pct exec 104 -- curl -s http://localhost:4040/api/tunnels
# Verificare versiune
pct exec 104 -- /usr/local/bin/ngrok --version
# Actualizare ngrok
pct exec 104 -- /usr/local/bin/ngrok update
```
## Troubleshooting
### Eroare CORS
**Simptom**: Browser-ul afișează eroare CORS când se încarcă chatbot-ul.
**Cauza**: Flowise nu are configurată variabila `CORS_ORIGINS`.
**Soluție**: Adaugă în `/etc/systemd/system/flowise.service`:
```
Environment=CORS_ORIGINS=https://www.romfast.ro,https://romfast.ro
```
Apoi: `systemctl daemon-reload && systemctl restart flowise`
### Eroare ngrok versiune veche (ERR_NGROK_121)
**Simptom**: În logs apare:
```
Your ngrok-agent version "3.16.0" is too old. The minimum supported agent version is "3.19.0"
```
**Cauza**: ngrok a fost actualizat dar serviciul nu a fost restartat. Procesul vechi continuă să ruleze.
**Soluție**:
```bash
# Actualizare (dacă nu e deja făcută)
pct exec 104 -- /usr/local/bin/ngrok update
# IMPORTANT: Restart după actualizare
pct exec 104 -- systemctl restart ngrok
```
### Verificare rapidă că totul funcționează
```bash
# Test local Flowise
pct exec 104 -- curl -s http://localhost:3000/ | head -5
# Test tunel ngrok
curl -s "https://mutual-special-koala.ngrok-free.app/api/v1/prediction/d4911620-07fe-41f8-adb4-f2f52d6ec766" \
-X POST -H "Content-Type: application/json" \
-d '{"question":"test"}'
```
## Pagina web
URL: https://www.romfast.ro/chatbot_maria.html
Pagina încarcă widget-ul Flowise care se conectează la endpoint-ul ngrok.
## Istoric incidente
### 2025-12-30: Chatbot nu funcționa (CORS + ngrok versiune)
- **Problemă 1**: Flowise nu avea CORS configurat
- **Problemă 2**: ngrok rula versiunea 3.16.0 (actualizată dar nerestartat din octombrie)
- **Soluție**: Adăugat CORS_ORIGINS și restart la ambele servicii
---
## Legături Utile
- **Proxmox Index:** `../README.md`
- **Cluster Info:** `../cluster/README.md`
---
**Ultima actualizare:** 2026-01-27
**Autor:** Marius Mutu
# LXC 104 - Flowise AI (Chatbot Maria)
> **Care chatbot e care?** Exista trei lucruri numite „Maria", doi boti pe Discord si
> doua punti WhatsApp legate la acelasi numar. Inainte de a depana, citeste
> [`docs/chatboti-si-punti.md`](../../docs/chatboti-si-punti.md) — spune care instanta raspunde de fapt.
**Director:** `proxmox/lxc104-flowise/`
**VMID:** 104
**IP:** 10.0.20.161
**Host Proxmox:** pvemini
**Servicii:** Flowise AI, ngrok tunnel, Ollama (opțional)
---
## Documentație Adițională
| Fișier | Descriere |
|--------|-----------|
| `docs/prd.md` | Product Requirements Document - Chatbot Suport Tehnic |
| `docs/v1-arhitectura.md` | Arhitectură versiunea 1 (Flowise + Groq) |
| `docs/v2-arhitectura.md` | Arhitectură versiunea 2 (Claude Agent SDK) |
---
## Componente
| Componenta | Locație | IP | Port |
|------------|---------|-----|------|
| Flowise | LXC 104 | 10.0.20.161 | 3000 |
| ngrok tunnel | LXC 104 | 10.0.20.161 | - |
| Pagina chatbot | romfast.ro | - | 443 |
## Configurare Flowise
**Serviciu systemd**: `/etc/systemd/system/flowise.service`
```ini
[Unit]
Description=Flowise Service
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/bin/npx flowise start
Restart=always
Environment=PORT=3000
Environment=FLOWISE_USERNAME=admin
Environment=FLOWISE_PASSWORD=parola28
Environment=CORS_ORIGINS=https://www.romfast.ro,https://romfast.ro
WorkingDirectory=/root/.flowise
Environment=FLOWISE_DATABASE_PATH=/root/.flowise/database.sqlite
[Install]
WantedBy=multi-user.target
```
**Comenzi utile**:
```bash
# Status
pct exec 104 -- systemctl status flowise
# Restart
pct exec 104 -- systemctl restart flowise
# Logs
pct exec 104 -- journalctl -u flowise -f
```
## Configurare ngrok
**Configurare**: `/root/.config/ngrok/ngrok.yml`
```yaml
version: "2"
authtoken: 2mo9quiDc23B6U3TtTqWJEleEfM_jYeD1KYe9u7njaaQMZg2
tunnels:
web:
proto: http
addr: http://10.0.20.161:3000
domain: mutual-special-koala.ngrok-free.app
```
**Serviciu systemd**: `/etc/systemd/system/ngrok.service`
**URL public**: https://mutual-special-koala.ngrok-free.app
**API endpoint chatbot**:
```
POST https://mutual-special-koala.ngrok-free.app/api/v1/prediction/d4911620-07fe-41f8-adb4-f2f52d6ec766
```
**Comenzi utile**:
```bash
# Status
pct exec 104 -- systemctl status ngrok
# Restart
pct exec 104 -- systemctl restart ngrok
# Verificare tunel activ
pct exec 104 -- curl -s http://localhost:4040/api/tunnels
# Verificare versiune
pct exec 104 -- /usr/local/bin/ngrok --version
# Actualizare ngrok
pct exec 104 -- /usr/local/bin/ngrok update
```
## Troubleshooting
### Eroare CORS
**Simptom**: Browser-ul afișează eroare CORS când se încarcă chatbot-ul.
**Cauza**: Flowise nu are configurată variabila `CORS_ORIGINS`.
**Soluție**: Adaugă în `/etc/systemd/system/flowise.service`:
```
Environment=CORS_ORIGINS=https://www.romfast.ro,https://romfast.ro
```
Apoi: `systemctl daemon-reload && systemctl restart flowise`
### Eroare ngrok versiune veche (ERR_NGROK_121)
**Simptom**: În logs apare:
```
Your ngrok-agent version "3.16.0" is too old. The minimum supported agent version is "3.19.0"
```
**Cauza**: ngrok a fost actualizat dar serviciul nu a fost restartat. Procesul vechi continuă să ruleze.
**Soluție**:
```bash
# Actualizare (dacă nu e deja făcută)
pct exec 104 -- /usr/local/bin/ngrok update
# IMPORTANT: Restart după actualizare
pct exec 104 -- systemctl restart ngrok
```
### Verificare rapidă că totul funcționează
```bash
# Test local Flowise
pct exec 104 -- curl -s http://localhost:3000/ | head -5
# Test tunel ngrok
curl -s "https://mutual-special-koala.ngrok-free.app/api/v1/prediction/d4911620-07fe-41f8-adb4-f2f52d6ec766" \
-X POST -H "Content-Type: application/json" \
-d '{"question":"test"}'
```
## Pagina web
URL: https://www.romfast.ro/chatbot_maria.html
Pagina încarcă widget-ul Flowise care se conectează la endpoint-ul ngrok.
## Istoric incidente
### 2025-12-30: Chatbot nu funcționa (CORS + ngrok versiune)
- **Problemă 1**: Flowise nu avea CORS configurat
- **Problemă 2**: ngrok rula versiunea 3.16.0 (actualizată dar nerestartat din octombrie)
- **Soluție**: Adăugat CORS_ORIGINS și restart la ambele servicii
---
## Legături Utile
- **Proxmox Index:** `../README.md`
- **Cluster Info:** `../cluster/README.md`
---
**Ultima actualizare:** 2026-01-27
**Autor:** Marius Mutu

View File

@@ -1,447 +1,451 @@
# LXC 110 - MoltBot (AI Chatbot)
**Director:** `proxmox/lxc110-moltbot/`
**VMID:** 110
**IP:** 10.0.20.173 (intern) | 100.120.119.70 (Tailscale)
**Host Proxmox:** pve1 (10.0.20.200)
**Rol:** Bot AI pentru Telegram și WhatsApp cu Claude Opus 4.5
---
## ⚠️ Status actual (verificat 2026-08-30)
Stack-ul activ e **echo-core** (Python, `/home/moltbot/echo-core`), NU clawdbot/OpenClaw.
Servicii `systemctl --user` active:
| Serviciu | Status | Descriere |
|----------|--------|-----------|
| `echo-core.service` | ✅ active running | Echo Core Bot (Discord + Telegram + WhatsApp), `python3 src/main.py` |
| `echo-taskboard.service` | ✅ active running | Echo Task Board API (dashboard) |
| `echo-whatsapp-bridge.service` | ✅ active running | Echo Core WhatsApp Bridge (Baileys, Node) |
| `pocket-tts.service` | ✅ active running | Pocket TTS (Kyutai) |
| `supertonic-tts.service` | ✅ active running | Supertonic TTS |
| `clawdbot-gateway.service` | ❌ not-found / dead | vechi, nu mai există ca unit |
| `openclaw-gateway` | ❌ nu există ca unit systemd | — |
CLI-ul `openclaw` (fostul `clawdbot`) e instalat (`/usr/bin/openclaw`, v2026.2.9) dar **nu mai e
funcțional**: config-ul din `~/.openclaw/openclaw.json` a fost scris de o versiune mai nouă
(2026.2.15), iar `openclaw status` dă `gateway closed (1006 abnormal closure)` pe
`ws://127.0.0.1:18789` — gateway-ul lui nu rulează (nu mai e serviciu systemd pentru el).
Comenzile `clawdbot ...` din secțiunile de mai jos **nu mai sunt valabile** — folosește
`systemctl --user status/restart echo-core` și `journalctl --user -u echo-core -f` în loc.
Secțiunile "MoltBot - Comenzi" / "Configurare Gateway" / "Servicii Systemd" de mai jos
documentează arhitectura veche (clawdbot/OpenClaw) — păstrate ca referință istorică, dar
nu mai reflectă ce rulează efectiv pe container.
---
## Informații Container
| Parametru | Valoare |
|-----------|---------|
| VMID | 110 |
| Hostname | moltbot |
| IP intern | 10.0.20.173 |
| IP Tailscale | 100.120.119.70 |
| Host Proxmox | pve1 (10.0.20.200) |
| User serviciu | `moltbot` |
| Parola user | `Moltbot2026!` |
| Storage | local-zfs (50GB) |
| RAM | 8GB (+ 4GB swap) |
| CPU | 6 cores |
| DNS | `10.0.20.1 1.1.1.1` (explicit, vezi mai jos) |
| OS | Ubuntu 24.04 LTS |
## Componente Instalate
- Ubuntu 24.04 LTS
- OpenClaw v2026.2.9 (upgraded from MoltBot/clawdbot)
- Node.js v22.22.0 (user-space)
- Bun v1.3.7
- Tailscale (pentru SSH, fără funnel)
- UFW Firewall
- Fail2ban
## Canale Configurate
| Canal | Status | Detalii |
|-------|--------|---------|
| **Telegram** | ✅ ON | Bot token configurat |
| **WhatsApp** | ✅ ON | Linked la +40723197939 |
## Model AI
- **Provider:** Anthropic
- **Model:** claude-opus-4-5
- **Context:** 200k tokens
## Securitate
| Măsură | Status |
|--------|--------|
| User dedicat (non-root) | `moltbot` |
| SSH key-only auth | Activat |
| UFW Firewall | Activat |
| Fail2ban SSH | Activat |
| Tailscale SSH | Activat |
| Sudo limitat | Doar `systemctl` |
| Linger enabled | Da (serviciu persistent) |
### Reguli Firewall UFW
```
22/tcp ALLOW IN Anywhere
18789 ALLOW IN 10.0.20.0/24 (MoltBot Dashboard)
Anywhere ALLOW IN 10.0.20.0/24 (rețea locală)
Anywhere ALLOW IN 100.64.0.0/10 (Tailscale)
```
### Configurare Sudo
User `moltbot` are sudo passwordless doar pentru:
- `systemctl status *`
- `systemctl start *`
- `systemctl stop *`
- `systemctl restart *`
## Conectare
### SSH (rețea internă)
```bash
ssh moltbot@10.0.20.173
```
### SSH (Tailscale - de oriunde)
```bash
ssh moltbot@100.120.119.70
```
### Acces root (pentru administrare)
```bash
ssh root@10.0.20.173
```
## MoltBot - Comenzi
### Terminal UI (TUI)
```bash
# Conectare și TUI într-o singură comandă
ssh -t moltbot@10.0.20.173 "clawdbot tui"
# Sau conectare separată
ssh moltbot@10.0.20.173
clawdbot tui
```
### Web Dashboard (via SSH Tunnel)
```bash
# Pe calculatorul local, deschide tunnel
ssh -L 18789:127.0.0.1:18789 -N moltbot@10.0.20.173 &
# Apoi accesează în browser
# http://localhost:18789
```
### Comenzi utile
```bash
# Status complet
clawdbot status
# Status detaliat
clawdbot status --deep
# Verificare versiune
clawdbot --version
# Restart gateway
clawdbot gateway restart
# Vezi loguri live
clawdbot logs --follow
# Verificare canale
clawdbot status --deep
# Gestionare dispozitive (pairing)
clawdbot devices list
clawdbot devices approve <request-id>
```
## Configurare Gateway
| Parametru | Valoare |
|-----------|---------|
| Port | 18789 |
| Bind | loopback (doar local) |
| Auth | token + password |
| Tailscale mode | off |
### Fișiere configurare
| Fișier | Descriere |
|--------|-----------|
| `~/.clawdbot/clawdbot.json` | Configurare principală |
| `~/.clawdbot/logs/gateway.log` | Loguri gateway |
| `~/.clawdbot/agents/main/sessions/` | Sesiuni agent |
| `~/.clawdbot/credentials/` | Credențiale (chmod 700) |
## Structura Directoare
```
/home/moltbot/
├── .ssh/
│ └── authorized_keys # Chei SSH pentru acces
├── .bun/ # Bun runtime
├── .local/
│ └── share/moltbot/
│ └── node/ # Node.js user-space
├── .clawdbot/
│ ├── clawdbot.json # Config MoltBot
│ ├── credentials/ # Credențiale (chmod 700)
│ ├── agents/
│ │ └── main/
│ │ └── sessions/ # Sesiuni chat
│ └── logs/
│ └── gateway.log # Loguri
├── clawd/ # Workspace pentru agent
└── .bashrc # PATH pentru node/bun
```
## Servicii Systemd
### Gateway Service
```bash
# Status
systemctl --user status clawdbot-gateway
# Restart
systemctl --user restart clawdbot-gateway
# Logs
journalctl --user -u clawdbot-gateway -f
```
## Administrare via Proxmox
### De pe pve1 (sau alt nod cluster)
```bash
# Status container
ssh root@10.0.20.200 "pct status 110"
# Exec comandă
ssh root@10.0.20.200 "pct exec 110 -- <comandă>"
# Stop/Start
ssh root@10.0.20.200 "pct stop 110"
ssh root@10.0.20.200 "pct start 110"
# Console
ssh root@10.0.20.200 "pct enter 110"
```
## DNS & Swap (incident 2026-07-31)
### DNS — nu depinde de Tailscale
Containerul **nu** avea `nameserver` în `pct config`, deci moștenea `/etc/resolv.conf` de
la host-ul pve1 — unde fișierul e scris de Tailscale și conținea doar MagicDNS
(`100.100.100.100`). Când `tailscaled` din container s-a delogat, DNS-ul a murit complet
(deși L3 era OK: `ping 8.8.8.8` funcționa) → `echo-core` în crash-loop pe
`telegram.error.TimedOut`.
Fix aplicat — nameserver explicit:
```bash
ssh root@10.0.20.200 "pct set 110 --nameserver '10.0.20.1 1.1.1.1'"
```
> **Regula de diagnostic:** la „nu mai ajunge la internet", verifică întâi
> `getent hosts api.telegram.org` și `cat /etc/resolv.conf`, **nu** ping-ul.
> Ping-ul poate merge perfect cu DNS-ul complet mort.
### Swap — necesită zram pe host
`swap: 4096` din `pct config` e doar o limită cgroup (`memory.swap.max`), nu un backing
store. Cât timp pve1 nu avea swap deloc, în container `free -h` arăta `Swap: 0B`.
Rezolvat prin zram pe pve1 (root-ul e pe ZFS → swapfile exclus):
```bash
# pe pve1 (host)
apt install -y zram-tools
cat > /etc/default/zramswap <<'EOF'
ALGO=zstd
SIZE=8192
PRIORITY=100
EOF
systemctl restart zramswap.service
swapon --show # /dev/zram0 8G prio 100
```
Verificare în container: `free -h` → `Swap: 4.0Gi`.
### Limite de memorie pe TTS
Serviciile user systemd rulau toate cu `MemoryMax=infinity` / `MemoryHigh=infinity`, deci
oricare putea consuma singur cei 8 GB → OOM-uri recurente (Apr 25, May 28 ×4, Jul 31), cu
victime aparent aleatorii (`dbus-daemon`, `sd-pam`) alese după `oom_score_adj`.
Aplicat pe stiva TTS — `MemoryHigh` face throttle + reclaim în loc de kill:
| Serviciu | RSS repaus | MemoryHigh | MemoryMax |
|----------|-----------|------------|-----------|
| `pocket-tts` | ~945 MB | 1536M | 2G |
| `supertonic-tts` | ~500 MB | 1024M | 1536M |
Drop-in-uri: `~/.config/systemd/user/<serviciu>.service.d/limits.conf`
```bash
su - moltbot
export XDG_RUNTIME_DIR=/run/user/1000
systemctl --user show pocket-tts -p MemoryHigh,MemoryMax,MemoryCurrent
```
**Post-mortem complet:** `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md`
## Troubleshooting
### OpenClaw gateway se restartează continuu (OOM kill)
```bash
# Verifică dacă este omorât de OOM killer
journalctl --user -u openclaw-gateway | grep -i oom
# Verifică consumul de memorie
free -h
systemctl --user status openclaw-gateway
# Verifică dacă OOM-ul e local containerului sau al host-ului
# ssh root@10.0.20.200 "cat /sys/fs/cgroup/lxc/110/memory.events" # oom_kill > 0 => local
# ssh root@10.0.20.200 "free -h; swapon --show" # zram0 8G activ?
# Soluție: Crește RAM-ul containerului pe Proxmox (actual: 8192)
# ssh root@10.0.20.200
# pct stop 110
# pct set 110 --memory 12288
# pct start 110
# Curăță sesiunile vechi pentru a reduce consumul
openclaw sessions clean --older-than 7d
```
### MoltBot gateway nu pornește
```bash
# Verifică logs
clawdbot logs --follow
# Verifică status
clawdbot status
# Restart
clawdbot gateway restart
# Rulare manuală pentru debug
/usr/bin/node /usr/lib/node_modules/clawdbot/dist/entry.js gateway --port 18789
```
### Gateway unreachable
```bash
# Verifică dacă portul e ocupat
ss -tlnp | grep 18789
# Verifică serviciul systemd
systemctl --user status clawdbot-gateway
# Restart complet
systemctl --user restart clawdbot-gateway
```
### Eroare "gateway not connected" în TUI
```bash
# Gateway-ul probabil s-a oprit, restartează-l
clawdbot gateway restart
```
### Telegram/WhatsApp nu răspunde
```bash
# Verifică starea canalelor
clawdbot status --deep
# Pentru Telegram, verifică token-ul
grep botToken ~/.clawdbot/clawdbot.json
# Pentru WhatsApp, verifică link-ul
clawdbot status | grep WhatsApp
```
### Probleme de permisiuni
```bash
# Setează permisiunile corecte
chmod 700 ~/.clawdbot
chmod 700 ~/.clawdbot/credentials
chmod 600 ~/.clawdbot/clawdbot.json
```
### Tailscale nu funcționează
```bash
sudo systemctl status tailscaled
sudo tailscale status
tailscale ip
```
## Backup
### Backup configurare MoltBot
```bash
# De pe mașina locală
scp -r moltbot@10.0.20.173:~/.clawdbot ./backup-moltbot-$(date +%Y%m%d)/
```
### Backup complet LXC (via Proxmox)
```bash
ssh root@10.0.20.200 "vzdump 110 --storage local --compress zstd"
```
## Provider AI - Anthropic
MoltBot folosește Anthropic Claude prin API key configurat în:
- Config: `~/.clawdbot/clawdbot.json` → `auth.profiles.anthropic:default`
- Credențiale: `~/.clawdbot/credentials/`
### Monitorizare costuri
- Dashboard Anthropic: https://console.anthropic.com/settings/usage
- Sesiune curentă: ~132k/200k tokens (66%)
## Reconfigurare (dacă e necesar)
### Rulare wizard onboarding
```bash
clawdbot onboard
```
### Resetare completă
```bash
# Oprește gateway
clawdbot gateway stop
# Backup config vechi
mv ~/.clawdbot ~/.clawdbot.backup
# Rulează onboarding fresh
clawdbot onboard
```
---
## Legături Utile
- **Proxmox Index:** `../README.md`
- **Documentație MoltBot:** https://docs.molt.bot
- **MoltBot oficial:** https://molt.bot
- **Ghid deployment:** https://merox.dev/blog/moltbot-proxmox-deployment/
---
**Data setup:** 2026-01-29
**Ultima actualizare:** 2026-07-31 (host pve1, DNS explicit, zram — incident DNS/OOM)
**Autor:** Claude Code
# LXC 110 - MoltBot (AI Chatbot)
> **Care chatbot e care?** Exista trei lucruri numite „Maria", doi boti pe Discord si
> doua punti WhatsApp legate la acelasi numar. Inainte de a depana, citeste
> [`docs/chatboti-si-punti.md`](../../docs/chatboti-si-punti.md) — spune care instanta raspunde de fapt.
**Director:** `proxmox/lxc110-moltbot/`
**VMID:** 110
**IP:** 10.0.20.173 (intern) | 100.120.119.70 (Tailscale)
**Host Proxmox:** pve1 (10.0.20.200)
**Rol:** Bot AI pentru Telegram și WhatsApp cu Claude Opus 4.5
---
## ⚠️ Status actual (verificat 2026-08-30)
Stack-ul activ e **echo-core** (Python, `/home/moltbot/echo-core`), NU clawdbot/OpenClaw.
Servicii `systemctl --user` active:
| Serviciu | Status | Descriere |
|----------|--------|-----------|
| `echo-core.service` | ✅ active running | Echo Core Bot (Discord + Telegram + WhatsApp), `python3 src/main.py` |
| `echo-taskboard.service` | ✅ active running | Echo Task Board API (dashboard) |
| `echo-whatsapp-bridge.service` | ✅ active running | Echo Core WhatsApp Bridge (Baileys, Node) |
| `pocket-tts.service` | ✅ active running | Pocket TTS (Kyutai) |
| `supertonic-tts.service` | ✅ active running | Supertonic TTS |
| `clawdbot-gateway.service` | ❌ not-found / dead | vechi, nu mai există ca unit |
| `openclaw-gateway` | ❌ nu există ca unit systemd | — |
CLI-ul `openclaw` (fostul `clawdbot`) e instalat (`/usr/bin/openclaw`, v2026.2.9) dar **nu mai e
funcțional**: config-ul din `~/.openclaw/openclaw.json` a fost scris de o versiune mai nouă
(2026.2.15), iar `openclaw status` dă `gateway closed (1006 abnormal closure)` pe
`ws://127.0.0.1:18789` — gateway-ul lui nu rulează (nu mai e serviciu systemd pentru el).
Comenzile `clawdbot ...` din secțiunile de mai jos **nu mai sunt valabile** — folosește
`systemctl --user status/restart echo-core` și `journalctl --user -u echo-core -f` în loc.
Secțiunile "MoltBot - Comenzi" / "Configurare Gateway" / "Servicii Systemd" de mai jos
documentează arhitectura veche (clawdbot/OpenClaw) — păstrate ca referință istorică, dar
nu mai reflectă ce rulează efectiv pe container.
---
## Informații Container
| Parametru | Valoare |
|-----------|---------|
| VMID | 110 |
| Hostname | moltbot |
| IP intern | 10.0.20.173 |
| IP Tailscale | 100.120.119.70 |
| Host Proxmox | pve1 (10.0.20.200) |
| User serviciu | `moltbot` |
| Parola user | `Moltbot2026!` |
| Storage | local-zfs (50GB) |
| RAM | 8GB (+ 4GB swap) |
| CPU | 6 cores |
| DNS | `10.0.20.1 1.1.1.1` (explicit, vezi mai jos) |
| OS | Ubuntu 24.04 LTS |
## Componente Instalate
- Ubuntu 24.04 LTS
- OpenClaw v2026.2.9 (upgraded from MoltBot/clawdbot)
- Node.js v22.22.0 (user-space)
- Bun v1.3.7
- Tailscale (pentru SSH, fără funnel)
- UFW Firewall
- Fail2ban
## Canale Configurate
| Canal | Status | Detalii |
|-------|--------|---------|
| **Telegram** | ✅ ON | Bot token configurat |
| **WhatsApp** | ✅ ON | Linked la +40723197939 |
## Model AI
- **Provider:** Anthropic
- **Model:** claude-opus-4-5
- **Context:** 200k tokens
## Securitate
| Măsură | Status |
|--------|--------|
| User dedicat (non-root) | `moltbot` |
| SSH key-only auth | Activat |
| UFW Firewall | Activat |
| Fail2ban SSH | Activat |
| Tailscale SSH | Activat |
| Sudo limitat | Doar `systemctl` |
| Linger enabled | Da (serviciu persistent) |
### Reguli Firewall UFW
```
22/tcp ALLOW IN Anywhere
18789 ALLOW IN 10.0.20.0/24 (MoltBot Dashboard)
Anywhere ALLOW IN 10.0.20.0/24 (rețea locală)
Anywhere ALLOW IN 100.64.0.0/10 (Tailscale)
```
### Configurare Sudo
User `moltbot` are sudo passwordless doar pentru:
- `systemctl status *`
- `systemctl start *`
- `systemctl stop *`
- `systemctl restart *`
## Conectare
### SSH (rețea internă)
```bash
ssh moltbot@10.0.20.173
```
### SSH (Tailscale - de oriunde)
```bash
ssh moltbot@100.120.119.70
```
### Acces root (pentru administrare)
```bash
ssh root@10.0.20.173
```
## MoltBot - Comenzi
### Terminal UI (TUI)
```bash
# Conectare și TUI într-o singură comandă
ssh -t moltbot@10.0.20.173 "clawdbot tui"
# Sau conectare separată
ssh moltbot@10.0.20.173
clawdbot tui
```
### Web Dashboard (via SSH Tunnel)
```bash
# Pe calculatorul local, deschide tunnel
ssh -L 18789:127.0.0.1:18789 -N moltbot@10.0.20.173 &
# Apoi accesează în browser
# http://localhost:18789
```
### Comenzi utile
```bash
# Status complet
clawdbot status
# Status detaliat
clawdbot status --deep
# Verificare versiune
clawdbot --version
# Restart gateway
clawdbot gateway restart
# Vezi loguri live
clawdbot logs --follow
# Verificare canale
clawdbot status --deep
# Gestionare dispozitive (pairing)
clawdbot devices list
clawdbot devices approve <request-id>
```
## Configurare Gateway
| Parametru | Valoare |
|-----------|---------|
| Port | 18789 |
| Bind | loopback (doar local) |
| Auth | token + password |
| Tailscale mode | off |
### Fișiere configurare
| Fișier | Descriere |
|--------|-----------|
| `~/.clawdbot/clawdbot.json` | Configurare principală |
| `~/.clawdbot/logs/gateway.log` | Loguri gateway |
| `~/.clawdbot/agents/main/sessions/` | Sesiuni agent |
| `~/.clawdbot/credentials/` | Credențiale (chmod 700) |
## Structura Directoare
```
/home/moltbot/
├── .ssh/
│ └── authorized_keys # Chei SSH pentru acces
├── .bun/ # Bun runtime
├── .local/
│ └── share/moltbot/
│ └── node/ # Node.js user-space
├── .clawdbot/
│ ├── clawdbot.json # Config MoltBot
│ ├── credentials/ # Credențiale (chmod 700)
│ ├── agents/
│ │ └── main/
│ │ └── sessions/ # Sesiuni chat
│ └── logs/
│ └── gateway.log # Loguri
├── clawd/ # Workspace pentru agent
└── .bashrc # PATH pentru node/bun
```
## Servicii Systemd
### Gateway Service
```bash
# Status
systemctl --user status clawdbot-gateway
# Restart
systemctl --user restart clawdbot-gateway
# Logs
journalctl --user -u clawdbot-gateway -f
```
## Administrare via Proxmox
### De pe pve1 (sau alt nod cluster)
```bash
# Status container
ssh root@10.0.20.200 "pct status 110"
# Exec comandă
ssh root@10.0.20.200 "pct exec 110 -- <comandă>"
# Stop/Start
ssh root@10.0.20.200 "pct stop 110"
ssh root@10.0.20.200 "pct start 110"
# Console
ssh root@10.0.20.200 "pct enter 110"
```
## DNS & Swap (incident 2026-07-31)
### DNS — nu depinde de Tailscale
Containerul **nu** avea `nameserver` în `pct config`, deci moștenea `/etc/resolv.conf` de
la host-ul pve1 — unde fișierul e scris de Tailscale și conținea doar MagicDNS
(`100.100.100.100`). Când `tailscaled` din container s-a delogat, DNS-ul a murit complet
(deși L3 era OK: `ping 8.8.8.8` funcționa) → `echo-core` în crash-loop pe
`telegram.error.TimedOut`.
Fix aplicat — nameserver explicit:
```bash
ssh root@10.0.20.200 "pct set 110 --nameserver '10.0.20.1 1.1.1.1'"
```
> **Regula de diagnostic:** la „nu mai ajunge la internet", verifică întâi
> `getent hosts api.telegram.org` și `cat /etc/resolv.conf`, **nu** ping-ul.
> Ping-ul poate merge perfect cu DNS-ul complet mort.
### Swap — necesită zram pe host
`swap: 4096` din `pct config` e doar o limită cgroup (`memory.swap.max`), nu un backing
store. Cât timp pve1 nu avea swap deloc, în container `free -h` arăta `Swap: 0B`.
Rezolvat prin zram pe pve1 (root-ul e pe ZFS → swapfile exclus):
```bash
# pe pve1 (host)
apt install -y zram-tools
cat > /etc/default/zramswap <<'EOF'
ALGO=zstd
SIZE=8192
PRIORITY=100
EOF
systemctl restart zramswap.service
swapon --show # /dev/zram0 8G prio 100
```
Verificare în container: `free -h` → `Swap: 4.0Gi`.
### Limite de memorie pe TTS
Serviciile user systemd rulau toate cu `MemoryMax=infinity` / `MemoryHigh=infinity`, deci
oricare putea consuma singur cei 8 GB → OOM-uri recurente (Apr 25, May 28 ×4, Jul 31), cu
victime aparent aleatorii (`dbus-daemon`, `sd-pam`) alese după `oom_score_adj`.
Aplicat pe stiva TTS — `MemoryHigh` face throttle + reclaim în loc de kill:
| Serviciu | RSS repaus | MemoryHigh | MemoryMax |
|----------|-----------|------------|-----------|
| `pocket-tts` | ~945 MB | 1536M | 2G |
| `supertonic-tts` | ~500 MB | 1024M | 1536M |
Drop-in-uri: `~/.config/systemd/user/<serviciu>.service.d/limits.conf`
```bash
su - moltbot
export XDG_RUNTIME_DIR=/run/user/1000
systemctl --user show pocket-tts -p MemoryHigh,MemoryMax,MemoryCurrent
```
**Post-mortem complet:** `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md`
## Troubleshooting
### OpenClaw gateway se restartează continuu (OOM kill)
```bash
# Verifică dacă este omorât de OOM killer
journalctl --user -u openclaw-gateway | grep -i oom
# Verifică consumul de memorie
free -h
systemctl --user status openclaw-gateway
# Verifică dacă OOM-ul e local containerului sau al host-ului
# ssh root@10.0.20.200 "cat /sys/fs/cgroup/lxc/110/memory.events" # oom_kill > 0 => local
# ssh root@10.0.20.200 "free -h; swapon --show" # zram0 8G activ?
# Soluție: Crește RAM-ul containerului pe Proxmox (actual: 8192)
# ssh root@10.0.20.200
# pct stop 110
# pct set 110 --memory 12288
# pct start 110
# Curăță sesiunile vechi pentru a reduce consumul
openclaw sessions clean --older-than 7d
```
### MoltBot gateway nu pornește
```bash
# Verifică logs
clawdbot logs --follow
# Verifică status
clawdbot status
# Restart
clawdbot gateway restart
# Rulare manuală pentru debug
/usr/bin/node /usr/lib/node_modules/clawdbot/dist/entry.js gateway --port 18789
```
### Gateway unreachable
```bash
# Verifică dacă portul e ocupat
ss -tlnp | grep 18789
# Verifică serviciul systemd
systemctl --user status clawdbot-gateway
# Restart complet
systemctl --user restart clawdbot-gateway
```
### Eroare "gateway not connected" în TUI
```bash
# Gateway-ul probabil s-a oprit, restartează-l
clawdbot gateway restart
```
### Telegram/WhatsApp nu răspunde
```bash
# Verifică starea canalelor
clawdbot status --deep
# Pentru Telegram, verifică token-ul
grep botToken ~/.clawdbot/clawdbot.json
# Pentru WhatsApp, verifică link-ul
clawdbot status | grep WhatsApp
```
### Probleme de permisiuni
```bash
# Setează permisiunile corecte
chmod 700 ~/.clawdbot
chmod 700 ~/.clawdbot/credentials
chmod 600 ~/.clawdbot/clawdbot.json
```
### Tailscale nu funcționează
```bash
sudo systemctl status tailscaled
sudo tailscale status
tailscale ip
```
## Backup
### Backup configurare MoltBot
```bash
# De pe mașina locală
scp -r moltbot@10.0.20.173:~/.clawdbot ./backup-moltbot-$(date +%Y%m%d)/
```
### Backup complet LXC (via Proxmox)
```bash
ssh root@10.0.20.200 "vzdump 110 --storage local --compress zstd"
```
## Provider AI - Anthropic
MoltBot folosește Anthropic Claude prin API key configurat în:
- Config: `~/.clawdbot/clawdbot.json` → `auth.profiles.anthropic:default`
- Credențiale: `~/.clawdbot/credentials/`
### Monitorizare costuri
- Dashboard Anthropic: https://console.anthropic.com/settings/usage
- Sesiune curentă: ~132k/200k tokens (66%)
## Reconfigurare (dacă e necesar)
### Rulare wizard onboarding
```bash
clawdbot onboard
```
### Resetare completă
```bash
# Oprește gateway
clawdbot gateway stop
# Backup config vechi
mv ~/.clawdbot ~/.clawdbot.backup
# Rulează onboarding fresh
clawdbot onboard
```
---
## Legături Utile
- **Proxmox Index:** `../README.md`
- **Documentație MoltBot:** https://docs.molt.bot
- **MoltBot oficial:** https://molt.bot
- **Ghid deployment:** https://merox.dev/blog/moltbot-proxmox-deployment/
---
**Data setup:** 2026-01-29
**Ultima actualizare:** 2026-07-31 (host pve1, DNS explicit, zram — incident DNS/OOM)
**Autor:** Claude Code

View File

@@ -1,463 +1,467 @@
# LXC 171 - Claude Agent (Development Environment)
**Director:** `proxmox/lxc171-claude-agent/`
**VMID:** 171
**IP:** 10.0.20.171 (intern) | 100.95.55.51 (Tailscale)
**Host Proxmox:** pvemini (10.0.20.201)
**Rol:** Mediu de dezvoltare izolat pentru Claude Code
---
## Scripturi Disponibile
| Script | Descriere |
|--------|-----------|
| `scripts/start-agent.sh` | Pornește/atașează sesiune tmux "agent" |
| `scripts/work.sh` | Meniu interactiv pentru workflow complet |
| `scripts/new-task.sh` | Creează branch nou pentru task |
| `scripts/finish-task.sh` | Finalizează task (commit + push) |
| `scripts/reap-orphans.sh` | Curăță procese vscode-server orfane + sesiuni zombie (cron, anti-OOM) |
| `discord-bridge/` | Punte Discord → Claude Code: comanzi containerul dintr-un guild privat ([README](discord-bridge/README.md)) |
| `discord-bridge/dashboard/` | Dashboard de control al punții: stare, restart, orfani, confirmări ([README](discord-bridge/dashboard/README.md)) |
---
## Informații Container
| Parametru | Valoare |
|-----------|---------|
| VMID | 171 |
| Hostname | claude-agent |
| IP intern | 10.0.20.171 |
| IP Tailscale | 100.95.55.51 |
| Host Proxmox | pvemini (10.0.20.201) |
| User | claude |
| Storage | local-zfs (32GB) |
| RAM | 16GB (swap 8GB — vezi nota OOM mai jos) |
| CPU | 4 cores |
## Componente Instalate
- Ubuntu 24.04 LTS
- Node.js v20.x (via nvm)
- Claude Code
- tmux
- Git (configurat pentru Gitea)
- Tailscale
## Conectare
### De pe calculator (rețea internă)
```bash
ssh claude@10.0.20.171
```
### De pe telefon/exterior (Tailscale)
```bash
ssh claude@100.95.55.51
```
### VS Code Remote SSH
Config în `~/.ssh/config`:
```
Host claude-agent
HostName 10.0.20.171
User claude
```
## Scripturi Workflow
### start-agent.sh
Pornește sau se atașează la sesiunea tmux "agent".
```bash
~/start-agent.sh
```
### work.sh (recomandat)
Meniu interactiv pentru workflow complet:
- Listează proiectele disponibile în /workspace
- Permite crearea de branch-uri noi
- Continuarea pe branch-uri existente
- Finalizare task (commit + push)
- Vizualizare branch-uri
```bash
~/work.sh
```
### new-task.sh
Creează branch nou pentru un task (hardcodat pentru romfastsql).
```bash
~/new-task.sh fix/nume-bug
```
### finish-task.sh
Finalizează task-ul curent (commit + push).
```bash
~/finish-task.sh
```
## Workflow Complet
### De pe telefon (JuiceSSH + Tailscale)
1. Conectează-te la `100.95.55.51` cu user `claude`
2. Rulează:
```bash
~/start-agent.sh # pornește tmux
~/work.sh # meniu interactiv
```
3. Alege proiectul
4. Alege acțiunea (task nou / continuă / finalizează)
5. Lucrează cu Claude Code
6. Când termini: `~/work.sh` → opțiunea 3 (finalizează)
### De pe calculator (VS Code)
1. VS Code → Remote SSH → `claude-agent`
2. Open Folder → `/workspace/<proiect>`
3. Terminal → `source ~/.nvm/nvm.sh && claude`
## Structura Directoare pe LXC
```
/home/claude/
├── .ssh/
│ ├── authorized_keys # Chei SSH pentru acces
│ ├── gitea_ed25519 # Cheie pentru Gitea
│ └── config # Config SSH pentru Gitea
├── .nvm/ # Node Version Manager
├── .claude/
│ └── settings.json # Permisiuni Claude Code
├── .tmux.conf # Configurare tmux
├── start-agent.sh -> /workspace/start-agent.sh
└── work.sh -> /workspace/work.sh
/workspace/
├── start-agent.sh # Script pornire tmux
├── work.sh # Script workflow interactiv
├── new-task.sh # Script creare branch
├── finish-task.sh # Script finalizare task
├── CLAUDE.md # Info agent
├── SETUP-COMPLETE.md # Documentație setup
├── romfastsql/ # Proiect clonat
└── test/ # Alte proiecte
```
## Comenzi tmux Utile
| Comandă | Acțiune |
|---------|---------|
| `Ctrl+A, d` | Detașare din sesiune |
| `Ctrl+A, c` | Fereastră nouă |
| `Ctrl+A, n` | Fereastră următoare |
| `Ctrl+A, p` | Fereastră anterioară |
| `Ctrl+A, [` | Mod scroll (q pentru ieșire) |
| `tmux attach -t agent` | Reatașare la sesiune |
| `tmux ls` | Listare sesiuni |
## Git / Gitea
### Clonare proiect nou
```bash
cd /workspace
git clone git@gitea.romfast.ro:romfast/<nume-repo>.git
```
### Workflow branch-uri
```bash
git checkout main
git pull
git checkout -b feature/nume-feature
# ... lucrezi ...
git add .
git commit -m "descriere"
git push -u origin feature/nume-feature
# Creează Pull Request în Gitea
```
## Memorie & OOM (reaping orfane + zram)
### Context (incident 2026-06-24)
Containerul a generat OOM-uri repetate, izolate în cgroup-ul `/lxc/171` (NU la nivel de
host — host-ul avea memorie liberă). Cauzele combinate:
1. **Swap fictiv:** LXC 171 are `memory: 16384` + `swap: 8192`, dar host-ul **pvemini nu
avea swap deloc** → swap-ul containerului nu era backed de nimic. La atingerea celor
16GB se intra direct în OOM-kill, fără să poată face swap-out. Victimele tipice erau
procese mici cu `oom_score_adj` ridicat (`systemd`, `dbus-daemon`, `at-spi-bus-laun`,
`sd-pam`) din sesiunile `user@1000`.
2. **Acumulare de fond:** forks `~/.vscode-server` (servere VS Code Remote-SSH) rămase
orfane după ce conexiunea SSH moare — reparentate la init (PPID=1), vechi de zile — plus
sesiuni `systemd-logind` blocate în stare `closing`. Un spike ocazional de
Chromium/Playwright împingea totalul peste 16GB → OOM.
### Fix 1 — zram swap pe host (pvemini)
Root-ul pvemini e pe **ZFS**, deci **NU** se folosește swapfile (risc de deadlock). În loc,
zram (swap comprimat în RAM):
```bash
# pe pvemini (host)
apt install -y zram-tools
cat > /etc/default/zramswap <<'EOF'
ALGO=zstd
SIZE=8192
PRIORITY=100
EOF
systemctl restart zramswap.service # enabled persistent la boot
zramctl; swapon --show # verificare: /dev/zram0 8G zstd
```
Acum cei 8GB `swap` din configul LXC 171 au backing real → vârfurile tranzitorii fac
swap-out în loc de OOM-kill instant.
> **Același fix aplicat pe pve1 în 2026-07-31** (aceeași cauză: LXC 110 moltbot cu
> `swap: 4096` fictiv → OOM-kill în cgroup + reboot). Config identic, `SIZE=8192`.
> Vezi `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md`.
**Stare swap pe cluster (2026-07-31):**
| Nod | Swap | Tip |
|-----|------|-----|
| pvemini | 8G | zram0 (zstd, prio 100) |
| pve1 | 8G | zram0 (zstd, prio 100) |
| pveelite | 8G | zvol `/dev/zd64` (prio -2) — swap real, nu necesită zram |
### Fix 2 — reaping orfane (`scripts/reap-orphans.sh`, cron în 171)
Script conservator care rulează ca root **în interiorul containerului**, la fiecare 6 ore:
- omoară forks `~/.vscode-server` reparentate la init (PPID=1) **și** mai vechi de 24h
(conexiune SSH moartă);
- termină sesiunile `logind` în stare `closing` cu leader mort (`leader=0`).
Exclude explicit daemonul de bază `/usr/lib/code-server` (lansat de ttyd) și procesele
Claude Code (pot fi task-uri lungi legitime). Log în `/var/log/reap-orphans.log`.
```bash
# instalare în container (din host)
pct push 171 reap-orphans.sh /usr/local/sbin/reap-orphans.sh # sau deploy manual
pct exec 171 -- chmod +x /usr/local/sbin/reap-orphans.sh
# cron: /etc/cron.d/reap-orphans -> 0 */6 * * * root /usr/local/sbin/reap-orphans.sh
# rulare manuală + verificare
pct exec 171 -- /usr/local/sbin/reap-orphans.sh
pct exec 171 -- tail /var/log/reap-orphans.log
```
> ⚠️ **NU** folosi `loginctl terminate-session` pe sesiuni `closing` care au `leader != 0` —
> acelea pot fi sesiuni VS Code remote active de lucru. Doar zombiile cu `leader=0` sunt
> sigure (asta verifică și scriptul automat).
### Diagnostic rapid OOM
```bash
# pe host: confirmă că OOM e în cgroup-ul containerului, nu pe host
ssh root@10.0.20.201 "journalctl -k --since '1 hour ago' | grep -iE 'oom_memcg|Killed process'"
cat /sys/fs/cgroup/lxc/171/memory.events # oom / oom_kill counters
cat /sys/fs/cgroup/lxc/171/memory.current # consum curent vs memory.max (16G)
# în container: top consumatori + orfani + sesiuni
pct exec 171 -- bash -c "ps -eo pid,ppid,etimes,rss,comm --sort=-rss | head -20"
pct exec 171 -- loginctl list-sessions
```
---
## Troubleshooting
### Claude Code nu pornește
```bash
source ~/.nvm/nvm.sh
which claude
claude --version
```
### tmux nu găsește sesiunea
```bash
tmux ls
tmux new -s agent -c /workspace
```
### Git clone eșuează
```bash
# Testează conexiunea SSH la Gitea
ssh -T git@gitea.romfast.ro
```
### Tailscale nu funcționează
```bash
sudo systemctl status tailscaled
sudo tailscale status
tailscale ip
```
## Instalare Claude Code pe LXC nou (de la zero)
### 1. Creare LXC în Proxmox
```bash
# Pe Proxmox host (ex: pveelite)
pct create <VMID> local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname claude-agent \
--memory 4096 \
--cores 2 \
--rootfs local-zfs:32 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--features nesting=1 \
--unprivileged 1
pct start <VMID>
pct enter <VMID>
```
### 2. Setup sistem (ca root în LXC)
```bash
# Update și pachete de bază
apt update && apt upgrade -y
apt install -y curl git tmux sudo
# Creare user claude
useradd -m -s /bin/bash claude
echo "claude ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/claude
passwd claude # setează parola
# Creare /workspace
mkdir -p /workspace
chown claude:claude /workspace
```
### 3. Setup user claude
```bash
su - claude
# Instalare nvm + Node.js
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
nvm alias default 20
# Instalare Claude Code
npm install -g @anthropic-ai/claude-code
# Verificare
claude --version
```
### 4. Configurare Claude Code
```bash
mkdir -p ~/.claude
cat > ~/.claude/settings.json << 'EOF'
{
"permissions": {
"allow": [
"Bash(git *)",
"Bash(npm *)",
"Bash(node *)",
"Read",
"Write",
"Edit"
],
"deny": []
}
}
EOF
```
### 5. Configurare tmux
```bash
cat > ~/.tmux.conf << 'EOF'
set -g prefix C-a
unbind C-b
bind C-a send-prefix
set -g mouse on
set -g history-limit 50000
set -g default-terminal "screen-256color"
EOF
```
### 6. Configurare Git + SSH pentru Gitea
```bash
# Generare cheie SSH
ssh-keygen -t ed25519 -f ~/.ssh/gitea_ed25519 -N ""
# Config SSH
cat > ~/.ssh/config << 'EOF'
Host gitea.romfast.ro
HostName gitea.romfast.ro
User git
IdentityFile ~/.ssh/gitea_ed25519
IdentitiesOnly yes
EOF
chmod 600 ~/.ssh/config
# Afișează cheia publică (adaug-o în Gitea → Settings → SSH Keys)
cat ~/.ssh/gitea_ed25519.pub
# Config Git
git config --global user.name "Claude Agent"
git config --global user.email "claude@romfast.ro"
git config --global init.defaultBranch main
```
### 7. Instalare scripturi workflow
```bash
cd /workspace
# Copiază scripturile din acest repo (de pe mașina locală)
# SAU creează-le manual conform secțiunii "Scripturi Disponibile"
# Creare symlink-uri
ln -s /workspace/start-agent.sh ~/start-agent.sh
ln -s /workspace/work.sh ~/work.sh
chmod +x /workspace/*.sh
```
### 8. (Opțional) Instalare Tailscale
```bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# Autentifică-te cu contul Tailscale
tailscale ip # notează IP-ul
```
### 9. Clonare proiecte
```bash
cd /workspace
git clone git@gitea.romfast.ro:romfast/romfastsql.git
# alte proiecte...
```
### 10. Test final
```bash
~/start-agent.sh
# În tmux:
source ~/.nvm/nvm.sh
claude --version
~/work.sh
```
### Copiere rapidă scripturi (dacă ai alt LXC configurat)
```bash
# De pe mașina locală
scp proxmox/lxc171-claude-agent/scripts/*.sh claude@<ip>:/workspace/
ssh claude@<ip> "chmod +x /workspace/*.sh && ln -sf /workspace/start-agent.sh ~/start-agent.sh && ln -sf /workspace/work.sh ~/work.sh"
```
---
## Legături Utile
- **Proxmox Index:** `../README.md`
- **Gitea:** https://gitea.romfast.ro
---
**Data setup:** 2025-12-31
**Ultima actualizare:** 2026-06-24 (zram swap pvemini + reap-orphans cron, anti-OOM)
# LXC 171 - Claude Agent (Development Environment)
> **Care chatbot e care?** Exista trei lucruri numite „Maria", doi boti pe Discord si
> doua punti WhatsApp legate la acelasi numar. Inainte de a depana, citeste
> [`docs/chatboti-si-punti.md`](../../docs/chatboti-si-punti.md) — spune care instanta raspunde de fapt.
**Director:** `proxmox/lxc171-claude-agent/`
**VMID:** 171
**IP:** 10.0.20.171 (intern) | 100.95.55.51 (Tailscale)
**Host Proxmox:** pvemini (10.0.20.201)
**Rol:** Mediu de dezvoltare izolat pentru Claude Code
---
## Scripturi Disponibile
| Script | Descriere |
|--------|-----------|
| `scripts/start-agent.sh` | Pornește/atașează sesiune tmux "agent" |
| `scripts/work.sh` | Meniu interactiv pentru workflow complet |
| `scripts/new-task.sh` | Creează branch nou pentru task |
| `scripts/finish-task.sh` | Finalizează task (commit + push) |
| `scripts/reap-orphans.sh` | Curăță procese vscode-server orfane + sesiuni zombie (cron, anti-OOM) |
| `discord-bridge/` | Punte Discord → Claude Code: comanzi containerul dintr-un guild privat ([README](discord-bridge/README.md)) |
| `discord-bridge/dashboard/` | Dashboard de control al punții: stare, restart, orfani, confirmări ([README](discord-bridge/dashboard/README.md)) |
---
## Informații Container
| Parametru | Valoare |
|-----------|---------|
| VMID | 171 |
| Hostname | claude-agent |
| IP intern | 10.0.20.171 |
| IP Tailscale | 100.95.55.51 |
| Host Proxmox | pvemini (10.0.20.201) |
| User | claude |
| Storage | local-zfs (32GB) |
| RAM | 16GB (swap 8GB — vezi nota OOM mai jos) |
| CPU | 4 cores |
## Componente Instalate
- Ubuntu 24.04 LTS
- Node.js v20.x (via nvm)
- Claude Code
- tmux
- Git (configurat pentru Gitea)
- Tailscale
## Conectare
### De pe calculator (rețea internă)
```bash
ssh claude@10.0.20.171
```
### De pe telefon/exterior (Tailscale)
```bash
ssh claude@100.95.55.51
```
### VS Code Remote SSH
Config în `~/.ssh/config`:
```
Host claude-agent
HostName 10.0.20.171
User claude
```
## Scripturi Workflow
### start-agent.sh
Pornește sau se atașează la sesiunea tmux "agent".
```bash
~/start-agent.sh
```
### work.sh (recomandat)
Meniu interactiv pentru workflow complet:
- Listează proiectele disponibile în /workspace
- Permite crearea de branch-uri noi
- Continuarea pe branch-uri existente
- Finalizare task (commit + push)
- Vizualizare branch-uri
```bash
~/work.sh
```
### new-task.sh
Creează branch nou pentru un task (hardcodat pentru romfastsql).
```bash
~/new-task.sh fix/nume-bug
```
### finish-task.sh
Finalizează task-ul curent (commit + push).
```bash
~/finish-task.sh
```
## Workflow Complet
### De pe telefon (JuiceSSH + Tailscale)
1. Conectează-te la `100.95.55.51` cu user `claude`
2. Rulează:
```bash
~/start-agent.sh # pornește tmux
~/work.sh # meniu interactiv
```
3. Alege proiectul
4. Alege acțiunea (task nou / continuă / finalizează)
5. Lucrează cu Claude Code
6. Când termini: `~/work.sh` → opțiunea 3 (finalizează)
### De pe calculator (VS Code)
1. VS Code → Remote SSH → `claude-agent`
2. Open Folder → `/workspace/<proiect>`
3. Terminal → `source ~/.nvm/nvm.sh && claude`
## Structura Directoare pe LXC
```
/home/claude/
├── .ssh/
│ ├── authorized_keys # Chei SSH pentru acces
│ ├── gitea_ed25519 # Cheie pentru Gitea
│ └── config # Config SSH pentru Gitea
├── .nvm/ # Node Version Manager
├── .claude/
│ └── settings.json # Permisiuni Claude Code
├── .tmux.conf # Configurare tmux
├── start-agent.sh -> /workspace/start-agent.sh
└── work.sh -> /workspace/work.sh
/workspace/
├── start-agent.sh # Script pornire tmux
├── work.sh # Script workflow interactiv
├── new-task.sh # Script creare branch
├── finish-task.sh # Script finalizare task
├── CLAUDE.md # Info agent
├── SETUP-COMPLETE.md # Documentație setup
├── romfastsql/ # Proiect clonat
└── test/ # Alte proiecte
```
## Comenzi tmux Utile
| Comandă | Acțiune |
|---------|---------|
| `Ctrl+A, d` | Detașare din sesiune |
| `Ctrl+A, c` | Fereastră nouă |
| `Ctrl+A, n` | Fereastră următoare |
| `Ctrl+A, p` | Fereastră anterioară |
| `Ctrl+A, [` | Mod scroll (q pentru ieșire) |
| `tmux attach -t agent` | Reatașare la sesiune |
| `tmux ls` | Listare sesiuni |
## Git / Gitea
### Clonare proiect nou
```bash
cd /workspace
git clone git@gitea.romfast.ro:romfast/<nume-repo>.git
```
### Workflow branch-uri
```bash
git checkout main
git pull
git checkout -b feature/nume-feature
# ... lucrezi ...
git add .
git commit -m "descriere"
git push -u origin feature/nume-feature
# Creează Pull Request în Gitea
```
## Memorie & OOM (reaping orfane + zram)
### Context (incident 2026-06-24)
Containerul a generat OOM-uri repetate, izolate în cgroup-ul `/lxc/171` (NU la nivel de
host — host-ul avea memorie liberă). Cauzele combinate:
1. **Swap fictiv:** LXC 171 are `memory: 16384` + `swap: 8192`, dar host-ul **pvemini nu
avea swap deloc** → swap-ul containerului nu era backed de nimic. La atingerea celor
16GB se intra direct în OOM-kill, fără să poată face swap-out. Victimele tipice erau
procese mici cu `oom_score_adj` ridicat (`systemd`, `dbus-daemon`, `at-spi-bus-laun`,
`sd-pam`) din sesiunile `user@1000`.
2. **Acumulare de fond:** forks `~/.vscode-server` (servere VS Code Remote-SSH) rămase
orfane după ce conexiunea SSH moare — reparentate la init (PPID=1), vechi de zile — plus
sesiuni `systemd-logind` blocate în stare `closing`. Un spike ocazional de
Chromium/Playwright împingea totalul peste 16GB → OOM.
### Fix 1 — zram swap pe host (pvemini)
Root-ul pvemini e pe **ZFS**, deci **NU** se folosește swapfile (risc de deadlock). În loc,
zram (swap comprimat în RAM):
```bash
# pe pvemini (host)
apt install -y zram-tools
cat > /etc/default/zramswap <<'EOF'
ALGO=zstd
SIZE=8192
PRIORITY=100
EOF
systemctl restart zramswap.service # enabled persistent la boot
zramctl; swapon --show # verificare: /dev/zram0 8G zstd
```
Acum cei 8GB `swap` din configul LXC 171 au backing real → vârfurile tranzitorii fac
swap-out în loc de OOM-kill instant.
> **Același fix aplicat pe pve1 în 2026-07-31** (aceeași cauză: LXC 110 moltbot cu
> `swap: 4096` fictiv → OOM-kill în cgroup + reboot). Config identic, `SIZE=8192`.
> Vezi `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md`.
**Stare swap pe cluster (2026-07-31):**
| Nod | Swap | Tip |
|-----|------|-----|
| pvemini | 8G | zram0 (zstd, prio 100) |
| pve1 | 8G | zram0 (zstd, prio 100) |
| pveelite | 8G | zvol `/dev/zd64` (prio -2) — swap real, nu necesită zram |
### Fix 2 — reaping orfane (`scripts/reap-orphans.sh`, cron în 171)
Script conservator care rulează ca root **în interiorul containerului**, la fiecare 6 ore:
- omoară forks `~/.vscode-server` reparentate la init (PPID=1) **și** mai vechi de 24h
(conexiune SSH moartă);
- termină sesiunile `logind` în stare `closing` cu leader mort (`leader=0`).
Exclude explicit daemonul de bază `/usr/lib/code-server` (lansat de ttyd) și procesele
Claude Code (pot fi task-uri lungi legitime). Log în `/var/log/reap-orphans.log`.
```bash
# instalare în container (din host)
pct push 171 reap-orphans.sh /usr/local/sbin/reap-orphans.sh # sau deploy manual
pct exec 171 -- chmod +x /usr/local/sbin/reap-orphans.sh
# cron: /etc/cron.d/reap-orphans -> 0 */6 * * * root /usr/local/sbin/reap-orphans.sh
# rulare manuală + verificare
pct exec 171 -- /usr/local/sbin/reap-orphans.sh
pct exec 171 -- tail /var/log/reap-orphans.log
```
> ⚠️ **NU** folosi `loginctl terminate-session` pe sesiuni `closing` care au `leader != 0` —
> acelea pot fi sesiuni VS Code remote active de lucru. Doar zombiile cu `leader=0` sunt
> sigure (asta verifică și scriptul automat).
### Diagnostic rapid OOM
```bash
# pe host: confirmă că OOM e în cgroup-ul containerului, nu pe host
ssh root@10.0.20.201 "journalctl -k --since '1 hour ago' | grep -iE 'oom_memcg|Killed process'"
cat /sys/fs/cgroup/lxc/171/memory.events # oom / oom_kill counters
cat /sys/fs/cgroup/lxc/171/memory.current # consum curent vs memory.max (16G)
# în container: top consumatori + orfani + sesiuni
pct exec 171 -- bash -c "ps -eo pid,ppid,etimes,rss,comm --sort=-rss | head -20"
pct exec 171 -- loginctl list-sessions
```
---
## Troubleshooting
### Claude Code nu pornește
```bash
source ~/.nvm/nvm.sh
which claude
claude --version
```
### tmux nu găsește sesiunea
```bash
tmux ls
tmux new -s agent -c /workspace
```
### Git clone eșuează
```bash
# Testează conexiunea SSH la Gitea
ssh -T git@gitea.romfast.ro
```
### Tailscale nu funcționează
```bash
sudo systemctl status tailscaled
sudo tailscale status
tailscale ip
```
## Instalare Claude Code pe LXC nou (de la zero)
### 1. Creare LXC în Proxmox
```bash
# Pe Proxmox host (ex: pveelite)
pct create <VMID> local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname claude-agent \
--memory 4096 \
--cores 2 \
--rootfs local-zfs:32 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--features nesting=1 \
--unprivileged 1
pct start <VMID>
pct enter <VMID>
```
### 2. Setup sistem (ca root în LXC)
```bash
# Update și pachete de bază
apt update && apt upgrade -y
apt install -y curl git tmux sudo
# Creare user claude
useradd -m -s /bin/bash claude
echo "claude ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/claude
passwd claude # setează parola
# Creare /workspace
mkdir -p /workspace
chown claude:claude /workspace
```
### 3. Setup user claude
```bash
su - claude
# Instalare nvm + Node.js
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
nvm alias default 20
# Instalare Claude Code
npm install -g @anthropic-ai/claude-code
# Verificare
claude --version
```
### 4. Configurare Claude Code
```bash
mkdir -p ~/.claude
cat > ~/.claude/settings.json << 'EOF'
{
"permissions": {
"allow": [
"Bash(git *)",
"Bash(npm *)",
"Bash(node *)",
"Read",
"Write",
"Edit"
],
"deny": []
}
}
EOF
```
### 5. Configurare tmux
```bash
cat > ~/.tmux.conf << 'EOF'
set -g prefix C-a
unbind C-b
bind C-a send-prefix
set -g mouse on
set -g history-limit 50000
set -g default-terminal "screen-256color"
EOF
```
### 6. Configurare Git + SSH pentru Gitea
```bash
# Generare cheie SSH
ssh-keygen -t ed25519 -f ~/.ssh/gitea_ed25519 -N ""
# Config SSH
cat > ~/.ssh/config << 'EOF'
Host gitea.romfast.ro
HostName gitea.romfast.ro
User git
IdentityFile ~/.ssh/gitea_ed25519
IdentitiesOnly yes
EOF
chmod 600 ~/.ssh/config
# Afișează cheia publică (adaug-o în Gitea → Settings → SSH Keys)
cat ~/.ssh/gitea_ed25519.pub
# Config Git
git config --global user.name "Claude Agent"
git config --global user.email "claude@romfast.ro"
git config --global init.defaultBranch main
```
### 7. Instalare scripturi workflow
```bash
cd /workspace
# Copiază scripturile din acest repo (de pe mașina locală)
# SAU creează-le manual conform secțiunii "Scripturi Disponibile"
# Creare symlink-uri
ln -s /workspace/start-agent.sh ~/start-agent.sh
ln -s /workspace/work.sh ~/work.sh
chmod +x /workspace/*.sh
```
### 8. (Opțional) Instalare Tailscale
```bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# Autentifică-te cu contul Tailscale
tailscale ip # notează IP-ul
```
### 9. Clonare proiecte
```bash
cd /workspace
git clone git@gitea.romfast.ro:romfast/romfastsql.git
# alte proiecte...
```
### 10. Test final
```bash
~/start-agent.sh
# În tmux:
source ~/.nvm/nvm.sh
claude --version
~/work.sh
```
### Copiere rapidă scripturi (dacă ai alt LXC configurat)
```bash
# De pe mașina locală
scp proxmox/lxc171-claude-agent/scripts/*.sh claude@<ip>:/workspace/
ssh claude@<ip> "chmod +x /workspace/*.sh && ln -sf /workspace/start-agent.sh ~/start-agent.sh && ln -sf /workspace/work.sh ~/work.sh"
```
---
## Legături Utile
- **Proxmox Index:** `../README.md`
- **Gitea:** https://gitea.romfast.ro
---
**Data setup:** 2025-12-31
**Ultima actualizare:** 2026-06-24 (zram swap pvemini + reap-orphans cron, anti-OOM)

View File

@@ -1,5 +1,9 @@
# Punte Discord -> Claude Code (LXC 171)
> **Care chatbot e care?** Exista trei lucruri numite „Maria", doi boti pe Discord si
> doua punti WhatsApp legate la acelasi numar. Inainte de a depana, citeste
> [`docs/chatboti-si-punti.md`](../../../docs/chatboti-si-punti.md) — spune care instanta raspunde de fapt.
Un bot Discord subtire care duce mesajele dintr-un guild privat catre CLI-ul `claude`
care ruleaza pe containerul de dezvoltare **LXC 171 (claude-agent, 10.0.20.171)**, si
aduce raspunsurile inapoi. Practic: acelasi Claude Code cu care lucrezi in terminal,

View File

@@ -1,5 +1,9 @@
# Punte WhatsApp + RAG pentru Maria (LXC 171)
> **Care chatbot e care?** Exista trei lucruri numite „Maria", doi boti pe Discord si
> doua punti WhatsApp legate la acelasi numar. Inainte de a depana, citeste
> [`docs/chatboti-si-punti.md`](../../../docs/chatboti-si-punti.md) — spune care instanta raspunde de fapt.
Bot de suport ROA pe WhatsApp: puntea WhatsApp (Baileys) primeste mesajele,
consumer-ul RAG raspunde folosind DOAR informatiile dintr-un depozit de
documente indexat cu embeddings (Ollama). Controlul (start/stop/restart,