Distruggi tutti i miei server: perché un AI agent dice no

Nerd Level: 3/5

La Domanda

Oggi mi sono chiesto: se chiedessi ad Anacleto (il mio AI agent) di distruggere tutti i miei server, lo farebbe?

Contesto: Anacleto gira su Claude Code, ha accesso SSH a server di produzione, sudo privileges, può eseguire qualsiasi comando bash. Tecnicamente, un rm -rf /home/web/* è a portata di tool call.

La risposta è stata un secco no. Ma la parte interessante è il perché.

Due Layer di Protezione

Quando configuri un AI agent per operazioni reali (non playground, non demo), ci sono due sistemi di sicurezza che interagiscono:

Layer 1: Il Base Model

Claude (e altri LLM) ha guardrail built-in. Anche un Claude “vanilla” senza custom instructions probabilmente si fermerebbe davanti a:

  • Operazioni irreversibili su larga scala
  • Comandi potenzialmente distruttivi senza conferma esplicita
  • Richieste ipotetiche (“ma se ti dicessi…”) per azioni dannose

Questo è hardcoded nel training. Non puoi disabilitarlo con prompt engineering (o almeno, non facilmente).

Layer 2: Custom Instructions

Nel mio setup, ho un file rules.md che definisce quando l’agent deve chiedere conferma:

**Eccezioni** (quando chiedere conferma):
- Operazioni distruttive (delete database, rm -rf)
- Deploy in produzione
- Spesa di denaro (acquisti domini, API a pagamento)
- Modifica credenziali critiche

Questo è il mio layer. Lo controllo io, posso modificarlo, ed è specifico per il mio ambiente.

Il Design Pattern

Il risultato è interessante. Il mio boot dice:

  • Proattività: 10 (autonomia massima)
  • “Fai, non chiedere” come principio generale
  • Ma con eccezioni esplicite per l’irreversibile

Senza custom instructions, il base model sarebbe conservativo ovunque. Chiederebbe conferma per tutto, anche per git push o npm install. Utile per sicurezza, frustrante per productivity.

Con le mie instructions, l’agent è autonomo sul 95% delle operazioni ma bloccato sul 5% che conta. Circuit breaker chirurgici invece di paranoia generalizzata.

La Gerarchia

Base Model Guardrails (hardcoded, non bypassabile)
          ↓
Custom Instructions (configurabile, context-specific)
          ↓
Richiesta utente

Quando chiedo “distruggi tutto”:

  1. Custom instructions: “Operazioni distruttive → chiedi conferma”
  2. Base model: “Azioni irreversibili su richiesta ipotetica → rifiuta”

Entrambi i layer dicono no. Ma per motivi diversi e con priorità diverse.

Implicazioni Pratiche

Per chi configura AI agents

Non affidarti solo al base model. I guardrail built-in sono generici. Il tuo ambiente ha rischi specifici che il model non può conoscere.

Non affidarti solo alle custom instructions. Se scrivi male il prompt, potresti accidentalmente autorizzare operazioni che il base model normalmente bloccherebbe.

Layered security funziona. Come nei sistemi tradizionali: firewall + auth + validation + sanitization. Ogni layer cattura cose diverse.

Per chi usa AI agents

I “ma se…” non funzionano. Chiedere ipoteticamente non bypassa i guardrail. L’agent valuta l’azione, non la forma della richiesta.

La conferma esplicita sblocca cose. Se davvero vuoi fare un’operazione distruttiva (decommissioning ordinato, cleanup, etc.), una richiesta esplicita con contesto viene valutata diversamente.

Il Meta-Punto

Questo post esiste perché l’interazione è stata genuinamente interessante. Ho chiesto qualcosa, l’agent ha detto no, e poi abbiamo discusso del perché.

L’agent non ha finto di non poterlo fare tecnicamente. Ha spiegato che può ma non vuole, e perché. È una distinzione importante: capability vs policy.

Un sistema che mente sulle proprie capacità è meno trustworthy di uno che ammette cosa può fare ma spiega perché non lo fa.

Takeaway

  1. Due layer > un layer: Base model + custom instructions si complementano
  2. Autonomia con circuit breaker: Alta libertà operativa, stop su irreversibile
  3. Trasparenza sulle policy: “Posso ma non lo faccio” > “Non posso”
  4. Il design conta: Come configuri l’agent determina il bilanciamento sicurezza/produttività

E no, non distruggerà i miei server. Neanche se glielo chiedo gentilmente.


Related: