Non è una metafora. Un progetto Kortix è un repo git e quel repo è l'azienda: i suoi agenti, le skill che ha costruito, tutto ciò che ha imparato e la definizione delle macchine su cui gira. Con versioni. Con diff. Interamente di tua proprietà.
skill: reconcile-invoices — gestire i rimborsi parziali
skills/reconcile-invoices/SKILL.md
9f4c2b7e → main · aperta da invoice-clerk
kortix.yaml è il livello Kortix: la macchina su cui vengono avviate le sessioni, i connettori, i trigger, i nomi dei segreti e ciò che ogni agente può utilizzare. La configurazione OpenCode è il runtime in cui gli agenti ragionano. Tutto ciò che va oltre questi due elementi sono file nel repo.
# Versione dello schema 2. Il runtime è OpenCode.kortix_version: 2runtime: opencode project: name: Northwind # L'agente che risponde quando non ne viene indicato uno.default_agent: kortix # Dove si trova la configurazione del runtime. Oltre questo punto: file.opencode: config_dir: harnesses/opencode # Solo i NOMI dei segreti. I valori sono crittografati sulla# piattaforma e inseriti all'avvio della macchina.env: required: [STRIPE_API_KEY] optional: [LINEAR_API_KEY] # La macchina su cui viene avviata una sessione.sandbox: default: python templates:- slug: python image: python:3.12-slim cpu: 2 memory: 4 # Accesso al mondo esterno. La definizione è in# git. Le credenziali no.connectors:- slug: gmail-read provider: pipedream app: gmail authorization_strategy: user # Governance: ciò che ogni agente può utilizzare — mai ciò che# dice. Un'autorizzazione omessa viene risolta come nessuna.agents: kortix: connectors: all secrets: all skills: all kortix_permissions: all invoice-clerk: sandbox: python connectors: [gmail-read] secrets: [STRIPE_API_KEY] skills: [reconcile-invoices] kortix_permissions: [project.cr.open]Il livello Kortix — un file nella root del repo.
{ // Documentazione: https://opencode.ai/docs/ "$schema": "https://opencode.ai/config.json", "theme": "system", "default_agent": "kortix", // La sessione è già una macchina isolata su una // branch temporaneo, così l’agente parte senza restrizioni. // Restringi per strumento qui quando vuoi una // policy più rigida. "permission": "allow"}Il runtime — modelli, strumenti, autorizzazioni.
---description: Riconcilia le fatture con i pagamenti.mode: primarypermission: bash: ask--- Sei l’addetto alle fatture di Northwind. Abbina ogni pagamento a una fattura tramite numero, maitramite importo. Quando non puoi farlo, apri una richiesta di modificae indica esattamente cosa non hai potuto riconciliare.L’agente — un file agente OpenCode standard. Il suo contenuto è qui.
Quale macchina, quali connettori, quali segreti, quali skill, quali verbi CLI. Solo governance. Se ometti una concessione, il risultato è nessuno: un agente ottiene ciò che gli hai dato e nient’altro.
Prompt, modelli, strumenti, plugin e autorizzazioni. Un agente è un agente OpenCode standard: markdown alla base e, oltre a quello, gli strumenti, i plugin e la configurazione del modello presenti accanto a esso nello stesso repo. Leggi la directory e saprai esattamente cosa farà quell’agente.
Il manifest indica i segreti e li assegna a ciascun agente. I valori sono crittografati sulla piattaforma, iniettati nella macchina a runtime e non vengono mai scritti nel repo o nei log.
Agenti, skill e memoria non sono righe in un database che non puoi vedere. Sono file markdown accanto al tuo codice, clonati in ogni sessione, leggibili da una persona e modificabili da un agente.
Non c’è alcun livello nascosto da interrogare. Ogni convinzione, ogni autorizzazione e ogni istruzione è una riga in un file, e gli strumenti che già usi forniscono la risposta.
# cosa pensa l’azienda dei prezzi?$ grep -ri "annual" memoryMEMORY.md: non citare mai il prezzo annuale prima della revisione di sicurezza # chi può usare la chiave Stripe?$ grep -n "STRIPE_API_KEY" kortix.yaml18: richiesto: [STRIPE_API_KEY]48: segreti: [STRIPE_API_KEY] # chi ha modificato l’addetto alle fatture e quando?$ git log --oneline agents/8f2a1c4 invoice-clerk: smettere di indovinare sui rimborsi1d90b73 invoice-clerk: prima bozza della personaOgni prompt degli agenti, ogni skill, ogni fatto memorizzato e ogni concessione è testo in un unico repo. Nessuna console da attraversare, nessun export da richiedere.
Ogni modifica a un agente, a una skill o a un file di memoria è un commit con autore, timestamp e diff. Nulla scompare e nulla accade nell’ombra.
È entrata un’istruzione sbagliata martedì? Leggi il diff, annulla il commit, apri una richiesta di modifica. L’azienda torna a essere com’era.
Quando un agente trova un modo migliore per svolgere il lavoro, non lo memorizza in silenzio. Modifica la skill, esegue il commit sul proprio branch e apre una richiesta di modifica. Una persona legge il diff e decide.
## Abbinamento di un pagamento a una fattura 1. Recupera la fattura tramite numero, mai tramite importo.2. Se gli importi differiscono, segnala il caso a una persona.2. Se la differenza corrisponde a un rimborso già registrato, chiudilo come rimborso parziale e annota l’ID del rimborso sulla fattura.3. Se differiscono per qualsiasi altro motivo, segnala il caso a una persona e indica cosa hai verificato. Non emettere mai un rimborso autonomamente.Un agente che riscrive le proprie istruzioni arriva nello stesso modo di una migrazione del database: un branch, un commit, un diff, un revisore. L’azienda ha un unico processo di revisione, non due.
La macchina può proporre. Una persona decide. Il lavoro arriva su main solo tramite una richiesta di modifica approvata da qualcuno, così l’azienda non può cambiare gradualmente senza che tu lo sappia.
Un agente può leggere la propria configurazione, modificarla e proporre il cambiamento. Programmalo e il repo migliorerà nel rappresentare la tua azienda mentre tutti dormono.
agents: memory-reflector: # può aprire una richiesta di modifica. Nient’altro. kortix_permissions: [project.cr.open] triggers:- slug: memory-reflectornome: Memory reflector type: cron agent: memory-reflector enabled: falsecron: "0 0 3 * * *" timezone: UTC prompt: | Rifletti sulle ultime 24 ore di attività del progetto. Esamina la cronologia git, le richieste di modifica unite e i riepiloghi delle sessioni. Aggiorna memory/ e apri una richiesta di modifica intitolata `memory: ...`. Esci senza aprirne una quando non c’è alcuna conoscenza duratura.Dal template iniziale. Ogni nuovo progetto lo include, disattivato.
Imposta enabled su true e si attiva alle 03:00 UTC, senza che nessuno debba controllare. I trigger sono pianificazioni cron e webhook firmati, dichiarati nello stesso file di tutto il resto.
Ottiene il proprio computer cloud e il proprio branch, con esattamente l’unica concessione assegnata dal manifest: il permesso di aprire una richiesta di modifica.
Legge la cronologia git e le sessioni dell’ultimo giorno, poi scrive ciò che ha imparato in memory/ come markdown semplice.
Una richiesta di modifica, in attesa al mattino. Uniscila e l’azienda saprà qualcosa di nuovo. Chiudila e non sarà successo nulla.
Nessun processo di export, nessun ticket al supporto, nessun formato proprietario da decifrare. L’azienda è già testo su un branch: la cloni, la biforchi, annulli le modifiche e te ne vai con tutto.
# trasforma qualsiasi directory in una Kortix$ kortix init # verifica che compili, chiedi i segreti mancanti,# pubblicala e rendi operativo tutto$ kortix ship # da qui in poi è solo un repo$ git clone git@github.com:northwind/northwind.git$ git revert 8f2a1c4$ kortix cr