# Claude Agent - Cloud Development Environment Container LXC configurat pentru **rularea Claude Code în cloud cu sesiuni permanente tmux**. ## Concept Acest sistem permite: 1. **Lansezi o sarcină pentru Claude** (interactiv sau cu `claudep.sh`) 2. **Claude lucrează în tmux** - sesiunea persistă chiar dacă te deconectezi 3. **Te reconectezi oricând** - de pe laptop, telefon, alt calculator 4. **Vezi ce a făcut Claude** - revizuiești codul, testezi, dai feedback 5. **Push în Gitea** - când ești mulțumit cu rezultatul Poți lansa un task dimineața, Claude lucrează toată ziua, iar seara te conectezi de pe alt calculator să vezi progresul. ## Informații Sistem | Parametru | Valoare | |-----------|---------| | VMID | 171 | | Hostname | claude-agent | | IP LAN | 10.0.20.171 | | IP Tailscale | claude-agent (sau 100.95.55.51) | | Gateway | 10.0.20.1 | | Host Proxmox | pveelite (10.0.20.202) | | User | claude | | Storage | local-zfs (32GB) | | RAM | 4GB | | CPU | 2 cores | **Data setup:** 2025-12-31 ## Componente Instalate | Component | Versiune | |-----------|----------| | Ubuntu | 24.04 LTS | | Node.js | v20.19.6 (via nvm) | | Claude Code | 2.0.76 | | tmux | 3.4 | | Git | 2.43.0 | --- ## Conectare SSH Poți te conecta în două moduri: ```bash # Din rețeaua locală ssh claude@10.0.20.171 # Prin Tailscale (de oriunde) ssh claude@claude-agent ``` **Notă:** Nu există parolă setată pentru userul `claude`. Accesul se face doar cu SSH key. Vezi secțiunea "Configurare Acces SSH" pentru instalarea cheii. --- ## Workflow Principal ### Varianta 1: Sesiune Interactivă ```bash # 1. Conectare SSH (LAN sau Tailscale) ssh claude@10.0.20.171 # sau ssh claude@claude-agent # prin Tailscale # 2. Pornire/reatașare sesiune tmux (automat) ~/start-agent.sh # 3. Navighează în proiect și pornește Claude cd /workspace/ claude # 4. Lucrezi cu Claude interactiv... # 5. Când vrei să pleci - detașare din tmux (sesiunea rămâne activă) Ctrl+A, d # 6. Mai târziu - reconectare la sesiune (start-agent.sh reatașează automat) ssh claude@claude-agent ~/start-agent.sh ``` ### Varianta 2: Task în Background Două scripturi disponibile: **`work.sh`** - Te întreabă interactiv ce proiect și ce task: ```bash ssh claude@claude-agent /workspace/work.sh # Răspunzi la întrebări despre proiect și task ``` **`claudep.sh`** - Rulează în directorul curent, creează fișiere independent: ```bash ssh claude@claude-agent cd /workspace/ # Navighează în proiect /workspace/claudep.sh "Implementează autentificare JWT" # SAU din /workspace (fișierele se creează în .claude-work/) cd /workspace /workspace/claudep.sh "Cercetează cele mai bune practici pentru API design" ``` **Monitorizare și rezultate:** ```bash # Urmărește progresul în timp real tail -f /workspace/.claude-logs/claude_*_progress.log # Vezi rezultatele finale cat /workspace/.claude-logs/claude_*_progress.log ``` ### Varianta 3: VS Code Remote Cea mai convenabilă metodă pentru lucru prelungit - editezi cod, vezi terminal, totul într-un singur loc. 1. **Configurează accesul SSH** (vezi secțiunea de mai jos) 2. **Instalează extensia** "Remote - SSH" în VS Code 3. **Conectare:** `Ctrl+Shift+P` → `Remote-SSH: Connect to Host...` → `claude-agent` 4. **Deschide terminal** în VS Code (`Ctrl+``) 5. **Atașează la sesiunea Claude:** `~/start-agent.sh` 6. **Lucrezi** - editezi fișiere în VS Code, interacționezi cu Claude în terminal --- ## Configurare Acces SSH (Prima dată) **Problema:** Nu există parolă setată pentru userul `claude` în LXC. Accesul se face prin SSH key. ### Pas 1: Generează SSH key pe calculatorul tău (dacă nu ai) ```bash # Pe calculatorul tău (Windows PowerShell, Mac/Linux Terminal) ssh-keygen -t ed25519 -C "your-email@example.com" # Afișează cheia publică cat ~/.ssh/id_ed25519.pub # SAU pe Windows: type %USERPROFILE%\.ssh\id_ed25519.pub ``` Copiază cheia publică (linia care începe cu `ssh-ed25519 ...`). ### Pas 2: Adaugă cheia în LXC prin Proxmox Conectează-te la host-ul Proxmox și adaugă cheia în container: ```bash # 1. SSH pe Proxmox host ssh root@10.0.20.202 # pveelite # 2. Intră în containerul LXC (VMID 171) pct enter 171 # 3. Adaugă cheia publică SSH echo "ssh-ed25519 AAAA...cheia_ta_aici... your-email@example.com" >> /home/claude/.ssh/authorized_keys # 4. Verifică permisiunile (ar trebui să fie deja corecte) chown claude:claude /home/claude/.ssh/authorized_keys chmod 600 /home/claude/.ssh/authorized_keys # 5. Ieși din container exit # 6. Ieși din Proxmox exit ``` **Alternativ** (fără a intra în container): ```bash # De pe Proxmox host, într-o singură comandă: ssh root@10.0.20.202 pct exec 171 -- bash -c 'echo "ssh-ed25519 AAAA...cheia_ta... email" >> /home/claude/.ssh/authorized_keys' ``` ### Pas 3: Configurează SSH pe calculatorul tău Adaugă în `~/.ssh/config` (sau `%USERPROFILE%\.ssh\config` pe Windows): ``` # Acces prin Tailscale (recomandat - funcționează de oriunde) Host claude-agent HostName claude-agent User claude IdentityFile ~/.ssh/id_ed25519 ForwardAgent yes # Acces prin LAN (doar din rețeaua locală) Host claude-agent-lan HostName 10.0.20.171 User claude IdentityFile ~/.ssh/id_ed25519 ForwardAgent yes ``` ### Pas 4: Testează conexiunea ```bash ssh claude@claude-agent # Ar trebui să te conectezi fără parolă ``` --- ## Comenzi Utile ### tmux (Sesiuni Permanente) ```bash ~/start-agent.sh # Pornește SAU reatașează sesiune "agent" (automat) tmux ls # Lista sesiuni active tmux new -s # Sesiune nouă cu alt nume Ctrl+A, d # Detașare (sesiunea continuă în background) Ctrl+A, c # Fereastră nouă în sesiune Ctrl+A, n # Fereastră următoare Ctrl+A, p # Fereastră anterioară Ctrl+A, [ # Mod scroll (q pentru ieșire) ``` **Notă:** Prefix-ul tmux este `Ctrl+A` (nu `Ctrl+B` ca default). ### Claude Code ```bash claude # Pornire interactivă claude -p "prompt" # Mod non-interactiv (pipe mode) ``` ### Git - Gitea ```bash git clone git@gitea.romfast.ro:romfast/.git git push origin main ssh -T git@gitea.romfast.ro # Test conexiune SSH ``` --- ## SSH Key pentru Gitea Această cheie este deja generată pe server. Trebuie adăugată în Gitea: 1. Mergi la https://gitea.romfast.ro 2. Settings → SSH/GPG Keys → Add Key 3. Paste: ``` ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKrxEqh5L1SRrZ4f6j04mLaNdr6LJf+xb9EKBvwegeXS claude-agent@romfast.ro ``` --- ## Structura Directoare ``` /home/claude/ ├── .ssh/ │ ├── authorized_keys # Chei SSH pentru acces (adaugă cheia ta aici) │ ├── gitea_ed25519 # Key privat pentru Gitea │ ├── gitea_ed25519.pub # Key public pentru Gitea │ └── config # SSH config pentru Gitea ├── .nvm/ # Node Version Manager ├── .claude/ │ └── settings.json # Claude Code permissions ├── .tmux.conf # Configurare tmux (prefix Ctrl+A) └── start-agent.sh # Script helper - pornește/reatașează tmux /workspace/ # Director pentru proiecte ├── CLAUDE.md # Instrucțiuni pentru Claude Code ├── README.md # Acest fișier ├── claudep.sh # Task în background (directorul curent) ├── work.sh # Task interactiv (întreabă proiectul) ├── .claude-work/ # Fișiere temporare create de claude -p ├── .claude-logs/ # Log-uri pentru task-uri în background └── / # Proiectele tale (clone din Gitea) ``` --- ## Scripturi Disponibile | Script | Descriere | |--------|-----------| | `~/start-agent.sh` | Pornește sesiune tmux "agent" sau reatașează dacă există | | `/workspace/work.sh` | Lansează task - te întreabă interactiv proiectul și descrierea | | `/workspace/claudep.sh` | Lansează task în directorul curent, cu logging | --- ## Troubleshooting ### Nu mă pot conecta SSH (Permission denied) ```bash # Verifică dacă ai cheia SSH instalată ssh -v claude@claude-agent # Dacă nu ai acces, trebuie să adaugi cheia prin Proxmox: ssh root@10.0.20.202 pct enter 171 # ... vezi secțiunea "Configurare Acces SSH" ``` ### Claude Code nu pornește ```bash source ~/.nvm/nvm.sh # Încarcă Node.js which claude # Verifică dacă e în PATH claude --version # Test ``` ### tmux - sesiunea nu există ```bash tmux ls # Vezi ce sesiuni există ~/start-agent.sh # Creează/reatașează sesiune "agent" ``` ### Git clone eșuează ```bash ssh -T git@gitea.romfast.ro # Test conexiune # Dacă eșuează: verifică că ai adăugat SSH key în Gitea (vezi secțiunea dedicată) ``` ### Claude pare blocat / nu răspunde ```bash # În tmux, verifică dacă Claude așteaptă input # Dacă da, răspunde sau Ctrl+C pentru a opri # Pentru task-uri în background, verifică log-ul: tail -f /workspace/.claude-logs/claude_*_progress.log ``` ### Tailscale nu rezolvă hostname-ul ```bash # Folosește IP-ul Tailscale direct tailscale ip claude-agent # Pe alt device din Tailscale ssh claude@ # Sau folosește IP-ul LAN dacă ești în rețeaua locală ssh claude@10.0.20.171 ``` --- ## Quick Reference ```bash # Conectare și pornire sesiune (Tailscale) ssh claude@claude-agent && ~/start-agent.sh # Conectare și pornire sesiune (LAN) ssh claude@10.0.20.171 && ~/start-agent.sh # Lansare task interactiv (te întreabă proiectul) ssh claude@claude-agent -t "/workspace/work.sh" # Lansare task în background pentru un proiect ssh claude@claude-agent -t "cd /workspace/ && /workspace/claudep.sh 'descriere task'" # Verificare log-uri ssh claude@claude-agent "tail -50 /workspace/.claude-logs/claude_*_progress.log" ``` --- *Setup realizat cu Claude Code*