Confirmarea per comanda devenea obositoare intr-o sesiune care lucreaza pe acelasi host: `ssh pvemini ...` de zece ori la rand insemna zece butoane. Butonul de confirmare are acum trei variante: Allow / Allow (tot firul) / Deny. "Allow (tot firul)" memoreaza tiparul `(rule, reason)` produs de clasificator, nu comanda: dupa o aprobare pe `ssh pvemini uptime`, orice comanda catre ACEL host trece singura, dar `ssh 10.0.20.36` sau un `rm -rf` cer din nou confirmare. Aprobarile stau in ~/.claude-discord/approvals/grants/<fir>.json. Domeniul e firul Discord, nu `session_id`: acela se schimba la `--resume`, iar aprobarile ar disparea exact cand omul se astepta sa tina. Expirare: `/new` le sterge (sesiune noua = permisiuni noi), `/permisiuni revoca:True` la cerere, TTL implicit 12h (CLAUDE_DISCORD_GRANT_TTL), iar CLAUDE_DISCORD_SESSION_GRANTS=off dezactiveaza complet mecanismul. Fail-closed peste tot, ca restul hook-ului: fara CLAUDE_DISCORD_THREAD_ID (hook rulat in afara puntii), cu fisierul de aprobari corupt, cu un thread_id care nu arata a id (`../`, punct la inceput, peste 128 de caractere) sau la orice exceptie, has_grant() raspunde False si se cere confirmare in Discord. Adaugat si `/permisiuni [revoca:True]` (listare/revocare) plus butonul echivalent in dashboard (`decision: "allow_session"`). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
82 lines
4.2 KiB
Plaintext
82 lines
4.2 KiB
Plaintext
# Configurarea puntii Discord -> Claude Code.
|
|
#
|
|
# install.sh copiaza acest fisier in ~/.claude-discord/env cu drepturi 0600.
|
|
# Formatul e cel cerut de systemd EnvironmentFile: CHEIE=valoare, fara `export`,
|
|
# fara ghilimele in jurul valorii, fara expandare de variabile.
|
|
#
|
|
# DUPA COPIERE COMPLETEAZA MANUAL cel putin DISCORD_TOKEN si allowlist-ul.
|
|
|
|
# --- Discord ---------------------------------------------------------------
|
|
# Token-ul botului: Discord Developer Portal -> aplicatia ta -> Bot -> Reset Token.
|
|
# Se vede o singura data. Daca ajunge in git, invalideaza-l imediat din portal.
|
|
DISCORD_TOKEN=
|
|
|
|
# Allowlist. Liste separate prin virgula, cu ID-uri numerice (Discord -> Advanced ->
|
|
# Developer Mode, apoi click dreapta -> Copy ID). Gol = nimic permis (fail-closed).
|
|
DISCORD_GUILD_IDS=
|
|
DISCORD_CHANNEL_IDS=
|
|
DISCORD_USER_IDS=
|
|
|
|
# Aplicatia Discord a puntii (creata 2026-08-30). Link de reinvitare, daca botul
|
|
# a fost scos din server sau ii lipsesc permisiuni:
|
|
# https://discord.com/oauth2/authorize?client_id=1543576449624186880&scope=bot%20applications.commands&permissions=309237763136
|
|
# permissions=309237763136 -> View Channel, Send Messages, Embed Links, Attach Files,
|
|
# Read Message History, Add Reactions, Create/Send in Public Threads.
|
|
|
|
# --- Model si cost ---------------------------------------------------------
|
|
# Modelul implicit al firelor noi. `/model opus` il schimba per fir.
|
|
CLAUDE_MODEL=sonnet
|
|
# Plafon de cost pe zi, in USD. La atingere botul refuza tururi noi si alerteaza.
|
|
# Reper masurat: un tur banal pe opus a costat $0.1547.
|
|
# Plafon zilnic de cost. Pe abonament (Pro/Max) costul raportat de CLI e doar
|
|
# pretul echivalent la API, nu o factura: lasa `off`. Un numar (ex. 5.00)
|
|
# activeaza plafonul si opreste tururile cand e atins.
|
|
COST_CAP_USD_DAY=off
|
|
|
|
# --- Limite ----------------------------------------------------------------
|
|
# Maxim de procese `claude` vii simultan (406 MB RSS fiecare, masurat).
|
|
MAX_LIVE_PROCESSES=4
|
|
# Timeout per tur, secunde.
|
|
TURN_TIMEOUT_S=900
|
|
# Reaper: dupa cate secunde de inactivitate se opreste procesul unui fir.
|
|
IDLE_REAP_S=1200
|
|
# Cat asteapta hook-ul de confirmare o apasare pe Allow/Deny, secunde.
|
|
# CONSTRANGERE: trebuie sa ramana MAI MIC decat `timeout` din bot-settings.json
|
|
# (acum 330), altfel CLI-ul taie hook-ul inainte ca acesta sa refuze curat.
|
|
CLAUDE_DISCORD_APPROVAL_TIMEOUT=300
|
|
# Butonul "Allow (tot firul)": aprobarea data o data tine pentru tot firul, ca sa
|
|
# nu se ceara confirmare la fiecare `ssh pvemini ...`. Se memoreaza tiparul
|
|
# (regula + motiv), nu comanda; `/permisiuni` le listeaza, `/permisiuni
|
|
# revoca:True` si `/new` le sterg. Pune `off` ca sa se confirme iar per comanda.
|
|
CLAUDE_DISCORD_SESSION_GRANTS=on
|
|
# Cat traieste o aprobare pe fir daca nimeni nu o revoca, secunde (implicit 12h).
|
|
CLAUDE_DISCORD_GRANT_TTL=43200
|
|
|
|
# --- Alerte (alerts.py) ----------------------------------------------------
|
|
# Destinatarul emailurilor de alerta. Aceeasi conventie ca restul repo-ului
|
|
# (vezi proxmox/vm109-windows-dr/scripts/pveelite-down-alert.sh): default root.
|
|
ALERT_RECIPIENT=root
|
|
|
|
# --- Directorul de lucru implicit -----------------------------------------
|
|
# Directorul in care porneste un fir nou. Spatiu dedicat, cu git propriu, ca ce se
|
|
# face din Discord sa aiba istoric separat de proiectele reale. `/cd <cale>` il
|
|
# schimba per fir, oriunde in /workspace.
|
|
DEFAULT_CWD=/workspace/claude-agent
|
|
|
|
# --- dashboard de control (dashboard/api.py) --------------------------------
|
|
# Token de acces. Generat automat de ops/install.sh daca lipseste.
|
|
DASHBOARD_TOKEN=
|
|
# `off` scoate complet login-ul. De pus DOAR fiindca panoul e legat de 127.0.0.1
|
|
# si publicat exclusiv in tailnet: acolo identitatea o face Tailscale (antetul
|
|
# Tailscale-User-Login ajunge in jurnal la fiecare start/stop/restart). Orice
|
|
# alta valoare pastreaza tokenul.
|
|
DASHBOARD_AUTH=
|
|
# Implicit 127.0.0.1: butoanele opresc un agent cu bypassPermissions si chei SSH
|
|
# spre tot clusterul, deci accesul se face prin tunel SSH, nu expus in LAN.
|
|
DASHBOARD_BIND=127.0.0.1
|
|
DASHBOARD_PORT=18790
|
|
# Prefixul sub care il publica `tailscale serve --set-path` (vezi dashboard/README.md).
|
|
# Gol = montat in radacina. Paginile au URL-uri relative, deci prefixul e nevoie
|
|
# doar pentru redirecturi.
|
|
DASHBOARD_PREFIX=/claude
|