# 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/<project>
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/<project>      # 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 <nume>         # 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/<repo>.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
└── <project>/               # 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@<ip-rezultat>

# 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/<project> && /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*
