[{"data":1,"prerenderedAt":660},["ShallowReactive",2],{"docs-pages-it":3,"doc-it-automator":155},[4,11,16,21,26,31,37,48,56,65,73,81,89,93,102,106,114,119,124,129,135,140,145,150],{"path":5,"title":6,"description":7,"order":8,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Finstallation","Installazione","Installa CloseYourIt sul tuo server con un solo comando.",1,"start",null,{"path":12,"title":13,"description":14,"order":15,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fsettings","Impostazioni","Ogni impostazione del file .env, a cosa serve e quali non vanno mai cambiate.",2,{"path":17,"title":18,"description":19,"order":20,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fdatabase","Database","Cos'è il database, cosa contiene, quanto restano i dati e quanto spazio occupa.",3,{"path":22,"title":23,"description":24,"order":25,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fupdates-and-backups","Aggiornamenti e backup","Aggiorna a una versione nuova, fai e ripristina il backup del database, controlla l'installazione.",4,{"path":27,"title":28,"description":29,"order":30,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Ftroubleshooting","Risolvere i problemi","Cosa controllare quando installazione, certificato, email o dati in arrivo non funzionano.",5,{"path":32,"title":33,"description":34,"order":35,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fconnect-your-apps","Collega le tue app","Tutti gli strumenti che mandano dati a CloseYourIt, e cosa raccoglie ognuno.",6,"connect",{"path":38,"title":39,"description":40,"order":41,"group":10,"parent":42,"package":43,"note":44,"collects":45,"status":10},"\u002Fdocs\u002Fsdk-ruby","Ruby \u002F Rails","La gemma closeyourit-ruby manda errori, log, query lente e metriche dei job da un'app Rails.",7,"connect-your-apps","closeyourit-ruby","Errori, log, query e metodi lenti, job in background.",{"errors":46,"logs":46,"performance":46,"visits":47,"servers":47},"full","none",{"path":49,"title":50,"description":51,"order":52,"group":10,"parent":42,"package":53,"note":54,"collects":55,"status":10},"\u002Fdocs\u002Fsdk-javascript","JavaScript","Il pacchetto @bussolabs\u002Fcloseyourit-js funziona nel browser e su Node 20.16 o più recente.",8,"@bussolabs\u002Fcloseyourit-js","Browser e Node, adattatori framework e query database dalla 0.13.0.",{"errors":46,"logs":46,"performance":46,"visits":46,"servers":47},{"path":57,"title":58,"description":59,"order":60,"group":10,"parent":42,"package":61,"note":62,"collects":63,"status":10},"\u002Fdocs\u002Fsdk-dart","Dart \u002F Flutter","Il pacchetto closeyourit cattura gli errori delle app Flutter, anche quando il telefono è senza rete.",9,"closeyourit","Errori, log e metriche pubblici dalla 0.9.3.",{"errors":46,"logs":64,"performance":64,"visits":47,"servers":47},"partial",{"path":66,"title":67,"description":68,"order":69,"group":10,"parent":42,"package":61,"note":70,"collects":71,"status":72},"\u002Fdocs\u002Fsdk-python","Python","Il pacchetto closeyourit manda errori, log e metriche da applicazioni Python lato server.",10,"Lato server. SQLAlchemy; query Django e FastAPI\u002FStarlette dalla 0.4.0.",{"errors":46,"logs":46,"performance":64,"visits":47,"servers":47},"pre_alpha",{"path":74,"title":75,"description":76,"order":77,"group":10,"parent":42,"package":78,"note":79,"collects":80,"status":10},"\u002Fdocs\u002Fsdk-sentry","SDK Sentry","Invia errori con un SDK Sentry compatibile; sessioni e crash hanno profili separati.",11,"Sentry SDK","Errori compatibili; sessioni e crash richiedono il profilo verificato.",{"errors":46,"logs":47,"performance":47,"visits":47,"servers":47},{"path":82,"title":83,"description":84,"order":85,"group":10,"parent":42,"package":86,"note":87,"collects":88,"status":10},"\u002Fdocs\u002Fagent-server","Agent per server","Un piccolo programma sul server che manda lo stato della macchina ogni 60 secondi.",12,"closeyourit-agent","CPU, memoria, dischi, rete, container e servizi.",{"errors":47,"logs":64,"performance":47,"visits":47,"servers":46},{"path":90,"title":91,"description":92,"order":85,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnuxt","Vue e Nuxt","Collega gli errori del browser Nuxt e del server Nitro senza esporre un token segreto.",{"path":94,"title":95,"description":96,"order":97,"group":10,"parent":42,"package":98,"note":99,"collects":100,"status":101},"\u002Fdocs\u002Fagent-kubernetes","Kubernetes","Un osservatore in sola lettura del cluster: una copia sola per cluster.",13,"closeyourit-kube","Macchine, app ed eventi di errore del cluster.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":46},"coming",{"path":103,"title":104,"description":105,"order":97,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fopentelemetry","OpenTelemetry","Invia tracce, metriche e log dei server attraverso il ricevitore OTLP facoltativo.",{"path":107,"title":108,"description":109,"order":110,"group":10,"parent":42,"package":111,"note":112,"collects":113,"status":10},"\u002Fdocs\u002Fcli","CLI cyi","Il comando closeyourit, in breve cyi: gestisci progetti, errori e ticket dal terminale.",14,"@bussolabs\u002Fcloseyourit-cli","Non raccoglie dati: comanda CloseYourIt dal terminale.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":47},{"path":115,"title":116,"description":117,"order":118,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fhttp-api","API HTTP","Manda errori, log, metriche e visite con semplici richieste HTTP, senza un SDK.",15,{"path":120,"title":121,"description":122,"order":123,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fgithub-app","GitHub","Collega i repository GitHub a ticket e rilasci con una GitHub App tua.",16,{"path":125,"title":126,"description":127,"order":128,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fingest-gateway","Gateway di ingest","Tieni al sicuro errori, log e metriche in arrivo quando l'app è lenta o sta ripartendo.",17,{"path":130,"title":131,"description":132,"order":133,"group":134,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fai","AI","Accendi assistente, analisi, dettatura e ricerca intelligente con una chiave CloseYourIt AI o con il tuo provider.",18,"automation",{"path":136,"title":137,"description":138,"order":139,"group":134,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fautomator","Automator","Fai lavorare i ticket in automatico su una tua macchina Linux, con Claude Code, Codex o tutti e due.",19,{"path":141,"title":142,"description":143,"order":144,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fstack-coverage","Framework e copertura degli stack","Scegli un SDK pubblicato o verifica i limiti di un’integrazione provata localmente.",20,{"path":146,"title":147,"description":148,"order":149,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fmonitoring","Tracce, misure e sessioni","Esplora i nuovi segnali, confronta le versioni e ricostruisci le posizioni originali degli errori.",21,{"path":151,"title":152,"description":153,"order":154,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnode-database","Database Node","Monitora query lente e ripetute con pg, mysql2, Drizzle e Prisma PostgreSQL.",22,{"id":156,"title":137,"body":157,"collects":10,"description":138,"extension":655,"group":134,"meta":656,"navigation":313,"note":10,"order":139,"package":10,"parent":10,"path":136,"seo":657,"status":10,"stem":658,"__hash__":659},"docs_it\u002Fdocs\u002Fautomator.md",{"type":158,"value":159,"toc":645},"minimark",[160,173,178,245,251,256,262,354,357,363,387,394,444,448,461,465,479,490,493,504,508,514,528,532,535,579,583,590,638,641],[161,162,163,164,168,169,172],"p",{},"L'automator prende i ticket che abiliti, li lavora in una cartella isolata del repository e apre una modifica da rivedere. Gira sulla ",[165,166,167],"strong",{},"tua"," macchina, con il ",[165,170,171],{},"tuo"," abbonamento: il codice non esce mai da lì.",[174,175,177],"h2",{"id":176},"cosa-serve","Cosa serve",[179,180,181,194,207,214,220,226],"ul",{},[182,183,184,185,189,190,193],"li",{},"Linux ",[186,187,188],"code",{},"x86_64"," o ",[186,191,192],{},"arm64"," con systemd 254 o più recente.",[182,195,196,199,200,203,204,206],{},[186,197,198],{},"bubblewrap"," e ",[186,201,202],{},"socat",", che limitano dove l'agente può scrivere e dove può collegarsi. Senza ",[186,205,202],{},", Claude Code non parte.",[182,208,209,210,213],{},"Un portachiavi di sistema (",[186,211,212],{},"gnome-keyring",") con la raccolta «login»: lì l'automator conserva il token della macchina.",[182,215,216,219],{},[165,217,218],{},"Codex",", installato e con l'accesso fatto: serve sempre, perché anche la rilettura di Claude gira dentro l'isolamento di Codex. Senza Codex nessun lavoro viene riletto e nessuno arriva alla PR.",[182,221,222,225],{},[165,223,224],{},"Claude Code",", se vuoi che lavori o rilegga Claude.",[182,227,228,229,232,233,236,237,240,241,244],{},"Installa Codex con ",[186,230,231],{},"npm"," dell'utente (per esempio quello di ",[186,234,235],{},"mise","), non con ",[186,238,239],{},"sudo npm -g",": l'automator non usa programmi in ",[186,242,243],{},"\u002Fusr\u002Flib",", né cartelle che altri utenti possono modificare.",[161,246,247,250],{},[186,248,249],{},"automator doctor"," controlla ogni requisito e dice cosa manca.",[252,253,255],"h3",{"id":254},"ubuntu-2404-e-successivi","Ubuntu 24.04 e successivi",[161,257,258,259,261],{},"Ubuntu blocca l'isolamento che serve a ",[186,260,198],{},", quindi la sandbox non parte. Si sblocca una volta con un profilo AppArmor:",[263,264,269],"pre",{"className":265,"code":266,"language":267,"meta":268,"style":268},"language-bash shiki shiki-themes github-light github-dark","sudo tee \u002Fetc\u002Fapparmor.d\u002Fbwrap >\u002Fdev\u002Fnull \u003C\u003C'PROFILE'\nabi \u003Cabi\u002F4.0>,\ninclude \u003Ctunables\u002Fglobal>\n\nprofile bwrap \u002Fusr\u002Fbin\u002Fbwrap flags=(unconfined) {\n  userns,\n  include if exists \u003Clocal\u002Fbwrap>\n}\nPROFILE\nsudo apparmor_parser -r \u002Fetc\u002Fapparmor.d\u002Fbwrap\n","bash","",[186,270,271,299,304,309,315,320,325,330,335,340],{"__ignoreMap":268},[272,273,275,279,283,286,290,293,296],"span",{"class":274,"line":8},"line",[272,276,278],{"class":277},"sScJk","sudo",[272,280,282],{"class":281},"sZZnC"," tee",[272,284,285],{"class":281}," \u002Fetc\u002Fapparmor.d\u002Fbwrap",[272,287,289],{"class":288},"szBVR"," >",[272,291,292],{"class":281},"\u002Fdev\u002Fnull",[272,294,295],{"class":288}," \u003C\u003C",[272,297,298],{"class":281},"'PROFILE'\n",[272,300,301],{"class":274,"line":15},[272,302,303],{"class":281},"abi \u003Cabi\u002F4.0>,\n",[272,305,306],{"class":274,"line":20},[272,307,308],{"class":281},"include \u003Ctunables\u002Fglobal>\n",[272,310,311],{"class":274,"line":25},[272,312,314],{"emptyLinePlaceholder":313},true,"\n",[272,316,317],{"class":274,"line":30},[272,318,319],{"class":281},"profile bwrap \u002Fusr\u002Fbin\u002Fbwrap flags=(unconfined) {\n",[272,321,322],{"class":274,"line":35},[272,323,324],{"class":281},"  userns,\n",[272,326,327],{"class":274,"line":41},[272,328,329],{"class":281},"  include if exists \u003Clocal\u002Fbwrap>\n",[272,331,332],{"class":274,"line":52},[272,333,334],{"class":281},"}\n",[272,336,337],{"class":274,"line":60},[272,338,339],{"class":281},"PROFILE\n",[272,341,342,344,347,351],{"class":274,"line":69},[272,343,278],{"class":277},[272,345,346],{"class":281}," apparmor_parser",[272,348,350],{"class":349},"sj4cs"," -r",[272,352,353],{"class":281}," \u002Fetc\u002Fapparmor.d\u002Fbwrap\n",[161,355,356],{},"Su un server senza interfaccia grafica servono anche due passi.",[161,358,359,360,362],{},"Installa ",[186,361,202],{}," e il portachiavi:",[263,364,366],{"className":265,"code":365,"language":267,"meta":268,"style":268},"sudo apt install socat gnome-keyring libsecret-tools\n",[186,367,368],{"__ignoreMap":268},[272,369,370,372,375,378,381,384],{"class":274,"line":8},[272,371,278],{"class":277},[272,373,374],{"class":281}," apt",[272,376,377],{"class":281}," install",[272,379,380],{"class":281}," socat",[272,382,383],{"class":281}," gnome-keyring",[272,385,386],{"class":281}," libsecret-tools\n",[161,388,389,390,393],{},"Crea la raccolta «login» del portachiavi, con l'utente che farà girare l'automator. Senza, l'installazione si ferma con ",[186,391,392],{},"credential store vault non disponibile",":",[263,395,397],{"className":265,"code":396,"language":267,"meta":268,"style":268},"pkill -u \"$(id -u)\" gnome-keyring-d\nprintf '\\n' | gnome-keyring-daemon --unlock --components=secrets --daemonize\n",[186,398,399,421],{"__ignoreMap":268},[272,400,401,404,407,410,413,415,418],{"class":274,"line":8},[272,402,403],{"class":277},"pkill",[272,405,406],{"class":349}," -u",[272,408,409],{"class":281}," \"$(",[272,411,412],{"class":277},"id",[272,414,406],{"class":349},[272,416,417],{"class":281},")\"",[272,419,420],{"class":281}," gnome-keyring-d\n",[272,422,423,426,429,432,435,438,441],{"class":274,"line":15},[272,424,425],{"class":349},"printf",[272,427,428],{"class":281}," '\\n'",[272,430,431],{"class":288}," |",[272,433,434],{"class":277}," gnome-keyring-daemon",[272,436,437],{"class":349}," --unlock",[272,439,440],{"class":349}," --components=secrets",[272,442,443],{"class":349}," --daemonize\n",[174,445,447],{"id":446},"collegare-una-macchina","Collegare una macchina",[449,450,451,458],"ol",{},[182,452,453,454,457],{},"Nell'app: ",[165,455,456],{},"Automator → Collega una macchina",".",[182,459,460],{},"Copia il comando e lancialo sulla macchina.",[174,462,464],{"id":463},"chi-fa-il-lavoro","Chi fa il lavoro",[161,466,467,468,471,472,475,476,478],{},"Lo scegli per ogni macchina in ",[165,469,470],{},"Automator → la macchina → Chi fa il lavoro",": ",[165,473,474],{},"Claude"," (la scelta di partenza) o ",[165,477,218],{},". Sulla macchina quel motore deve essere installato e con l'accesso fatto.",[161,480,481,482,485,486,489],{},"Su una macchina con solo Codex, imposta anche ",[186,483,484],{},"AUTOMATOR_WORK_ENGINE=codex"," nell'ambiente del servizio: installazione e ",[186,487,488],{},"doctor"," chiederanno Codex al posto di Claude.",[161,491,492],{},"I due motori lavorano con gli stessi limiti:",[179,494,495,498,501],{},[182,496,497],{},"scrivono solo nella cartella del ticket, e nei dati Git che servono ai suoi commit;",[182,499,500],{},"usano la rete solo verso CloseYourIt, GitHub, npm e RubyGems;",[182,502,503],{},"niente push sui rami protetti, niente comandi di produzione, niente comandi distruttivi sul database.",[174,505,507],{"id":506},"chi-rilegge-il-lavoro","Chi rilegge il lavoro",[161,509,510,511,393],{},"Ogni lavoro viene riletto prima di arrivare a te. Lo scegli per ogni macchina in ",[165,512,513],{},"Automator → la macchina → Chi rilegge il lavoro",[179,515,516,522],{},[182,517,518,521],{},[165,519,520],{},"L'altro motore"," — Codex rilegge il lavoro di Claude e Claude quello di Codex. Servono tutti e due sulla macchina. È la scelta di partenza.",[182,523,524,527],{},[165,525,526],{},"Lo stesso motore"," — il motore rilegge il proprio lavoro in una sessione nuova. Basta un motore solo.",[174,529,531],{"id":530},"modelli","Modelli",[161,533,534],{},"L'automator usa un modello fisso per ogni motore, così un aggiornamento della CLI non lo cambia di nascosto. Per usarne un altro, impostalo nell'ambiente del servizio:",[536,537,538,551],"table",{},[539,540,541],"thead",{},[542,543,544,548],"tr",{},[545,546,547],"th",{},"Variabile",[545,549,550],{},"Predefinito",[552,553,554,567],"tbody",{},[542,555,556,562],{},[557,558,559],"td",{},[186,560,561],{},"AUTOMATOR_CLAUDE_MODEL",[557,563,564],{},[186,565,566],{},"claude-opus-5-5",[542,568,569,574],{},[557,570,571],{},[186,572,573],{},"AUTOMATOR_CODEX_MODEL",[557,575,576],{},[186,577,578],{},"gpt-6-astra",[174,580,582],{"id":581},"il-tuo-server-e-la-tua-produzione","Il tuo server e la tua produzione",[161,584,585,586,589],{},"Due impostazioni dell'ambiente del servizio descrivono la tua installazione all'automator. Impostale prima di ",[186,587,588],{},"automator setup"," e tienile uguali per il servizio e per i comandi lanciati a mano: fanno parte dei controlli di sicurezza, che si rifiutano di partire se cambiano a loro insaputa.",[536,591,592,601],{},[539,593,594],{},[542,595,596,598],{},[545,597,547],{},[545,599,600],{},"Cosa fa",[552,602,603,617],{},[542,604,605,610],{},[557,606,607],{},[186,608,609],{},"AUTOMATOR_SANDBOX_DOMAINS",[557,611,612,613,616],{},"Domini in più raggiungibili dalla sandbox, separati da virgola. Metti qui il tuo CloseYourIt, per esempio ",[186,614,615],{},"tracker.example.com","; GitHub, npm e RubyGems sono già ammessi.",[542,618,619,624],{},[557,620,621],{},[186,622,623],{},"AUTOMATOR_PRODUCTION_HOSTS",[557,625,626,627,630,631,630,634,637],{},"I tuoi server e indirizzi di produzione, separati da virgola. L'automator rifiuta ",[186,628,629],{},"ssh",", ",[186,632,633],{},"scp",[186,635,636],{},"rsync"," e gli indirizzi di database verso di loro.",[161,639,640],{},"Una voce scritta male ferma l'automator invece di essere saltata: un errore di battitura non lascia mai un server senza protezione.",[642,643,644],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":268,"searchDepth":15,"depth":15,"links":646},[647,650,651,652,653,654],{"id":176,"depth":15,"text":177,"children":648},[649],{"id":254,"depth":20,"text":255},{"id":446,"depth":15,"text":447},{"id":463,"depth":15,"text":464},{"id":506,"depth":15,"text":507},{"id":530,"depth":15,"text":531},{"id":581,"depth":15,"text":582},"md",{},{"title":137,"description":138},"docs\u002Fautomator","RjefPbxUA8pA3DXKpG1oWiujrfWO4IhGwDnzv8ntp98",1791302513751]