diff --git a/input/claude-mobil.md b/input/claude-mobil.md new file mode 100644 index 0000000..3edde0e --- /dev/null +++ b/input/claude-mobil.md @@ -0,0 +1,142 @@ +# Misiune: Setup LXC pentru Claude Code Agent cu acces remote + +## Context +Vreau să configurez un LXC pe Proxmox care să ruleze Claude Code autonom. +Voi porni task-uri de pe telefon (SSH) și voi monitoriza/edita de pe orice calculator folosind VS Code Remote SSH. +Repository-ul este pe Gitea intern: gitea.romfast.ro + +## Informații infrastructură +CITESTE INFORMATII PROXMOX DIN fisierele din directorul proxmox. +Vreau sa instalezi LXC in nodul pveelite 10.0.20.202 +Completeaza datele tu in acest fisier. +IP static dorit pentru LXC: 10.0.20.171 +Gateway: 10.0.20.1 + +### Proxmox +- IP Proxmox: 10.0.20.202 (pveelite) +- User Proxmox: root +- Nodul Proxmox: pveelite +- Storage pentru LXC: local-zfs + +### LXC nou pentru Claude Code +- VMID: 171 +- Hostname: claude-agent +- IP static: 10.0.20.171 +- Gateway: 10.0.20.1 +- DNS: 8.8.8.8 +- Resurse: 4GB RAM, 2 CPU cores, 32GB disk + +### Gitea +- URL: gitea.romfast.ro +- Username Gitea: mmarius28@gmail.com +- Repo de test pentru verificare: romfast/romfastsql + +### Calculatorul meu curent +- OS: Linux (WSL2) +- Am deja SSH key? Da, ~/.ssh/id_rsa + +## Ce trebuie să faci + +### FAZA 1: Pregătire locală și conectare Proxmox + +1. Verifică dacă am SSH key local, dacă nu, generează unul +2. Testează conectivitatea la Proxmox prin SSH +3. Adaugă SSH key-ul meu în Proxmox pentru acces fără parolă (dacă nu e deja) + +### FAZA 2: Creare LXC pe Proxmox + +Conectează-te la Proxmox și execută comenzile pentru: + +1. Descarcă template Ubuntu 24.04 (dacă nu există) +2. Creează LXC cu parametrii specificați mai sus +3. Configurează networking static +4. Pornește LXC-ul + +### FAZA 3: Configurare LXC - Sistem de bază + +Conectează-te la LXC nou creat și: + +1. Update sistem +2. Instalează pachete esențiale: + - curl, wget, git, tmux, htop, vim + - build-essential (pentru compilări npm) + - openssh-server + +3. Creează user "claude" cu sudo +4. Configurează SSH: + - Permite autentificare cu key + - Dezactivează autentificare cu parolă + - Adaugă SSH key-ul meu pentru userul "claude" + +### FAZA 4: Instalare Node.js și Claude Code + +În LXC, ca user "claude": + +1. Instalează Node.js 20.x via nvm (pentru flexibilitate versiuni) +2. Configurează npm pentru instalări globale în user space +3. Instalează Claude Code: npm install -g @anthropic-ai/claude-code +4. Verifică instalarea: claude --version + +### FAZA 5: Configurare Git pentru Gitea + +În LXC, ca user "claude": + +1. Generează SSH key dedicat pentru Gitea +2. Afișează public key-ul (eu îl voi adăuga manual în Gitea) +3. Configurează git global (user.name, user.email) +4. Creează ~/.ssh/config pentru gitea.romfast.ro +5. Creează directorul /workspace cu permisiuni pentru "claude" + +### FAZA 6: Configurare tmux + +În LXC, ca user "claude": + +1. Creează ~/.tmux.conf cu configurație utilă: + - Mouse support + - History mare (50000 linii) + - Prefix mai ușor (Ctrl+A în loc de Ctrl+B) + - Status bar informativ + - 256 colors + +2. Creează script helper ~/start-agent.sh care: + - Creează sesiune tmux "agent" dacă nu există + - Sau se atașează la ea dacă există + +### FAZA 7: Configurare Claude Code defaults + +În LXC, ca user "claude": + +1. Creează ~/.claude/settings.json cu permisiuni default pentru development +2. Creează un CLAUDE.md template în /workspace + +### FAZA 8: Verificări finale și documentație + +1. Testează SSH de pe calculatorul meu la LXC (user claude) +2. Testează că tmux funcționează +3. Testează că claude --version funcționează +4. Creează un fișier SETUP-COMPLETE.md în /workspace cu: + - IP-ul LXC-ului + - Comenzi utile (cum să pornesc, cum să mă conectez) + - Public key-ul pentru Gitea (să-l adaug manual) + - Next steps (ce mai am de făcut manual) + +## Output așteptat + +La final vreau să primesc: +1. Confirmarea că totul e instalat și funcțional +2. Comenzile exacte pentru VS Code Remote SSH config +3. Public key-ul SSH pentru Gitea (să-l adaug în interfața web) +4. Instrucțiuni pentru prima autentificare Claude Code + +## Note importante + +- Dacă ceva necesită input manual de la mine (ex: parolă Proxmox, acceptare licență), + oprește-te și întreabă-mă +- Dacă întâmpini erori, nu sări peste ele - spune-mi ce s-a întâmplat +- Preferă comenzi non-interactive (cu -y, --yes unde e posibil) +- Loghează comenzile importante și output-ul lor + +## Începe acum + +Mai întâi, întreabă-mă informațiile lipsă marcate cu [COMPLETEAZĂ] de mai sus, +apoi continuă cu Faza 1. \ No newline at end of file diff --git a/proxmox/claude-agent/README.md b/proxmox/claude-agent/README.md new file mode 100644 index 0000000..4c39b6e --- /dev/null +++ b/proxmox/claude-agent/README.md @@ -0,0 +1,202 @@ +# Claude Agent LXC - Documentație + +## Informații Container + +| Parametru | Valoare | +|-----------|---------| +| VMID | 171 | +| Hostname | claude-agent | +| IP intern | 10.0.20.171 | +| IP Tailscale | 100.95.55.51 | +| Host Proxmox | pveelite (10.0.20.202) | +| User | claude | +| Storage | local-zfs (32GB) | +| RAM | 4GB | +| CPU | 2 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/` +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/.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 +``` + +## 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 pe LXC nou + +Scripturile pot fi copiate pe un LXC nou: + +```bash +scp proxmox/claude-agent/*.sh claude@:/workspace/ +ssh claude@ "chmod +x /workspace/*.sh" +ssh claude@ "ln -s /workspace/start-agent.sh ~/start-agent.sh" +ssh claude@ "ln -s /workspace/work.sh ~/work.sh" +``` + +--- + +**Data setup:** 2025-12-31 +**Ultima actualizare:** 2025-12-31 diff --git a/proxmox/claude-agent/finish-task.sh b/proxmox/claude-agent/finish-task.sh new file mode 100644 index 0000000..91df8bf --- /dev/null +++ b/proxmox/claude-agent/finish-task.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Script pentru a finaliza un task (commit + push) + +PROJECT_DIR="/workspace/romfastsql" +cd "$PROJECT_DIR" || exit 1 + +BRANCH=$(git branch --show-current) + +if [ "$BRANCH" = "main" ]; then + echo "❌ Ești pe main! Nu face commit direct pe main." + exit 1 +fi + +echo "📋 Status curent:" +git status --short + +echo "" +read -p "Mesaj commit: " COMMIT_MSG + +if [ -z "$COMMIT_MSG" ]; then + echo "❌ Trebuie să dai un mesaj pentru commit" + exit 1 +fi + +git add . +git commit -m "$COMMIT_MSG" +git push -u origin "$BRANCH" + +echo "" +echo "✅ Done! Branch-ul $BRANCH a fost push-uit." +echo "🔗 Creează Pull Request în Gitea: https://gitea.romfast.ro/romfast/romfastsql/compare/main...$BRANCH" diff --git a/proxmox/claude-agent/new-task.sh b/proxmox/claude-agent/new-task.sh new file mode 100644 index 0000000..4e7f444 --- /dev/null +++ b/proxmox/claude-agent/new-task.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# Script pentru a începe un task nou cu branch + +if [ -z "$1" ]; then + echo "Utilizare: ~/new-task.sh " + echo "Exemplu: ~/new-task.sh fix/rezolva-bug" + exit 1 +fi + +BRANCH_NAME="$1" +PROJECT_DIR="/workspace/romfastsql" + +cd "$PROJECT_DIR" || exit 1 + +# Actualizează main +echo "📥 Actualizez main..." +git checkout main +git pull origin main + +# Creează branch nou +echo "🌿 Creez branch: $BRANCH_NAME" +git checkout -b "$BRANCH_NAME" + +echo "✅ Gata! Ești pe branch-ul: $BRANCH_NAME" +echo "" +echo "Pornește Claude cu: source ~/.nvm/nvm.sh && claude" diff --git a/proxmox/claude-agent/start-agent.sh b/proxmox/claude-agent/start-agent.sh new file mode 100644 index 0000000..dd596a9 --- /dev/null +++ b/proxmox/claude-agent/start-agent.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Start or attach to Claude agent tmux session + +SESSION_NAME="agent" + +# Load nvm +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" + +# Check if session exists +if tmux has-session -t $SESSION_NAME 2>/dev/null; then + echo "Attaching to existing session: $SESSION_NAME" + tmux attach-session -t $SESSION_NAME +else + echo "Creating new session: $SESSION_NAME" + tmux new-session -s $SESSION_NAME -c /workspace +fi diff --git a/proxmox/claude-agent/work.sh b/proxmox/claude-agent/work.sh new file mode 100644 index 0000000..355f89d --- /dev/null +++ b/proxmox/claude-agent/work.sh @@ -0,0 +1,104 @@ +#!/bin/bash +# Script all-in-one pentru workflow cu selecție proiect + +WORKSPACE="/workspace" +source ~/.nvm/nvm.sh + +echo "🚀 Claude Workflow" +echo "==================" +echo "" + +# Listează proiectele (directoare cu .git) +echo "📁 Proiecte disponibile:" +echo "" +projects=() +i=1 +for dir in "$WORKSPACE"/*/; do + if [ -d "$dir/.git" ]; then + name=$(basename "$dir") + projects+=("$dir") + echo " $i) $name" + ((i++)) + fi +done + +if [ ${#projects[@]} -eq 0 ]; then + echo "❌ Nu am găsit proiecte Git în $WORKSPACE" + exit 1 +fi + +echo "" +read -p "Alege proiect [1-$((i-1))]: " proj_choice + +if [ -z "$proj_choice" ] || [ "$proj_choice" -lt 1 ] || [ "$proj_choice" -gt ${#projects[@]} ]; then + echo "❌ Selecție invalidă" + exit 1 +fi + +PROJECT_DIR="${projects[$((proj_choice-1))]}" +PROJECT_NAME=$(basename "$PROJECT_DIR") + +cd "$PROJECT_DIR" || exit 1 + +echo "" +echo "📂 Proiect: $PROJECT_NAME" +echo "🌿 Branch curent: $(git branch --show-current)" +echo "" +echo "Ce vrei să faci?" +echo " 1) Începe task nou (branch nou)" +echo " 2) Continuă task existent" +echo " 3) Finalizează task (commit + push)" +echo " 4) Vezi branch-uri" +echo " 5) Pornește Claude pe branch-ul curent" +echo "" +read -p "Alege [1-5]: " choice + +case $choice in + 1) + read -p "Nume branch (ex: fix/bug-login): " BRANCH_NAME + git checkout main 2>/dev/null || git checkout master + git pull + git checkout -b "$BRANCH_NAME" + echo "✅ Branch creat: $BRANCH_NAME" + echo "Pornesc Claude..." + claude + ;; + 2) + echo "Branch-uri locale:" + git branch + echo "" + read -p "Nume branch: " BRANCH_NAME + git checkout "$BRANCH_NAME" + echo "Pornesc Claude..." + claude + ;; + 3) + BRANCH=$(git branch --show-current) + if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then + echo "❌ Ești pe $BRANCH! Nu face commit direct aici." + exit 1 + fi + echo "📋 Status:" + git status --short + echo "" + read -p "Mesaj commit: " COMMIT_MSG + if [ -n "$COMMIT_MSG" ]; then + git add . + git commit -m "$COMMIT_MSG" + git push -u origin "$BRANCH" + echo "✅ Push făcut pe $BRANCH" + fi + ;; + 4) + echo "Branch curent: $(git branch --show-current)" + echo "" + git branch -a + ;; + 5) + echo "Pornesc Claude pe $(git branch --show-current)..." + claude + ;; + *) + echo "Opțiune invalidă" + ;; +esac