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

View File

@@ -1,447 +1,451 @@
# LXC 110 - MoltBot (AI Chatbot) # LXC 110 - MoltBot (AI Chatbot)
**Director:** `proxmox/lxc110-moltbot/` > **Care chatbot e care?** Exista trei lucruri numite „Maria", doi boti pe Discord si
**VMID:** 110 > doua punti WhatsApp legate la acelasi numar. Inainte de a depana, citeste
**IP:** 10.0.20.173 (intern) | 100.120.119.70 (Tailscale) > [`docs/chatboti-si-punti.md`](../../docs/chatboti-si-punti.md) — spune care instanta raspunde de fapt.
**Host Proxmox:** pve1 (10.0.20.200)
**Rol:** Bot AI pentru Telegram și WhatsApp cu Claude Opus 4.5 **Director:** `proxmox/lxc110-moltbot/`
**VMID:** 110
--- **IP:** 10.0.20.173 (intern) | 100.120.119.70 (Tailscale)
**Host Proxmox:** pve1 (10.0.20.200)
## ⚠️ Status actual (verificat 2026-08-30) **Rol:** Bot AI pentru Telegram și WhatsApp cu Claude Opus 4.5
Stack-ul activ e **echo-core** (Python, `/home/moltbot/echo-core`), NU clawdbot/OpenClaw. ---
Servicii `systemctl --user` active:
## ⚠️ Status actual (verificat 2026-08-30)
| Serviciu | Status | Descriere |
|----------|--------|-----------| Stack-ul activ e **echo-core** (Python, `/home/moltbot/echo-core`), NU clawdbot/OpenClaw.
| `echo-core.service` | ✅ active running | Echo Core Bot (Discord + Telegram + WhatsApp), `python3 src/main.py` | Servicii `systemctl --user` active:
| `echo-taskboard.service` | ✅ active running | Echo Task Board API (dashboard) |
| `echo-whatsapp-bridge.service` | ✅ active running | Echo Core WhatsApp Bridge (Baileys, Node) | | Serviciu | Status | Descriere |
| `pocket-tts.service` | ✅ active running | Pocket TTS (Kyutai) | |----------|--------|-----------|
| `supertonic-tts.service` | ✅ active running | Supertonic TTS | | `echo-core.service` | ✅ active running | Echo Core Bot (Discord + Telegram + WhatsApp), `python3 src/main.py` |
| `clawdbot-gateway.service` | ❌ not-found / dead | vechi, nu mai există ca unit | | `echo-taskboard.service` | ✅ active running | Echo Task Board API (dashboard) |
| `openclaw-gateway` | ❌ nu există ca unit systemd | — | | `echo-whatsapp-bridge.service` | ✅ active running | Echo Core WhatsApp Bridge (Baileys, Node) |
| `pocket-tts.service` | ✅ active running | Pocket TTS (Kyutai) |
CLI-ul `openclaw` (fostul `clawdbot`) e instalat (`/usr/bin/openclaw`, v2026.2.9) dar **nu mai e | `supertonic-tts.service` | ✅ active running | Supertonic TTS |
funcțional**: config-ul din `~/.openclaw/openclaw.json` a fost scris de o versiune mai nouă | `clawdbot-gateway.service` | ❌ not-found / dead | vechi, nu mai există ca unit |
(2026.2.15), iar `openclaw status` dă `gateway closed (1006 abnormal closure)` pe | `openclaw-gateway` | ❌ nu există ca unit systemd | — |
`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 CLI-ul `openclaw` (fostul `clawdbot`) e instalat (`/usr/bin/openclaw`, v2026.2.9) dar **nu mai e
`systemctl --user status/restart echo-core` și `journalctl --user -u echo-core -f` în loc. 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
Secțiunile "MoltBot - Comenzi" / "Configurare Gateway" / "Servicii Systemd" de mai jos `ws://127.0.0.1:18789` — gateway-ul lui nu rulează (nu mai e serviciu systemd pentru el).
documentează arhitectura veche (clawdbot/OpenClaw) — păstrate ca referință istorică, dar Comenzile `clawdbot ...` din secțiunile de mai jos **nu mai sunt valabile** — folosește
nu mai reflectă ce rulează efectiv pe container. `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
## Informații Container nu mai reflectă ce rulează efectiv pe container.
| Parametru | Valoare | ---
|-----------|---------|
| VMID | 110 | ## Informații Container
| Hostname | moltbot |
| IP intern | 10.0.20.173 | | Parametru | Valoare |
| IP Tailscale | 100.120.119.70 | |-----------|---------|
| Host Proxmox | pve1 (10.0.20.200) | | VMID | 110 |
| User serviciu | `moltbot` | | Hostname | moltbot |
| Parola user | `Moltbot2026!` | | IP intern | 10.0.20.173 |
| Storage | local-zfs (50GB) | | IP Tailscale | 100.120.119.70 |
| RAM | 8GB (+ 4GB swap) | | Host Proxmox | pve1 (10.0.20.200) |
| CPU | 6 cores | | User serviciu | `moltbot` |
| DNS | `10.0.20.1 1.1.1.1` (explicit, vezi mai jos) | | Parola user | `Moltbot2026!` |
| OS | Ubuntu 24.04 LTS | | Storage | local-zfs (50GB) |
| RAM | 8GB (+ 4GB swap) |
## Componente Instalate | CPU | 6 cores |
| DNS | `10.0.20.1 1.1.1.1` (explicit, vezi mai jos) |
- Ubuntu 24.04 LTS | OS | Ubuntu 24.04 LTS |
- OpenClaw v2026.2.9 (upgraded from MoltBot/clawdbot)
- Node.js v22.22.0 (user-space) ## Componente Instalate
- Bun v1.3.7
- Tailscale (pentru SSH, fără funnel) - Ubuntu 24.04 LTS
- UFW Firewall - OpenClaw v2026.2.9 (upgraded from MoltBot/clawdbot)
- Fail2ban - Node.js v22.22.0 (user-space)
- Bun v1.3.7
## Canale Configurate - Tailscale (pentru SSH, fără funnel)
- UFW Firewall
| Canal | Status | Detalii | - Fail2ban
|-------|--------|---------|
| **Telegram** | ✅ ON | Bot token configurat | ## Canale Configurate
| **WhatsApp** | ✅ ON | Linked la +40723197939 |
| Canal | Status | Detalii |
## Model AI |-------|--------|---------|
| **Telegram** | ✅ ON | Bot token configurat |
- **Provider:** Anthropic | **WhatsApp** | ✅ ON | Linked la +40723197939 |
- **Model:** claude-opus-4-5
- **Context:** 200k tokens ## Model AI
## Securitate - **Provider:** Anthropic
- **Model:** claude-opus-4-5
| Măsură | Status | - **Context:** 200k tokens
|--------|--------|
| User dedicat (non-root) | `moltbot` | ## Securitate
| SSH key-only auth | Activat |
| UFW Firewall | Activat | | Măsură | Status |
| Fail2ban SSH | Activat | |--------|--------|
| Tailscale SSH | Activat | | User dedicat (non-root) | `moltbot` |
| Sudo limitat | Doar `systemctl` | | SSH key-only auth | Activat |
| Linger enabled | Da (serviciu persistent) | | UFW Firewall | Activat |
| Fail2ban SSH | Activat |
### Reguli Firewall UFW | Tailscale SSH | Activat |
| Sudo limitat | Doar `systemctl` |
``` | Linger enabled | Da (serviciu persistent) |
22/tcp ALLOW IN Anywhere
18789 ALLOW IN 10.0.20.0/24 (MoltBot Dashboard) ### Reguli Firewall UFW
Anywhere ALLOW IN 10.0.20.0/24 (rețea locală)
Anywhere ALLOW IN 100.64.0.0/10 (Tailscale) ```
``` 22/tcp ALLOW IN Anywhere
18789 ALLOW IN 10.0.20.0/24 (MoltBot Dashboard)
### Configurare Sudo Anywhere ALLOW IN 10.0.20.0/24 (rețea locală)
Anywhere ALLOW IN 100.64.0.0/10 (Tailscale)
User `moltbot` are sudo passwordless doar pentru: ```
- `systemctl status *`
- `systemctl start *` ### Configurare Sudo
- `systemctl stop *`
- `systemctl restart *` User `moltbot` are sudo passwordless doar pentru:
- `systemctl status *`
## Conectare - `systemctl start *`
- `systemctl stop *`
### SSH (rețea internă) - `systemctl restart *`
```bash
ssh moltbot@10.0.20.173 ## Conectare
```
### SSH (rețea internă)
### SSH (Tailscale - de oriunde) ```bash
```bash ssh moltbot@10.0.20.173
ssh moltbot@100.120.119.70 ```
```
### SSH (Tailscale - de oriunde)
### Acces root (pentru administrare) ```bash
```bash ssh moltbot@100.120.119.70
ssh root@10.0.20.173 ```
```
### Acces root (pentru administrare)
## MoltBot - Comenzi ```bash
ssh root@10.0.20.173
### Terminal UI (TUI) ```
```bash
# Conectare și TUI într-o singură comandă ## MoltBot - Comenzi
ssh -t moltbot@10.0.20.173 "clawdbot tui"
### Terminal UI (TUI)
# Sau conectare separată ```bash
ssh moltbot@10.0.20.173 # Conectare și TUI într-o singură comandă
clawdbot tui ssh -t moltbot@10.0.20.173 "clawdbot tui"
```
# Sau conectare separată
### Web Dashboard (via SSH Tunnel) ssh moltbot@10.0.20.173
```bash clawdbot tui
# Pe calculatorul local, deschide tunnel ```
ssh -L 18789:127.0.0.1:18789 -N moltbot@10.0.20.173 &
### Web Dashboard (via SSH Tunnel)
# Apoi accesează în browser ```bash
# http://localhost:18789 # Pe calculatorul local, deschide tunnel
``` ssh -L 18789:127.0.0.1:18789 -N moltbot@10.0.20.173 &
### Comenzi utile # Apoi accesează în browser
# http://localhost:18789
```bash ```
# Status complet
clawdbot status ### Comenzi utile
# Status detaliat ```bash
clawdbot status --deep # Status complet
clawdbot status
# Verificare versiune
clawdbot --version # Status detaliat
clawdbot status --deep
# Restart gateway
clawdbot gateway restart # Verificare versiune
clawdbot --version
# Vezi loguri live
clawdbot logs --follow # Restart gateway
clawdbot gateway restart
# Verificare canale
clawdbot status --deep # Vezi loguri live
clawdbot logs --follow
# Gestionare dispozitive (pairing)
clawdbot devices list # Verificare canale
clawdbot devices approve <request-id> clawdbot status --deep
```
# Gestionare dispozitive (pairing)
## Configurare Gateway clawdbot devices list
clawdbot devices approve <request-id>
| Parametru | Valoare | ```
|-----------|---------|
| Port | 18789 | ## Configurare Gateway
| Bind | loopback (doar local) |
| Auth | token + password | | Parametru | Valoare |
| Tailscale mode | off | |-----------|---------|
| Port | 18789 |
### Fișiere configurare | Bind | loopback (doar local) |
| Auth | token + password |
| Fișier | Descriere | | Tailscale mode | off |
|--------|-----------|
| `~/.clawdbot/clawdbot.json` | Configurare principală | ### Fișiere configurare
| `~/.clawdbot/logs/gateway.log` | Loguri gateway |
| `~/.clawdbot/agents/main/sessions/` | Sesiuni agent | | Fișier | Descriere |
| `~/.clawdbot/credentials/` | Credențiale (chmod 700) | |--------|-----------|
| `~/.clawdbot/clawdbot.json` | Configurare principală |
## Structura Directoare | `~/.clawdbot/logs/gateway.log` | Loguri gateway |
| `~/.clawdbot/agents/main/sessions/` | Sesiuni agent |
``` | `~/.clawdbot/credentials/` | Credențiale (chmod 700) |
/home/moltbot/
├── .ssh/ ## Structura Directoare
│ └── authorized_keys # Chei SSH pentru acces
├── .bun/ # Bun runtime ```
├── .local/ /home/moltbot/
│ └── share/moltbot/ ├── .ssh/
│ └── node/ # Node.js user-space │ └── authorized_keys # Chei SSH pentru acces
├── .clawdbot/ ├── .bun/ # Bun runtime
│ ├── clawdbot.json # Config MoltBot ├── .local/
│ ├── credentials/ # Credențiale (chmod 700) │ └── share/moltbot/
│ ├── agents/ │ └── node/ # Node.js user-space
│ │ └── main/ ├── .clawdbot/
│ │ └── sessions/ # Sesiuni chat │ ├── clawdbot.json # Config MoltBot
│ └── logs/ │ ├── credentials/ # Credențiale (chmod 700)
│ └── gateway.log # Loguri │ ├── agents/
├── clawd/ # Workspace pentru agent │ │ └── main/
└── .bashrc # PATH pentru node/bun │ │ └── sessions/ # Sesiuni chat
``` │ └── logs/
│ └── gateway.log # Loguri
## Servicii Systemd ├── clawd/ # Workspace pentru agent
└── .bashrc # PATH pentru node/bun
### Gateway Service ```
```bash
# Status ## Servicii Systemd
systemctl --user status clawdbot-gateway
### Gateway Service
# Restart ```bash
systemctl --user restart clawdbot-gateway # Status
systemctl --user status clawdbot-gateway
# Logs
journalctl --user -u clawdbot-gateway -f # Restart
``` systemctl --user restart clawdbot-gateway
## Administrare via Proxmox # Logs
journalctl --user -u clawdbot-gateway -f
### De pe pve1 (sau alt nod cluster) ```
```bash
# Status container ## Administrare via Proxmox
ssh root@10.0.20.200 "pct status 110"
### De pe pve1 (sau alt nod cluster)
# Exec comandă ```bash
ssh root@10.0.20.200 "pct exec 110 -- <comandă>" # Status container
ssh root@10.0.20.200 "pct status 110"
# Stop/Start
ssh root@10.0.20.200 "pct stop 110" # Exec comandă
ssh root@10.0.20.200 "pct start 110" ssh root@10.0.20.200 "pct exec 110 -- <comandă>"
# Console # Stop/Start
ssh root@10.0.20.200 "pct enter 110" ssh root@10.0.20.200 "pct stop 110"
``` ssh root@10.0.20.200 "pct start 110"
## DNS & Swap (incident 2026-07-31) # Console
ssh root@10.0.20.200 "pct enter 110"
### DNS — nu depinde de Tailscale ```
Containerul **nu** avea `nameserver` în `pct config`, deci moștenea `/etc/resolv.conf` de ## DNS & Swap (incident 2026-07-31)
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 ### DNS — nu depinde de Tailscale
(deși L3 era OK: `ping 8.8.8.8` funcționa) → `echo-core` în crash-loop pe
`telegram.error.TimedOut`. 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
Fix aplicat — nameserver explicit: (`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
```bash `telegram.error.TimedOut`.
ssh root@10.0.20.200 "pct set 110 --nameserver '10.0.20.1 1.1.1.1'"
``` Fix aplicat — nameserver explicit:
> **Regula de diagnostic:** la „nu mai ajunge la internet", verifică întâi ```bash
> `getent hosts api.telegram.org` și `cat /etc/resolv.conf`, **nu** ping-ul. ssh root@10.0.20.200 "pct set 110 --nameserver '10.0.20.1 1.1.1.1'"
> Ping-ul poate merge perfect cu DNS-ul complet mort. ```
### Swap — necesită zram pe host > **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.
`swap: 4096` din `pct config` e doar o limită cgroup (`memory.swap.max`), nu un backing > Ping-ul poate merge perfect cu DNS-ul complet mort.
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): ### Swap — necesită zram pe host
```bash `swap: 4096` din `pct config` e doar o limită cgroup (`memory.swap.max`), nu un backing
# pe pve1 (host) store. Cât timp pve1 nu avea swap deloc, în container `free -h` arăta `Swap: 0B`.
apt install -y zram-tools Rezolvat prin zram pe pve1 (root-ul e pe ZFS → swapfile exclus):
cat > /etc/default/zramswap <<'EOF'
ALGO=zstd ```bash
SIZE=8192 # pe pve1 (host)
PRIORITY=100 apt install -y zram-tools
EOF cat > /etc/default/zramswap <<'EOF'
systemctl restart zramswap.service ALGO=zstd
swapon --show # /dev/zram0 8G prio 100 SIZE=8192
``` PRIORITY=100
EOF
Verificare în container: `free -h` → `Swap: 4.0Gi`. systemctl restart zramswap.service
swapon --show # /dev/zram0 8G prio 100
### Limite de memorie pe TTS ```
Serviciile user systemd rulau toate cu `MemoryMax=infinity` / `MemoryHigh=infinity`, deci Verificare în container: `free -h` → `Swap: 4.0Gi`.
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`. ### Limite de memorie pe TTS
Aplicat pe stiva TTS — `MemoryHigh` face throttle + reclaim în loc de kill: 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
| Serviciu | RSS repaus | MemoryHigh | MemoryMax | victime aparent aleatorii (`dbus-daemon`, `sd-pam`) alese după `oom_score_adj`.
|----------|-----------|------------|-----------|
| `pocket-tts` | ~945 MB | 1536M | 2G | Aplicat pe stiva TTS — `MemoryHigh` face throttle + reclaim în loc de kill:
| `supertonic-tts` | ~500 MB | 1024M | 1536M |
| Serviciu | RSS repaus | MemoryHigh | MemoryMax |
Drop-in-uri: `~/.config/systemd/user/<serviciu>.service.d/limits.conf` |----------|-----------|------------|-----------|
| `pocket-tts` | ~945 MB | 1536M | 2G |
```bash | `supertonic-tts` | ~500 MB | 1024M | 1536M |
su - moltbot
export XDG_RUNTIME_DIR=/run/user/1000 Drop-in-uri: `~/.config/systemd/user/<serviciu>.service.d/limits.conf`
systemctl --user show pocket-tts -p MemoryHigh,MemoryMax,MemoryCurrent
``` ```bash
su - moltbot
**Post-mortem complet:** `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md` export XDG_RUNTIME_DIR=/run/user/1000
systemctl --user show pocket-tts -p MemoryHigh,MemoryMax,MemoryCurrent
## Troubleshooting ```
### OpenClaw gateway se restartează continuu (OOM kill) **Post-mortem complet:** `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md`
```bash
# Verifică dacă este omorât de OOM killer ## Troubleshooting
journalctl --user -u openclaw-gateway | grep -i oom
### OpenClaw gateway se restartează continuu (OOM kill)
# Verifică consumul de memorie ```bash
free -h # Verifică dacă este omorât de OOM killer
systemctl --user status openclaw-gateway journalctl --user -u openclaw-gateway | grep -i oom
# Verifică dacă OOM-ul e local containerului sau al host-ului # Verifică consumul de memorie
# ssh root@10.0.20.200 "cat /sys/fs/cgroup/lxc/110/memory.events" # oom_kill > 0 => local free -h
# ssh root@10.0.20.200 "free -h; swapon --show" # zram0 8G activ? systemctl --user status openclaw-gateway
# Soluție: Crește RAM-ul containerului pe Proxmox (actual: 8192) # Verifică dacă OOM-ul e local containerului sau al host-ului
# ssh root@10.0.20.200 # ssh root@10.0.20.200 "cat /sys/fs/cgroup/lxc/110/memory.events" # oom_kill > 0 => local
# pct stop 110 # ssh root@10.0.20.200 "free -h; swapon --show" # zram0 8G activ?
# pct set 110 --memory 12288
# pct start 110 # Soluție: Crește RAM-ul containerului pe Proxmox (actual: 8192)
# ssh root@10.0.20.200
# Curăță sesiunile vechi pentru a reduce consumul # pct stop 110
openclaw sessions clean --older-than 7d # pct set 110 --memory 12288
``` # pct start 110
### MoltBot gateway nu pornește # Curăță sesiunile vechi pentru a reduce consumul
```bash openclaw sessions clean --older-than 7d
# Verifică logs ```
clawdbot logs --follow
### MoltBot gateway nu pornește
# Verifică status ```bash
clawdbot status # Verifică logs
clawdbot logs --follow
# Restart
clawdbot gateway restart # Verifică status
clawdbot status
# Rulare manuală pentru debug
/usr/bin/node /usr/lib/node_modules/clawdbot/dist/entry.js gateway --port 18789 # Restart
``` clawdbot gateway restart
### Gateway unreachable # Rulare manuală pentru debug
```bash /usr/bin/node /usr/lib/node_modules/clawdbot/dist/entry.js gateway --port 18789
# Verifică dacă portul e ocupat ```
ss -tlnp | grep 18789
### Gateway unreachable
# Verifică serviciul systemd ```bash
systemctl --user status clawdbot-gateway # Verifică dacă portul e ocupat
ss -tlnp | grep 18789
# Restart complet
systemctl --user restart clawdbot-gateway # Verifică serviciul systemd
``` systemctl --user status clawdbot-gateway
### Eroare "gateway not connected" în TUI # Restart complet
```bash systemctl --user restart clawdbot-gateway
# Gateway-ul probabil s-a oprit, restartează-l ```
clawdbot gateway restart
``` ### Eroare "gateway not connected" în TUI
```bash
### Telegram/WhatsApp nu răspunde # Gateway-ul probabil s-a oprit, restartează-l
```bash clawdbot gateway restart
# Verifică starea canalelor ```
clawdbot status --deep
### Telegram/WhatsApp nu răspunde
# Pentru Telegram, verifică token-ul ```bash
grep botToken ~/.clawdbot/clawdbot.json # Verifică starea canalelor
clawdbot status --deep
# Pentru WhatsApp, verifică link-ul
clawdbot status | grep WhatsApp # Pentru Telegram, verifică token-ul
``` grep botToken ~/.clawdbot/clawdbot.json
### Probleme de permisiuni # Pentru WhatsApp, verifică link-ul
```bash clawdbot status | grep WhatsApp
# Setează permisiunile corecte ```
chmod 700 ~/.clawdbot
chmod 700 ~/.clawdbot/credentials ### Probleme de permisiuni
chmod 600 ~/.clawdbot/clawdbot.json ```bash
``` # Setează permisiunile corecte
chmod 700 ~/.clawdbot
### Tailscale nu funcționează chmod 700 ~/.clawdbot/credentials
```bash chmod 600 ~/.clawdbot/clawdbot.json
sudo systemctl status tailscaled ```
sudo tailscale status
tailscale ip ### Tailscale nu funcționează
``` ```bash
sudo systemctl status tailscaled
## Backup sudo tailscale status
tailscale ip
### Backup configurare MoltBot ```
```bash
# De pe mașina locală ## Backup
scp -r moltbot@10.0.20.173:~/.clawdbot ./backup-moltbot-$(date +%Y%m%d)/
``` ### Backup configurare MoltBot
```bash
### Backup complet LXC (via Proxmox) # De pe mașina locală
```bash scp -r moltbot@10.0.20.173:~/.clawdbot ./backup-moltbot-$(date +%Y%m%d)/
ssh root@10.0.20.200 "vzdump 110 --storage local --compress zstd" ```
```
### Backup complet LXC (via Proxmox)
## Provider AI - Anthropic ```bash
ssh root@10.0.20.200 "vzdump 110 --storage local --compress zstd"
MoltBot folosește Anthropic Claude prin API key configurat în: ```
- Config: `~/.clawdbot/clawdbot.json` → `auth.profiles.anthropic:default`
- Credențiale: `~/.clawdbot/credentials/` ## Provider AI - Anthropic
### Monitorizare costuri MoltBot folosește Anthropic Claude prin API key configurat în:
- Dashboard Anthropic: https://console.anthropic.com/settings/usage - Config: `~/.clawdbot/clawdbot.json` → `auth.profiles.anthropic:default`
- Sesiune curentă: ~132k/200k tokens (66%) - Credențiale: `~/.clawdbot/credentials/`
## Reconfigurare (dacă e necesar) ### Monitorizare costuri
- Dashboard Anthropic: https://console.anthropic.com/settings/usage
### Rulare wizard onboarding - Sesiune curentă: ~132k/200k tokens (66%)
```bash
clawdbot onboard ## Reconfigurare (dacă e necesar)
```
### Rulare wizard onboarding
### Resetare completă ```bash
```bash clawdbot onboard
# Oprește gateway ```
clawdbot gateway stop
### Resetare completă
# Backup config vechi ```bash
mv ~/.clawdbot ~/.clawdbot.backup # Oprește gateway
clawdbot gateway stop
# Rulează onboarding fresh
clawdbot onboard # 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 ## Legături Utile
- **Ghid deployment:** https://merox.dev/blog/moltbot-proxmox-deployment/
- **Proxmox Index:** `../README.md`
--- - **Documentație MoltBot:** https://docs.molt.bot
- **MoltBot oficial:** https://molt.bot
**Data setup:** 2026-01-29 - **Ghid deployment:** https://merox.dev/blog/moltbot-proxmox-deployment/
**Ultima actualizare:** 2026-07-31 (host pve1, DNS explicit, zram — incident DNS/OOM)
**Autor:** Claude Code ---
**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) # LXC 171 - Claude Agent (Development Environment)
**Director:** `proxmox/lxc171-claude-agent/` > **Care chatbot e care?** Exista trei lucruri numite „Maria", doi boti pe Discord si
**VMID:** 171 > doua punti WhatsApp legate la acelasi numar. Inainte de a depana, citeste
**IP:** 10.0.20.171 (intern) | 100.95.55.51 (Tailscale) > [`docs/chatboti-si-punti.md`](../../docs/chatboti-si-punti.md) — spune care instanta raspunde de fapt.
**Host Proxmox:** pvemini (10.0.20.201)
**Rol:** Mediu de dezvoltare izolat pentru Claude Code **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)
## Scripturi Disponibile **Rol:** Mediu de dezvoltare izolat pentru Claude Code
| Script | Descriere | ---
|--------|-----------|
| `scripts/start-agent.sh` | Pornește/atașează sesiune tmux "agent" | ## Scripturi Disponibile
| `scripts/work.sh` | Meniu interactiv pentru workflow complet |
| `scripts/new-task.sh` | Creează branch nou pentru task | | Script | Descriere |
| `scripts/finish-task.sh` | Finalizează task (commit + push) | |--------|-----------|
| `scripts/reap-orphans.sh` | Curăță procese vscode-server orfane + sesiuni zombie (cron, anti-OOM) | | `scripts/start-agent.sh` | Pornește/atașează sesiune tmux "agent" |
| `discord-bridge/` | Punte Discord → Claude Code: comanzi containerul dintr-un guild privat ([README](discord-bridge/README.md)) | | `scripts/work.sh` | Meniu interactiv pentru workflow complet |
| `discord-bridge/dashboard/` | Dashboard de control al punții: stare, restart, orfani, confirmări ([README](discord-bridge/dashboard/README.md)) | | `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)) |
## Informații Container | `discord-bridge/dashboard/` | Dashboard de control al punții: stare, restart, orfani, confirmări ([README](discord-bridge/dashboard/README.md)) |
| Parametru | Valoare | ---
|-----------|---------|
| VMID | 171 | ## Informații Container
| Hostname | claude-agent |
| IP intern | 10.0.20.171 | | Parametru | Valoare |
| IP Tailscale | 100.95.55.51 | |-----------|---------|
| Host Proxmox | pvemini (10.0.20.201) | | VMID | 171 |
| User | claude | | Hostname | claude-agent |
| Storage | local-zfs (32GB) | | IP intern | 10.0.20.171 |
| RAM | 16GB (swap 8GB — vezi nota OOM mai jos) | | IP Tailscale | 100.95.55.51 |
| CPU | 4 cores | | Host Proxmox | pvemini (10.0.20.201) |
| User | claude |
## Componente Instalate | Storage | local-zfs (32GB) |
| RAM | 16GB (swap 8GB — vezi nota OOM mai jos) |
- Ubuntu 24.04 LTS | CPU | 4 cores |
- Node.js v20.x (via nvm)
- Claude Code ## Componente Instalate
- tmux
- Git (configurat pentru Gitea) - Ubuntu 24.04 LTS
- Tailscale - Node.js v20.x (via nvm)
- Claude Code
## Conectare - tmux
- Git (configurat pentru Gitea)
### De pe calculator (rețea internă) - Tailscale
```bash
ssh claude@10.0.20.171 ## Conectare
```
### De pe calculator (rețea internă)
### De pe telefon/exterior (Tailscale) ```bash
```bash ssh claude@10.0.20.171
ssh claude@100.95.55.51 ```
```
### De pe telefon/exterior (Tailscale)
### VS Code Remote SSH ```bash
Config în `~/.ssh/config`: ssh claude@100.95.55.51
``` ```
Host claude-agent
HostName 10.0.20.171 ### VS Code Remote SSH
User claude Config în `~/.ssh/config`:
``` ```
Host claude-agent
## Scripturi Workflow HostName 10.0.20.171
User claude
### start-agent.sh ```
Pornește sau se atașează la sesiunea tmux "agent".
## Scripturi Workflow
```bash
~/start-agent.sh ### start-agent.sh
``` Pornește sau se atașează la sesiunea tmux "agent".
### work.sh (recomandat) ```bash
Meniu interactiv pentru workflow complet: ~/start-agent.sh
- Listează proiectele disponibile în /workspace ```
- Permite crearea de branch-uri noi
- Continuarea pe branch-uri existente ### work.sh (recomandat)
- Finalizare task (commit + push) Meniu interactiv pentru workflow complet:
- Vizualizare branch-uri - Listează proiectele disponibile în /workspace
- Permite crearea de branch-uri noi
```bash - Continuarea pe branch-uri existente
~/work.sh - Finalizare task (commit + push)
``` - Vizualizare branch-uri
### new-task.sh ```bash
Creează branch nou pentru un task (hardcodat pentru romfastsql). ~/work.sh
```
```bash
~/new-task.sh fix/nume-bug ### new-task.sh
``` Creează branch nou pentru un task (hardcodat pentru romfastsql).
### finish-task.sh ```bash
Finalizează task-ul curent (commit + push). ~/new-task.sh fix/nume-bug
```
```bash
~/finish-task.sh ### finish-task.sh
``` Finalizează task-ul curent (commit + push).
## Workflow Complet ```bash
~/finish-task.sh
### De pe telefon (JuiceSSH + Tailscale) ```
1. Conectează-te la `100.95.55.51` cu user `claude` ## Workflow Complet
2. Rulează:
```bash ### De pe telefon (JuiceSSH + Tailscale)
~/start-agent.sh # pornește tmux
~/work.sh # meniu interactiv 1. Conectează-te la `100.95.55.51` cu user `claude`
``` 2. Rulează:
3. Alege proiectul ```bash
4. Alege acțiunea (task nou / continuă / finalizează) ~/start-agent.sh # pornește tmux
5. Lucrează cu Claude Code ~/work.sh # meniu interactiv
6. Când termini: `~/work.sh` → opțiunea 3 (finalizează) ```
3. Alege proiectul
### De pe calculator (VS Code) 4. Alege acțiunea (task nou / continuă / finalizează)
5. Lucrează cu Claude Code
1. VS Code → Remote SSH → `claude-agent` 6. Când termini: `~/work.sh` → opțiunea 3 (finalizează)
2. Open Folder → `/workspace/<proiect>`
3. Terminal → `source ~/.nvm/nvm.sh && claude` ### De pe calculator (VS Code)
## Structura Directoare pe LXC 1. VS Code → Remote SSH → `claude-agent`
2. Open Folder → `/workspace/<proiect>`
``` 3. Terminal → `source ~/.nvm/nvm.sh && claude`
/home/claude/
├── .ssh/ ## Structura Directoare pe LXC
│ ├── authorized_keys # Chei SSH pentru acces
│ ├── gitea_ed25519 # Cheie pentru Gitea ```
│ └── config # Config SSH pentru Gitea /home/claude/
├── .nvm/ # Node Version Manager ├── .ssh/
├── .claude/ │ ├── authorized_keys # Chei SSH pentru acces
│ └── settings.json # Permisiuni Claude Code │ ├── gitea_ed25519 # Cheie pentru Gitea
├── .tmux.conf # Configurare tmux │ └── config # Config SSH pentru Gitea
├── start-agent.sh -> /workspace/start-agent.sh ├── .nvm/ # Node Version Manager
└── work.sh -> /workspace/work.sh ├── .claude/
│ └── settings.json # Permisiuni Claude Code
/workspace/ ├── .tmux.conf # Configurare tmux
├── start-agent.sh # Script pornire tmux ├── start-agent.sh -> /workspace/start-agent.sh
├── work.sh # Script workflow interactiv └── work.sh -> /workspace/work.sh
├── new-task.sh # Script creare branch
├── finish-task.sh # Script finalizare task /workspace/
├── CLAUDE.md # Info agent ├── start-agent.sh # Script pornire tmux
├── SETUP-COMPLETE.md # Documentație setup ├── work.sh # Script workflow interactiv
├── romfastsql/ # Proiect clonat ├── new-task.sh # Script creare branch
└── test/ # Alte proiecte ├── finish-task.sh # Script finalizare task
``` ├── CLAUDE.md # Info agent
├── SETUP-COMPLETE.md # Documentație setup
## Comenzi tmux Utile ├── romfastsql/ # Proiect clonat
└── test/ # Alte proiecte
| Comandă | Acțiune | ```
|---------|---------|
| `Ctrl+A, d` | Detașare din sesiune | ## Comenzi tmux Utile
| `Ctrl+A, c` | Fereastră nouă |
| `Ctrl+A, n` | Fereastră următoare | | Comandă | Acțiune |
| `Ctrl+A, p` | Fereastră anterioară | |---------|---------|
| `Ctrl+A, [` | Mod scroll (q pentru ieșire) | | `Ctrl+A, d` | Detașare din sesiune |
| `tmux attach -t agent` | Reatașare la sesiune | | `Ctrl+A, c` | Fereastră nouă |
| `tmux ls` | Listare sesiuni | | `Ctrl+A, n` | Fereastră următoare |
| `Ctrl+A, p` | Fereastră anterioară |
## Git / Gitea | `Ctrl+A, [` | Mod scroll (q pentru ieșire) |
| `tmux attach -t agent` | Reatașare la sesiune |
### Clonare proiect nou | `tmux ls` | Listare sesiuni |
```bash
cd /workspace ## Git / Gitea
git clone git@gitea.romfast.ro:romfast/<nume-repo>.git
``` ### Clonare proiect nou
```bash
### Workflow branch-uri cd /workspace
```bash git clone git@gitea.romfast.ro:romfast/<nume-repo>.git
git checkout main ```
git pull
git checkout -b feature/nume-feature ### Workflow branch-uri
# ... lucrezi ... ```bash
git add . git checkout main
git commit -m "descriere" git pull
git push -u origin feature/nume-feature git checkout -b feature/nume-feature
# Creează Pull Request în Gitea # ... lucrezi ...
``` git add .
git commit -m "descriere"
## Memorie & OOM (reaping orfane + zram) git push -u origin feature/nume-feature
# Creează Pull Request în Gitea
### Context (incident 2026-06-24) ```
Containerul a generat OOM-uri repetate, izolate în cgroup-ul `/lxc/171` (NU la nivel de ## Memorie & OOM (reaping orfane + zram)
host — host-ul avea memorie liberă). Cauzele combinate:
### Context (incident 2026-06-24)
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 Containerul a generat OOM-uri repetate, izolate în cgroup-ul `/lxc/171` (NU la nivel de
16GB se intra direct în OOM-kill, fără să poată face swap-out. Victimele tipice erau host — host-ul avea memorie liberă). Cauzele combinate:
procese mici cu `oom_score_adj` ridicat (`systemd`, `dbus-daemon`, `at-spi-bus-laun`,
`sd-pam`) din sesiunile `user@1000`. 1. **Swap fictiv:** LXC 171 are `memory: 16384` + `swap: 8192`, dar host-ul **pvemini nu
2. **Acumulare de fond:** forks `~/.vscode-server` (servere VS Code Remote-SSH) rămase avea swap deloc** → swap-ul containerului nu era backed de nimic. La atingerea celor
orfane după ce conexiunea SSH moare — reparentate la init (PPID=1), vechi de zile — plus 16GB se intra direct în OOM-kill, fără să poată face swap-out. Victimele tipice erau
sesiuni `systemd-logind` blocate în stare `closing`. Un spike ocazional de procese mici cu `oom_score_adj` ridicat (`systemd`, `dbus-daemon`, `at-spi-bus-laun`,
Chromium/Playwright împingea totalul peste 16GB → OOM. `sd-pam`) din sesiunile `user@1000`.
2. **Acumulare de fond:** forks `~/.vscode-server` (servere VS Code Remote-SSH) rămase
### Fix 1 — zram swap pe host (pvemini) 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
Root-ul pvemini e pe **ZFS**, deci **NU** se folosește swapfile (risc de deadlock). În loc, Chromium/Playwright împingea totalul peste 16GB → OOM.
zram (swap comprimat în RAM):
### Fix 1 — zram swap pe host (pvemini)
```bash
# pe pvemini (host) Root-ul pvemini e pe **ZFS**, deci **NU** se folosește swapfile (risc de deadlock). În loc,
apt install -y zram-tools zram (swap comprimat în RAM):
cat > /etc/default/zramswap <<'EOF'
ALGO=zstd ```bash
SIZE=8192 # pe pvemini (host)
PRIORITY=100 apt install -y zram-tools
EOF cat > /etc/default/zramswap <<'EOF'
systemctl restart zramswap.service # enabled persistent la boot ALGO=zstd
zramctl; swapon --show # verificare: /dev/zram0 8G zstd SIZE=8192
``` PRIORITY=100
EOF
Acum cei 8GB `swap` din configul LXC 171 au backing real → vârfurile tranzitorii fac systemctl restart zramswap.service # enabled persistent la boot
swap-out în loc de OOM-kill instant. zramctl; swapon --show # verificare: /dev/zram0 8G zstd
```
> **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`. Acum cei 8GB `swap` din configul LXC 171 au backing real → vârfurile tranzitorii fac
> Vezi `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md`. swap-out în loc de OOM-kill instant.
**Stare swap pe cluster (2026-07-31):** > **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`.
| Nod | Swap | Tip | > Vezi `../cluster/incidents/2026-07-31-lxc110-dns-tailscale-oom.md`.
|-----|------|-----|
| pvemini | 8G | zram0 (zstd, prio 100) | **Stare swap pe cluster (2026-07-31):**
| pve1 | 8G | zram0 (zstd, prio 100) |
| pveelite | 8G | zvol `/dev/zd64` (prio -2) — swap real, nu necesită zram | | Nod | Swap | Tip |
|-----|------|-----|
### Fix 2 — reaping orfane (`scripts/reap-orphans.sh`, cron în 171) | pvemini | 8G | zram0 (zstd, prio 100) |
| pve1 | 8G | zram0 (zstd, prio 100) |
Script conservator care rulează ca root **în interiorul containerului**, la fiecare 6 ore: | pveelite | 8G | zvol `/dev/zd64` (prio -2) — swap real, nu necesită zram |
- omoară forks `~/.vscode-server` reparentate la init (PPID=1) **și** mai vechi de 24h ### Fix 2 — reaping orfane (`scripts/reap-orphans.sh`, cron în 171)
(conexiune SSH moartă);
- termină sesiunile `logind` în stare `closing` cu leader mort (`leader=0`). Script conservator care rulează ca root **în interiorul containerului**, la fiecare 6 ore:
Exclude explicit daemonul de bază `/usr/lib/code-server` (lansat de ttyd) și procesele - omoară forks `~/.vscode-server` reparentate la init (PPID=1) **și** mai vechi de 24h
Claude Code (pot fi task-uri lungi legitime). Log în `/var/log/reap-orphans.log`. (conexiune SSH moartă);
- termină sesiunile `logind` în stare `closing` cu leader mort (`leader=0`).
```bash
# instalare în container (din host) Exclude explicit daemonul de bază `/usr/lib/code-server` (lansat de ttyd) și procesele
pct push 171 reap-orphans.sh /usr/local/sbin/reap-orphans.sh # sau deploy manual Claude Code (pot fi task-uri lungi legitime). Log în `/var/log/reap-orphans.log`.
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 ```bash
# instalare în container (din host)
# rulare manuală + verificare pct push 171 reap-orphans.sh /usr/local/sbin/reap-orphans.sh # sau deploy manual
pct exec 171 -- /usr/local/sbin/reap-orphans.sh pct exec 171 -- chmod +x /usr/local/sbin/reap-orphans.sh
pct exec 171 -- tail /var/log/reap-orphans.log # cron: /etc/cron.d/reap-orphans -> 0 */6 * * * root /usr/local/sbin/reap-orphans.sh
```
# rulare manuală + verificare
> ⚠️ **NU** folosi `loginctl terminate-session` pe sesiuni `closing` care au `leader != 0` — pct exec 171 -- /usr/local/sbin/reap-orphans.sh
> acelea pot fi sesiuni VS Code remote active de lucru. Doar zombiile cu `leader=0` sunt pct exec 171 -- tail /var/log/reap-orphans.log
> sigure (asta verifică și scriptul automat). ```
### Diagnostic rapid OOM > ⚠️ **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
```bash > sigure (asta verifică și scriptul automat).
# 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'" ### Diagnostic rapid OOM
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) ```bash
# pe host: confirmă că OOM e în cgroup-ul containerului, nu pe host
# în container: top consumatori + orfani + sesiuni ssh root@10.0.20.201 "journalctl -k --since '1 hour ago' | grep -iE 'oom_memcg|Killed process'"
pct exec 171 -- bash -c "ps -eo pid,ppid,etimes,rss,comm --sort=-rss | head -20" cat /sys/fs/cgroup/lxc/171/memory.events # oom / oom_kill counters
pct exec 171 -- loginctl list-sessions 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 ## Troubleshooting
which claude
claude --version ### Claude Code nu pornește
``` ```bash
source ~/.nvm/nvm.sh
### tmux nu găsește sesiunea which claude
```bash claude --version
tmux ls ```
tmux new -s agent -c /workspace
``` ### tmux nu găsește sesiunea
```bash
### Git clone eșuează tmux ls
```bash tmux new -s agent -c /workspace
# Testează conexiunea SSH la Gitea ```
ssh -T git@gitea.romfast.ro
``` ### Git clone eșuează
```bash
### Tailscale nu funcționează # Testează conexiunea SSH la Gitea
```bash ssh -T git@gitea.romfast.ro
sudo systemctl status tailscaled ```
sudo tailscale status
tailscale ip ### Tailscale nu funcționează
``` ```bash
sudo systemctl status tailscaled
## Instalare Claude Code pe LXC nou (de la zero) sudo tailscale status
tailscale ip
### 1. Creare LXC în Proxmox ```
```bash
# Pe Proxmox host (ex: pveelite) ## Instalare Claude Code pe LXC nou (de la zero)
pct create <VMID> local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname claude-agent \ ### 1. Creare LXC în Proxmox
--memory 4096 \ ```bash
--cores 2 \ # Pe Proxmox host (ex: pveelite)
--rootfs local-zfs:32 \ pct create <VMID> local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \ --hostname claude-agent \
--features nesting=1 \ --memory 4096 \
--unprivileged 1 --cores 2 \
--rootfs local-zfs:32 \
pct start <VMID> --net0 name=eth0,bridge=vmbr0,ip=dhcp \
pct enter <VMID> --features nesting=1 \
``` --unprivileged 1
### 2. Setup sistem (ca root în LXC) pct start <VMID>
```bash pct enter <VMID>
# Update și pachete de bază ```
apt update && apt upgrade -y
apt install -y curl git tmux sudo ### 2. Setup sistem (ca root în LXC)
```bash
# Creare user claude # Update și pachete de bază
useradd -m -s /bin/bash claude apt update && apt upgrade -y
echo "claude ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/claude apt install -y curl git tmux sudo
passwd claude # setează parola
# Creare user claude
# Creare /workspace useradd -m -s /bin/bash claude
mkdir -p /workspace echo "claude ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/claude
chown claude:claude /workspace passwd claude # setează parola
```
# Creare /workspace
### 3. Setup user claude mkdir -p /workspace
```bash chown claude:claude /workspace
su - claude ```
# Instalare nvm + Node.js ### 3. Setup user claude
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash ```bash
source ~/.bashrc su - claude
nvm install 20
nvm use 20 # Instalare nvm + Node.js
nvm alias default 20 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
# Instalare Claude Code nvm install 20
npm install -g @anthropic-ai/claude-code nvm use 20
nvm alias default 20
# Verificare
claude --version # Instalare Claude Code
``` npm install -g @anthropic-ai/claude-code
### 4. Configurare Claude Code # Verificare
```bash claude --version
mkdir -p ~/.claude ```
cat > ~/.claude/settings.json << 'EOF'
{ ### 4. Configurare Claude Code
"permissions": { ```bash
"allow": [ mkdir -p ~/.claude
"Bash(git *)", cat > ~/.claude/settings.json << 'EOF'
"Bash(npm *)", {
"Bash(node *)", "permissions": {
"Read", "allow": [
"Write", "Bash(git *)",
"Edit" "Bash(npm *)",
], "Bash(node *)",
"deny": [] "Read",
} "Write",
} "Edit"
EOF ],
``` "deny": []
}
### 5. Configurare tmux }
```bash EOF
cat > ~/.tmux.conf << 'EOF' ```
set -g prefix C-a
unbind C-b ### 5. Configurare tmux
bind C-a send-prefix ```bash
set -g mouse on cat > ~/.tmux.conf << 'EOF'
set -g history-limit 50000 set -g prefix C-a
set -g default-terminal "screen-256color" unbind C-b
EOF bind C-a send-prefix
``` set -g mouse on
set -g history-limit 50000
### 6. Configurare Git + SSH pentru Gitea set -g default-terminal "screen-256color"
```bash EOF
# Generare cheie SSH ```
ssh-keygen -t ed25519 -f ~/.ssh/gitea_ed25519 -N ""
### 6. Configurare Git + SSH pentru Gitea
# Config SSH ```bash
cat > ~/.ssh/config << 'EOF' # Generare cheie SSH
Host gitea.romfast.ro ssh-keygen -t ed25519 -f ~/.ssh/gitea_ed25519 -N ""
HostName gitea.romfast.ro
User git # Config SSH
IdentityFile ~/.ssh/gitea_ed25519 cat > ~/.ssh/config << 'EOF'
IdentitiesOnly yes Host gitea.romfast.ro
EOF HostName gitea.romfast.ro
chmod 600 ~/.ssh/config User git
IdentityFile ~/.ssh/gitea_ed25519
# Afișează cheia publică (adaug-o în Gitea → Settings → SSH Keys) IdentitiesOnly yes
cat ~/.ssh/gitea_ed25519.pub EOF
chmod 600 ~/.ssh/config
# Config Git
git config --global user.name "Claude Agent" # Afișează cheia publică (adaug-o în Gitea → Settings → SSH Keys)
git config --global user.email "claude@romfast.ro" cat ~/.ssh/gitea_ed25519.pub
git config --global init.defaultBranch main
``` # Config Git
git config --global user.name "Claude Agent"
### 7. Instalare scripturi workflow git config --global user.email "claude@romfast.ro"
```bash git config --global init.defaultBranch main
cd /workspace ```
# Copiază scripturile din acest repo (de pe mașina locală) ### 7. Instalare scripturi workflow
# SAU creează-le manual conform secțiunii "Scripturi Disponibile" ```bash
cd /workspace
# Creare symlink-uri
ln -s /workspace/start-agent.sh ~/start-agent.sh # Copiază scripturile din acest repo (de pe mașina locală)
ln -s /workspace/work.sh ~/work.sh # SAU creează-le manual conform secțiunii "Scripturi Disponibile"
chmod +x /workspace/*.sh # Creare symlink-uri
``` ln -s /workspace/start-agent.sh ~/start-agent.sh
ln -s /workspace/work.sh ~/work.sh
### 8. (Opțional) Instalare Tailscale
```bash chmod +x /workspace/*.sh
curl -fsSL https://tailscale.com/install.sh | sh ```
sudo tailscale up
# Autentifică-te cu contul Tailscale ### 8. (Opțional) Instalare Tailscale
tailscale ip # notează IP-ul ```bash
``` curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
### 9. Clonare proiecte # Autentifică-te cu contul Tailscale
```bash tailscale ip # notează IP-ul
cd /workspace ```
git clone git@gitea.romfast.ro:romfast/romfastsql.git
# alte proiecte... ### 9. Clonare proiecte
``` ```bash
cd /workspace
### 10. Test final git clone git@gitea.romfast.ro:romfast/romfastsql.git
```bash # alte proiecte...
~/start-agent.sh ```
# În tmux:
source ~/.nvm/nvm.sh ### 10. Test final
claude --version ```bash
~/work.sh ~/start-agent.sh
``` # În tmux:
source ~/.nvm/nvm.sh
### Copiere rapidă scripturi (dacă ai alt LXC configurat) claude --version
```bash ~/work.sh
# 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" ### 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
## Legături Utile
---
- **Proxmox Index:** `../README.md`
**Data setup:** 2025-12-31 - **Gitea:** https://gitea.romfast.ro
**Ultima actualizare:** 2026-06-24 (zram swap pvemini + reap-orphans cron, anti-OOM)
---
**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) # 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` 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 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, 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) # 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, Bot de suport ROA pe WhatsApp: puntea WhatsApp (Baileys) primeste mesajele,
consumer-ul RAG raspunde folosind DOAR informatiile dintr-un depozit de consumer-ul RAG raspunde folosind DOAR informatiile dintr-un depozit de
documente indexat cu embeddings (Ollama). Controlul (start/stop/restart, documente indexat cu embeddings (Ollama). Controlul (start/stop/restart,