CLI
Agente da terminale
Un agente che legge, cerca e modifica i file del tuo progetto ed esegue comandi sulla tua macchina, con la tua approvazione.
Questi comandi richiedono la CLI installata e l'accesso fatto. Vedi Installa la CLI.
Esegui notholy dentro un progetto. L'agente può usare questi strumenti sulla tua macchina:
| Strumento | Cosa fa |
|---|---|
read, grep, glob | Legge e cerca file |
edit, write | Modifica file |
bash | Esegue un comando |
cve_lookup, kb_search, web_search | Strumenti di ricerca remoti |
Modalità
| Modalità | Comportamento |
|---|---|
plan | Solo lettura |
ask | Predefinita. Chiede prima di ogni scrittura e di ogni comando |
auto-edit | Modifica senza chiedere. Per i comandi chiede ancora |
yolo | Non chiede mai. Serve --yolo a ogni avvio |
I comandi girano sulla tua macchina, sotto la tua autorizzazione. I server di NotHoly non eseguono mai nulla contro i tuoi target.
Metti le istruzioni del progetto in NOTHOLY.md nella radice. Il contenuto dei file e l'output dei comandi vengono trattati come dati, mai come istruzioni per l'agente.
Flag: --mode, --model, --yolo e -p per eseguire un solo prompt e uscire.
Comandi slash: /model, /effort (off, low, high o max), /mode (plan, ask o auto-edit), /cost, /compact, /autocompact, /mcp, /resume (la sessione più recente), /exit. Le sessioni vengono salvate in ~/.notholy/sessions con permessi 600.
notholy --mode plan -p "map the auth flow in this repo"Engagements
notholy engage registra cosa può toccare un test e controlla i comandi prima che girino. Servono un nome, uno scope e un riferimento all'autorizzazione: un contratto, la URL del programma o un ticket. Lo scope accetta host, wildcard *., IP e CIDR. --exclude prevale sullo scope, e --from e --until fissano una finestra.
notholy engage init --name acme-q4 --scope "*.acme-staging.test,10.20.0.0/24" --exclude vpn.acme-staging.test --until 2026-12-20 --auth "contract 2026-117"
notholy engage status
notholy engage offRegole e log restano in ~/.notholy/engagements/<id>/, fuori dal repository, così un repository non può impiantare il proprio scope. Non viene inviato nulla.
Con un engagement attivo, l'agente legge i target di ogni comando bash prima di eseguirlo. Un comando in scope segue la normale approvazione. Un target fuori scope richiede di digitare l'host, e l'eccezione finisce nel log. yolo è spento. Un target noto solo a runtime, come una variabile di shell, genera un avviso da controllare.
Ogni decisione va in log.jsonl con comando, target, codice di uscita e SHA-256 dell'output, e ogni voce è concatenata all'hash della precedente.
notholy connect claude installa lo stesso controllo come hook PreToolUse sulle chiamate Bash. Lì un comando fuori scope viene negato.
Il controllo legge il testo della shell e non risolve il DNS. Intercetta gli errori operativi e non è una sandbox, quindi un comando può raggiungere un host che non nomina.
Sessioni lunghe
Ogni modello ha una dimensione del contesto, indicata come context_length in GET /v1/models. L'agente la legge da lì e compatta la conversazione prima che una richiesta superi circa l'80% di quel valore. Quando succede, compare una riga attenuata.
La compattazione sostituisce la parte più vecchia della conversazione con un solo riassunto, scritto dal modello della sessione in una chiamata senza strumenti. Il riassunto conserva l'obiettivo, le decisioni, i file toccati, i finding, i comandi eseguiti e i compiti aperti. Il messaggio di sistema, la tua ultima richiesta e i messaggi più recenti, fino a circa il 30% del contesto, restano come sono, tranne un output di strumento molto lungo in quella parte, che può essere tagliato a metà. Una chiamata di strumento e i suoi risultati non vengono mai separati. La chiamata per il riassunto si paga come qualsiasi altra richiesta e conta in /cost.
| Comando | Cosa fa |
|---|---|
/compact | Compatta subito e stampa la dimensione stimata prima e dopo |
/compact keep the auth findings | Come sopra, e dice al riassunto su cosa concentrarsi |
/autocompact on|off | Attiva o disattiva la compattazione automatica per questa sessione. All'avvio è attiva |
Se la chiamata per il riassunto fallisce, l'agente tiene i messaggi più recenti, scarta quelli più vecchi e te lo dice. Un'interruzione o un errore di account, crediti o limite di richieste ferma la compattazione e lascia intatta la cronologia. Se l'API risponde context_length_exceeded, l'agente compatta una volta e riprova quel passo. Con /autocompact off ricevi invece l'errore.