Al web, l'agent fa push a main. Al codi de consens, ni ho intenta.
La pregunta que més em fan els CTO de banca, sanitat i administració pública no és si han de deixar que els agents d'IA escriguin codi. És fins on els han de deixar arribar abans que algú de compliment pregunti qui va aprovar aquell commit.
Responc des del seient de qui construeix. Els darrers sis mesos el meu equip ha tret dos productes amb agents d'IA al circuit des de la primera targeta fins a l'últim desplegament: MintID, una cadena d'identitat recolzada en KYC on la part difícil és el consens i la criptografia, i ZadQ, una capa de responsabilitat per a pagaments entre màquines que es ven a entitats de pagament i regulades. Ho dic d'entrada perquè importa per al que ve: vaig fundar MintID i soc el propietari del grup que construeix tots dos. Si busqueu l'opinió independent, no és aquest article.
El que sí que us puc donar és el mecanisme. No tenim una política per al codi assistit per IA. En tenim una per radi de dany. Els mateixos agents, el mateix model, el mateix tauler de JIRA, i una corretja que fa tan de llarg com el que es trenca si l'agent s'equivoca.
La corretja la fixa el radi de dany, no el model
Aquests són els dos extrems, l'un al costat de l'altre.
Al web públic de MintID —HTML i CSS purs, prerenderitzat, sense backend, sense JavaScript en execució— l'agent treballa directament sobre main, i un push a main desplega a producció. Ni branques ni worktrees. La porta és mecànica: lint, tests, una comprovació d'idiomes i un script d'auditoria que fa caure la build si hi sobreviu un <script> perdut o hi falta un artefacte obligatori. Si l'agent s'equivoca, una pàgina es veu estranya els minuts que triga el push següent. Radi de dany: cosmètic.
Al protocol de MintID —Go sobre Cosmos SDK per a l'estat visible en consens, Rust per al nucli criptogràfic— el contracte compartit que cada agent carrega abans de tocar cap fitxer comença amb una regla en majúscules: cap agent, en cap circumstància, no pot executar git push contra main. Tota la feina viu en branques feat/MINT-xxx. La fusió la faig jo a mà. Radi de dany: un error de determinisme en una ruta d'execució de bloc, que en una cadena no és un bug: és una bifurcació.
Entre els dos pols hi ha tota la resta, i la regla que col·loca cada repositori a l'escala cap en una línia: com més car és desfer, més curta és la corretja. Un web estàtic es desfà amb un push. Una regla de consens es desfà amb una votació de governança i una disculpa.
Quatre agents, un humà i una màquina d'estats que imposa el tauler
El que la gent subestima és que «la IA escriu el codi» no és un rol. Al protocol n'hi corren quatre.
- Un agent CTO llegeix l'especificació i converteix una targeta en un brief d'execució. Corre sobre el model de raonament més pesant que tenim, perquè una mala especificació és l'artefacte més car de tota la cadena.
- Un agent Dev implementa exactament el brief: el canvi més petit que compleix, cobert per tests, sense reescriptures especulatives. Opus o Sonnet segons la targeta.
- Un agent QA valida els criteris d'acceptació, el determinisme i els invariants de privadesa, i emet un informe amb un de tres veredictes —
PASS,FAIL,CONDITIONAL— i, si no ésPASS, un camp d'encaminament: cap a Dev, cap al CTO o cap a mi. - Un agent PM és l'únic que parla amb un humà. Mou la targeta de JIRA, despatxa els altres i s'atura després de dos cicles de reintent fallits amb un resum complet a la meva taula.
Cada transició d'estat és una transició de targeta al tauler 166: To Do → In Progress → REVIEW → Done, i Done és l'únic estat que és meu. L'agent mai no decideix que ha acabat; ho decideix el tauler, i l'última columna del tauler porta el nom d'una persona. No és cerimònia. És la diferència entre «el model va escriure gairebé tot el codi» i «una persona amb nom respon de cada línia fusionada».
La regulació viu a la definició de fet
L'enginyeria regulada té el costum d'escriure el compliment en un document que ningú no obre. Nosaltres el vam escriure a la llista que l'agent QA no es pot saltar. Dues línies de la Definition of Done del protocol carreguen gairebé tot el pes:
- Determinisme. Cap crida de xarxa, rellotge, aleatorietat, HSM, RPC o FFI no entra en una ruta d'execució de bloc sense un punt d'auditoria explícit i marcat. Una FFI nova en Rust sobre aquesta ruta no és un comentari de revisió: és, per definició, un punt d'auditoria que bloqueja el llançament.
- Invariants de privadesa. Mai no s'escriu a l'estat de la cadena un KYC en brut, dades personals, la càrrega d'una credencial, el seu número de sèrie ni cap registre de presentació: requisits R2, R8 i R18 de l'especificació congelada, comprovats a cada targeta.
I per damunt de totes dues, la regla d'escalat: tot el que toca criptografia a la ruta de consens, o els invariants de privadesa, s'escala a mi per defecte. No són decisions autònomes. Els agents proposen; no disposen.
Una línia més del contracte que interessarà a qui treballa en entorns regulats: tota la inferència del model passa pel nostre propi compte d'AWS Bedrock, i els agents tenen prohibit introduir dependències de cap API pública de models. El codi que toca dades d'identitat el redacta un model que corre dins d'un perímetre que controlem. És la mateixa disciplina que vaig defensar a l'article sobre el perímetre: la residència és una ordre de compra; el perímetre és enginyeria.
Les línies vermelles a CI cacen la frase que hauria caçat l'advocada, una setmana abans
ZadQ ens va ensenyar una cosa que el codi de MintID no: en un producte regulat, el text també és codi.
El web comercial de ZadQ també el construeixen agents, i allà el risc no és una bifurcació: és una afirmació. Un percentatge d'estalvi. L'expressió «zero-knowledge» en una superfície v0 que encara no se l'ha guanyada. La paraula «token» on un regulador de pagaments hi llegeix un criptoactiu. Per això el vocabulari prohibit és un fitxer del repositori, versionat, que només canvia per targeta, i npm run verify fa caure la build amb qualsevol coincidència. La llista és tosca a propòsit: res de cost ni de retorn, res de vocabulari criptogràfic que el producte encara no pugui sostenir, res de «requereix un servei actiu» (el servei degrada a «desconegut» i no bloqueja res, i el text ho ha de dir en positiu) i res de proves manllevades: ni «testimoni», ni «certificat», ni «disponibilitat» mentre no n'hi hagi una de real per assenyalar.
I després hi ha la porta mateixa. El web de ZadQ duia una constant PUBLICATION_GATE que es va mantenir a closed —pàgines fora de l'índex, build que ho comprova— fins que una acreditació datada de marca la va passar a open el 20 d'agost de 2026. El mateix mecanisme que una feature flag; la funcionalitat era «tenir permís per existir en públic».
Concedeixo l'objecció evident: una llista de paraules és un revisor de compliment ben rudimentari. Ho és. També corre a cada commit, a cost marginal zero, i va caçar a CI exactament les frases que un revisor humà hauria marcat una setmana després en una trucada. L'advocada continua llegint el text final. El llegeix un cop.
El mateix disseny de MintID diu el mateix sobre la IA: evidències, mai veredictes
Hi ha una simetria agradable en tot això, i no és casual. El pla emissor de MintID accepta l'entrada de cribadors d'IA —classificadors de documents, proves de vida, tot el mercat d'eines KYC— i rebutja estructuralment qualsevol camp «grau» que el cribador afirmi. Un cribador produeix evidències, enumerades i amb procedència. L'autoritat emissora decideix, inclòs el grau de garantia, i el sistema de tipus no permet cap altra cosa.
És la mateixa postura que apliquem a la nostra enginyeria: el model produeix el diff, els tests i l'informe. El veredicte —fusionar, publicar, lliurar— és d'una persona, i les eines estan construïdes perquè no es pugui delegar per descuit. Al juny vaig escriure que el model és la matèria primera i l'arnès és el fossat. Sis mesos lliurant codi regulat amb agents han esmolat la tesi: l'arnès és també el relat de compliment.
Què n'ha sortit
Em quedo amb els números que puc defensar. La primera arrencada de xarxa completa del protocol —node de cadena més servei verificador, reproduïble des d'un paquet en minuts— va trobar zero defectes al codi del protocol; el que es va trencar era eina de desplegament, i es va arreglar sobre la marxa. L'equip encastat que va construir el nucli i els tres SDK verificadors va lliurar cada fita en data i amb zero bugs, i el client va renovar pel doble del pressupost inicial: aquella història és pública. ZadQ va passar del primer commit a un web operatiu en deu dies, i a un portal de desenvolupadors, condicions completes i blog en menys de tres setmanes, amb cadascun dels seus 51 commits duent un número de targeta.
Res d'això no és una mainnet, una auditoria ni una xifra de clients, i no ho disfressaré. És la prova que els agents poden sostenir una base de codi regulada a velocitat quan la corretja està dissenyada, no suposada.
Què faria aquest trimestre si fos el vostre CTO
- Classificar cada repositori pel cost de desfer, no per equip. Amb tres nivells n'hi ha prou: «push desplega», «branca i fusió humana», «branca, fusió humana i punt d'auditoria».
- Escriure el contracte de l'agent com el primer fitxer que carrega, no com una pàgina de Confluence. Missió, font de veritat, regles dures, el que no es fa, format de sortida obligatori. El que no és a la finestra de context no és una regla.
- Separar els rols. Un agent que especifica, un que implementa i un que revisa amb un veredicte de tres estats i un camp d'encaminament. El revisor no pot ser l'autor.
- Posar la regulació a la definició de fet com a línies comprovables: els invariants pels quals preguntarà l'auditor, redactats perquè un revisor pugui contestar sí o no.
- Fer de l'escalat el comportament per defecte a la ruta perillosa. Criptografia, consentiment, moviment de diners: l'agent proposa; una persona amb nom disposa.
- Tractar el text com a codi allà on les afirmacions estan regulades. Una llista de paraules versionada i una build que falla si hi coincideix.
- Mantenir la inferència dins del perímetre per a tot el que llegeixi dades regulades. Bedrock, un endpoint privat, el vostre propi maquinari: el que importa és que el model corri on ja viuen les dades.
Fa sis mesos la resposta honesta a «fins on deixem arribar l'agent» era «ho estem esbrinant». Ara és: exactament fins on desfer és barat, i ni un commit més enllà. Al web, l'agent fa push a main. Al codi de consens ni ho intenta, i aquesta frase, no el model que hi ha al darrere, és el que ensenyaria al vostre regulador.
Si esteu muntant un equip assistit per IA dins d'un perímetre així, expliqueu-me com és el perímetre. El disseny de la corretja és la part que convé encertar primer.


