
Il workspace di terminal-router mantiene la sessione del router e l’osservatore AI in due pannelli indipendenti.
Questo articolo è il seguito della guida Terminal-router assistente AI Claude Code e Codex su router Cisco e Huawei. La prima versione descriveva il principio della registrazione del terminale e la lettura del log da parte dell’assistente. La versione 1.1.0 porta quel principio dentro un workspace operativo completo, progettato per il lavoro quotidiano di un system integrator.
Il progetto parallelo in lingua inglese è disponibile su terminal-router AI assistants on Cisco and Huawei routers. La documentazione tecnica e il codice sorgente sono pubblicati nel repository fconidi/terminal-router.
Che cosa cambia nella nuova versione
terminal-router apre due widget terminale indipendenti. Il pannello sinistro è riservato alla sessione del router o dello switch. Il pannello destro esegue Claude Code oppure Codex come osservatore. L’assistente legge l’output registrato, analizza lo stato del dispositivo e risponde alle domande dell’operatore.
Il dispositivo remoto non viene esposto all’assistente. L’operatore mantiene il controllo della connessione SSH o della console seriale, digita i comandi e decide se applicare i suggerimenti ricevuti. L’assistente non deve autenticarsi sul router e non dispone di un canale diretto verso l’apparato.
Il nuovo workspace integra anche la proposta controllata di comandi. La funzione è disabilitata per impostazione predefinita. Quando viene abilitata, ogni gruppo di comandi viene mostrato all’operatore, validato e inviato soltanto dopo la conferma tramite codice monouso.
Architettura del workspace
Il launcher crea un server tmux privato per il workspace e due sessioni separate. La sessione del router viene registrata nella directory personale ~/.claude-logs. La sessione dell’assistente non viene registrata dal launcher. Il pannello dell’osservatore segue un collegamento stabile verso il log del router appartenente a quello specifico workspace.
Questo isolamento evita che l’apertura di un secondo workspace sposti l’osservatore sul dispositivo sbagliato. Anche una sospensione e una ripresa della registrazione mantengono il collegamento corretto. Le configurazioni tmux globali dell’utente non vengono caricate nel server privato usato dal workspace.
Il comportamento del mouse è separato intenzionalmente. Nel pannello del router la selezione e il copia e incolla funzionano come in un terminale normale. Nel pannello dell’assistente la rotella scorre la cronologia tmux fino a 50.000 righe. Per selezionare testo nel pannello dell’assistente si tiene premuto Shift durante il trascinamento. In questo modo lo scorrimento non genera sequenze di tasti freccia dentro il prompt dell’assistente.
Avvio rapido
Dopo l’installazione, il comando senza argomenti apre il workspace e sceglie automaticamente Claude Code quando disponibile. Se Claude Code non è disponibile, viene scelto Codex.
terminal-router terminal-router claude terminal-router codex terminal-router workspace claude terminal-router workspace codex
I comandi con il nome dell’engine richiedono espressamente quel programma. Se l’engine indicato non è installato o non è autenticato, terminal-router segnala l’errore senza sostituirlo silenziosamente con l’altro.
Al primo avvio viene mostrato un avviso. Il log contiene ciò che appare sullo schermo e l’output viene inviato al provider AI attraverso la CLI autenticata. L’utente deve accettare esplicitamente questa condizione. L’installazione del pacchetto non attiva la registrazione e non modifica automaticamente i file personali.
Connessione SSH al router
La connessione SSH viene aperta nel pannello sinistro. Le richieste di password, le richieste della chiave host e l’interazione con la shell remota restano nel terminale del router.
ssh admin@192.168.1.1
Quando il router produce nuovo output, l’osservatore lo riceve secondo la cadenza automatica configurata. L’operatore può chiedere chiarimenti direttamente nel pannello destro, per esempio domandando una spiegazione di una tabella di routing, una verifica di una ACL o una lettura delle interfacce attive.
Console seriale
Il pannello del router mostra anche i comandi di riferimento per una console seriale. Il programma consigliato è tio, installato come dipendenza obbligatoria. screen e picocom sono alternative opzionali.
tio --list tio --baudrate 9600 --databits 8 --parity none --stopbits 1 --flow none /dev/ttyUSB0 screen /dev/ttyUSB0 9600 picocom --baud 9600 --databits 8 --parity n --stopbits 1 --flow n /dev/ttyUSB0
In base all’adattatore utilizzato il dispositivo può essere /dev/ttyACM0. È preferibile usare, quando disponibile, il percorso stabile in /dev/serial/by-id/. Con i valori predefiniti di tio, cioè 115200 8N1 senza controllo di flusso, è sufficiente il comando seguente.
tio /dev/ttyUSB0
Per uscire da tio si usa Ctrl-t q. La registrazione funziona anche con screen e picocom, ma l’invio controllato dei comandi richiede che il programma in primo piano sia tio oppure ssh.
Analisi automatica e contesto inviato all’AI
L’osservatore raggruppa l’output dopo due secondi di inattività, oppure dopo un massimo di cinque secondi di output continuo. Tra due richieste automatiche devono trascorrere almeno dieci secondi. Se l’output non è cambiato, non viene inviata una nuova richiesta.
Ogni richiesta contiene al massimo gli ultimi 128 KiB del log del router e lo scambio precedente. Questo limite conserva una porzione utile dell’output senza trasformare la sessione in una cronologia illimitata. La cronologia visualizzata nel pannello può invece arrivare a 50.000 righe.
Una richiesta già inviata può terminare anche dopo la sospensione della registrazione. La sospensione impedisce l’avvio di nuove analisi automatiche. In caso di errore della CLI o di autenticazione, la modalità automatica si arresta e può essere riattivata dopo la correzione.
| Input nell’osservatore | Funzione |
|---|---|
| Domanda seguita da Invio | Analizza lo stato corrente del router e risponde. |
| Invio su riga vuota | Richiede immediatamente una nuova analisi. |
:auto off |
Arresta le richieste automatiche, annulla quella attiva e svuota la coda automatica. |
:auto on |
Riattiva le richieste automatiche. |
:config on |
Abilita la modalità di configurazione protetta per la sessione corrente. |
:config off |
Disabilita la modalità protetta e annulla una proposta pendente. |
:apply comando |
Prepara manualmente un comando per la revisione. |
:confirm codice |
Invia una sola volta il gruppo mostrato dopo la conferma. |
:cancel |
Elimina il gruppo di comandi in attesa. |
:quit |
Chiude l’osservatore e lascia disponibile il terminale del router. |
| F9 e F10 | Sospendono e riprendono la registrazione del pannello originale del router. |
Modalità di configurazione protetta
La modalità di configurazione è disabilitata all’avvio e rimane valida soltanto per l’osservatore corrente. L’AI può proporre comandi, ma la proposta viene trattata come input non attendibile. Ogni riga viene verificata, l’intero gruppo viene mostrato e nessun comando viene inviato senza la conferma dell’operatore.
La modalità accetta fino a 32 comandi in un gruppo ordinato. L’invio è possibile solo quando nel pannello del router è in primo piano una sessione ssh oppure tio. Operatori della shell, caratteri di controllo e nuove righe inserite dentro un singolo comando vengono rifiutati.
:config on Configura l’interfaccia Gi0/1 con descrizione UPLINK e abilitala Comandi in attesa: 1. configure terminal 2. interface Gi0/1 3. description UPLINK 4. no shutdown 5. end :confirm A1B2C3D4E5F6
Il codice è valido per 120 secondi e abilita soltanto il gruppo visualizzato. Nuove analisi AI attendono la conclusione della revisione. F9, il cambio del trasporto o la sospensione del pannello annullano la proposta in attesa. È comunque necessario controllare ogni riga prima della conferma, soprattutto quando il dispositivo è in produzione.
Registrazione globale e registrazione di una sola sessione
Il comando terminal-router install abilita la registrazione per ogni terminale interattivo dell’utente. Aggiunge blocchi marcati a ~/.bashrc oppure ~/.zshrc e a ~/.tmux.conf. Ogni pannello tmux viene collegato allo script di logging e il collegamento ~/.claude-logs/latest punta al log più recente.
Il comando terminal-router launch crea invece una sessione autonoma per un’attività singola. Gli hook vengono applicati soltanto a quella sessione tmux e scompaiono alla sua chiusura. Non vengono modificati ~/.bashrc, ~/.zshrc o ~/.tmux.conf. Terminator e gli altri terminali aperti restano indipendenti.
Le modalità sono per utente e confinano i dati nella home personale. Non eseguire il comando come root: la configurazione riguarda la home dell’utente che lo lancia e con sudo verrebbe utilizzata la home di root.
![]()
L’icona di terminal-router viene installata nel menu applicazioni di SysLinuxOS.
Comandi amministrativi
| Comando | Utilizzo |
|---|---|
terminal-router status |
Mostra hook attivi, rotazione, programmi AI disponibili, log presenti e pannelli correnti. |
terminal-router doctor |
Esegue controlli in sola lettura su configurazione, permessi, log e pannelli live. |
terminal-router tail |
Segue il log del pannello più recente e cambia file quando cambia il collegamento latest. |
terminal-router pause |
Sospende la cattura nel pannello tmux corrente. |
terminal-router resume |
Riprende la cattura in un nuovo file. |
terminal-router menu |
Apre il menu di configurazione e le modalità di avvio alternative. |
terminal-router remove |
Rimuove gli hook, crea backup dei file modificati e consente di eliminare i log. |
Dopo install sono disponibili anche le funzioni logpause e logresume. Il distacco dalla sessione tmux con Ctrl-b d non interrompe la registrazione e non chiude l’osservatore. Per sospendere davvero la cattura occorre usare F9 oppure terminal-router pause.
Controlli di sicurezza e privacy
Il log contiene tutto ciò che viene mostrato sullo schermo. Una password digitata in un prompt interattivo SSH o sudo normalmente non viene registrata perché il terminale non la visualizza. Vengono invece registrati i segreti che l’operatore rende visibili, come password passate negli argomenti, token negli header HTTP, variabili esportate in chiaro e il contenuto visualizzato di file .env o chiavi private.
La directory ~/.claude-logs usa permessi 0700 e i log usano permessi 0600. Lo script di logging usa umask 077. La rotazione notturna elimina i log più vecchi di 30 giorni. La directory è collocata fuori dalle cartelle sincronizzate con il cloud. Prima di un’operazione sensibile è possibile sospendere la registrazione e riprenderla in un nuovo file.
La CLI mantiene la propria autenticazione, ma l’osservatore disabilita shell tools e integrazioni configurate e ignora la configurazione del progetto. Codex viene eseguito in modalità read only. È possibile selezionare il modello con TR_CLAUDE_MODEL o TR_CODEX_MODEL. La lingua dell’osservatore segue il locale di sistema oppure può essere impostata con TR_LANGUAGE=it.
Installazione su SysLinuxOS
Su SysLinuxOS il pacchetto è disponibile nel repository SysLinuxOS Tools.
echo "deb https://fconidi.github.io/SysLinuxOS-Tools tirreno main" | sudo tee /etc/apt/sources.list.d/syslinuxos-tools.list wget -qO- https://fconidi.github.io/SysLinuxOS-Tools/syslinuxos-archive-keyring.asc | sudo tee /usr/share/keyrings/syslinuxos-archive-keyring.asc > /dev/null sudo apt update sudo apt install terminal-router terminal-router
Installazione su Debian e Ubuntu
Il repository GitHub pubblica il pacchetto Debian e il relativo checksum SHA 256.
wget https://github.com/fconidi/terminal-router/releases/download/v1.1.0/terminal-router_1.1.0_all.deb wget https://github.com/fconidi/terminal-router/releases/download/v1.1.0/terminal-router_1.1.0_all.deb.sha256 sha256sum -c terminal-router_1.1.0_all.deb.sha256 sudo apt install ./terminal-router_1.1.0_all.deb terminal-router
Per compilare il pacchetto da sorgente:
git clone https://github.com/fconidi/terminal-router.git cd terminal-router bash build-deb.sh sudo apt install ./terminal-router_1.1.0_all.deb terminal-router
Il comando finale deve essere eseguito come utente normale. Le dipendenze principali sono Bash, tmux 3.0 o superiore, Python 3 con libreria standard, tio e Terminator. Cron è consigliato per la rotazione dei log. Il workspace richiede una CLI Claude Code o Codex installata e autenticata.
Aggiornamento dalla serie 1.0
Chi usa la modalità globale deve eseguire nuovamente terminal-router install dopo l’aggiornamento. Il comando aggiorna soltanto i blocchi marcati, crea backup con estensione .terminal-router.bak e conserva le impostazioni circostanti.
Un server tmux già in esecuzione conserva gli hook caricati in precedenza. Per ricaricare la configurazione si può usare tmux source-file ~/.tmux.conf. Nei pannelli già aperti è opportuno usare terminal-router pause e terminal-router resume. Per una singola attività è preferibile avviare una nuova sessione con terminal-router launch.
Conclusione
terminal-router 1.1.0 trasforma la registrazione del terminale in un ambiente operativo completo per l’assistenza AI durante il lavoro su router e switch. La separazione tra pannello del dispositivo e pannello dell’osservatore conserva il controllo umano, mentre il log consente all’assistente di leggere il contesto reale della sessione. La modalità di configurazione protetta aggiunge un percorso controllato per proporre comandi senza trasformare l’assistente in un accesso amministrativo autonomo.
Per la documentazione completa consultare il repository GitHub di terminal-router e il manuale installato con il pacchetto tramite man terminal-router.
terminal-router 1.1.0 assistente AI integrato per router Cisco e Huawei
