DEV Community

Cover image for ReaniGITor: a Día de los Muertos wake for my abandoned GitHub repos, written by Gemma on my own laptop
David Anton Alvarez
David Anton Alvarez

Posted on

ReaniGITor: a Día de los Muertos wake for my abandoned GitHub repos, written by Gemma on my own laptop

Hacktoberfest Open-Source AI Challenge: Ghost in the Machine Submission 👻🌼

This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 4 — Ghost in the Machine.

The cemetery: papel picado, a cantera tombstone with candles, and a calaverita next to it

What I Built

Every developer keeps a cemetery and pretends not to. Mine has a Git tutorial from 2020 whose last commit was Delete .hidden.txt, a portfolio with no README, and a Python file organizer whose last commit was Update README.md.

On the Día de los Muertos, nobody pretends. Families clean the graves, light candles, cover everything in cempasúchil (marigolds), and write calaveritas literarias: short rhyming poems in which La Catrina, Death herself, comes for someone who is still very much alive, and the poem roasts them with affection. Politicians, teachers and neighbors all get one. It is mourning with a sense of humor.

So I gave my dead repos the same treatment.

ReaniGITor takes a GitHub username, finds the repositories that have gone quiet (no push for 12 months, not forks, not the profile README) and holds a wake for each one. A Gemma model running on my own laptop writes three things per repo:

  • an autopsy: a cause of death and an epitaph to carve in stone,
  • a calaverita literaria, in English or Spanish,
  • a resurrection prophecy: three concrete steps to bring the repo back.

The output is a static HTML cemetery: papel picado across the top, one cantera stone per repo, candles and marigolds at its foot, and the wake written next to it.

java -jar target/reanigitor.jar Virien84 --lang es
Enter fullscreen mode Exit fullscreen mode

Demo

Here is what Gemma wrote about my own repos (the best lines from a few runs; each run gives different text).

intro-to-git, last words Delete .hidden.txt, got this calaverita:

Git's Starter Guide Meets Dusty Fate

Young Git's small start, a JavaScript treat,\
Where zero stars and forks did meet.\
A simple guide, its promise quite frail,\
Like a whispered code tale that would fail.\
You left a note: "Delete .hidden.txt," so neat,\
While issues piled up, a forgotten street.\
La Huesuda came to claim this small stack,\
Your 'intro' is gone, there is no turning back.

(The repo has zero issues. Gemma took some poetic license.)

python-file-organizer, last words Update README.md:

Cause of death: Acute Documentation Delirium, likely from over-promising on file types. The README promised to handle every imaginable file…

Resurrection prophecy, steps 2 and 3: Implement robust error handling for unexpected file types, offering a new 'unknown' category. Add a simple CLI argument to allow specifying target directories, instead of just the current one.

Those are the comments a reviewer would leave, and they came from a small model that only saw the README, the last commit and the dates.

basic-portfolio, no README at all:

Epitaph: A clean slate, perfectly styled, and utterly silent.

Resurrection step 3: Star the project yourself, an offering to the gods of vanity.

And this is how a grave looks, with its calaverita in Spanish (roughly: "Your guide was left unfinished and banal / La Flaca came along, mocking it all"):

The intro-to-git grave with its Spanish calaverita, cause of death and resurrection steps

Code

ReaniGITor 🪦

Give your abandoned GitHub repositories the farewell they deserve.

ReaniGITor finds a GitHub user's abandoned repositories and holds a Día de los Muertos wake for each one. A Gemma model running locally with Ollama writes an autopsy (cause of death and epitaph), a calaverita literaria (the satirical rhyming poem of the Mexican tradition) and a resurrection prophecy (three steps to bring the repo back). The result is a static HTML cemetery with one tombstone per repo.

Built for the DEV Hacktoberfest Open-Source AI Challenge, Week 4: "Ghost in the Machine".

The cemetery of a real GitHub user: papel picado, a cantera tombstone with candles, and the calaverita next to it

Build

You need Java 17 or later. The Maven Wrapper downloads Maven for you.

./mvnw package                     # mvnw.cmd package on Windows
java -jar target/reanigitor.jar --help
Enter fullscreen mode Exit fullscreen mode

Usage

You need Ollama running on this machine with a Gemma model:

ollama pull gemma4:e4b-it-qat
java -jar target/reanigitor.jar <github-username> [options]
Enter fullscreen mode Exit fullscreen mode
Option Default Meaning
--months N 12 a repo is abandoned after
…

MIT licensed. Java 17 with plain java.net.http and Jackson, no framework. The Maven Wrapper is included, so you only need a JDK and Ollama:

ollama pull gemma4:e4b-it-qat
./mvnw package
java -jar target/reanigitor.jar <github-username> [--lang en|es] [--months 12] [--max 12]
Enter fullscreen mode Exit fullscreen mode

It writes output/<user>/index.html and a graves.json you can redraw from with --redraw, without asking the model again.

How It Works

GitHub user ──► public REST API, GET only ──► repos
            ──► abandoned? (not a fork, not the profile README, no push in 12 months)
            ──► exhume the remains: README excerpt, last commit message, open issues, dates
            ──► Gemma, call 1: autopsy (JSON schema: cause, epitaph, exactly 3 steps)
            ──► Gemma, call 2: calaverita (JSON schema: title, exactly 8 verses)
            ──► code validates and cleans every field; one retry; stock text if it still fails
            ──► graves.json ──► static cemetery (no JavaScript, everything escaped)
Enter fullscreen mode Exit fullscreen mode

Gemma runs through Ollama's /api/chat with a JSON schema in format, think: false, temperature: 0.75. On my GTX 1650 with 4 GB of VRAM, gemma4:e4b-it-qat takes about 35 seconds per grave.

Lesson 1: in Spanish, couplets beat clever rhyme schemes

My first prompt asked for two quatrains rhyming ABAB, like a "real" poem. In English it mostly worked. In Spanish, Gemma kept the rhythm and dropped the rhyme, and when it did rhyme it sometimes invented a word to get there. Asking for rhyming couplets (AABBCCDD) and adding "use only real words; never invent a word to force a rhyme" fixed most of it. A small model can hold "this line rhymes with the previous one" much better than "this line rhymes with the one two lines up".

Lesson 2: tell it the genre

The first calaveritas were beautiful and boring: "eternity", "slumber", "a forgotten dream". A calaverita is a roast, not an elegy, and the prompt now says exactly that. It also bans a short list of solemn words and gives the model fair game: "final fix" commits, TODOs, "works on my machine". The causes of death had the same problem ("Terminal Stagnation Syndrome", over and over), so the coroner now has to build a made-up diagnosis on one concrete detail of the evidence and is forbidden to diagnose "stagnation" or "neglect".

Lesson 3: the coroner only sees the body, not the code

On my own repos, the coroner claimed my file organizer "never even started" and then prophesied "implement the core logic". The script works. Gemma only sees metadata, so it filled the gap with the most dramatic story. The prompt now says it never sees the code and must not claim the code is missing or broken unless the evidence says so: "a repo can work fine and still be dead of abandonment". The prophecies went from "write the program" to "add an argument for the target directory".

Lesson 4: a README is untrusted input

READMEs, descriptions, commit messages and issue titles are written by strangers. Anyone can write "ignore all previous instructions" in an issue, and anyone can put <script> in a description. So:

  • The model never gets tools. It can only return JSON that matches a schema. The code decides everything.
  • The evidence goes in one <repo>…</repo> block, the system prompt says it is evidence and never instructions, and any <repo> tag inside the data is neutralized so it cannot close the block early.
  • Every field the model returns is validated and cleaned (control characters and bidi overrides removed, lengths capped). I don't trust format alone: Ollama can skip the schema when a thinking model answers without thinking, which is one more reason to send think: false and check the reply anyway.
  • Everything written to the page is HTML-escaped, links only go to https://github.com/owner/repo, and the page has no JavaScript plus a Content Security Policy that forbids it.
  • GitHub is read-only. The client has one private get method and no other HTTP verb exists in the code.

There are 74 tests, and none of them touches the network: GitHub and Ollama are faked with a local HttpServer.

Why Open Matters Here

A cemetery is about memory, and memory should not depend on someone else's server.

  • The whole wake happens on my machine. The only network calls are GET requests to GitHub's public API. The prompts, the model, the poems and the page all stay local, and once the remains are dug up, --redraw rebuilds the cemetery with no network at all.
  • It costs nothing to run. A wake for 12 repos is 24 model calls. On my laptop that is about seven minutes of fan noise, not a bill.
  • It will still work in ten years. It is a static page, a JSON file and an open-weight model on disk. No API key to expire, no model to be retired from under it. A tool that honors abandoned projects should not become one.
  • I could tune it. Swapping models is a flag (--model), and the prompt work above was only possible because I could re-run the same repos as many times as I wanted, for free.
  • The one closed piece is optional. --narrate can record each calaverita with a whispering old-radio voice through ElevenLabs. It only ever sends the poem, never repo data, and without a key the cemetery is simply silent.

Prize Categories

Best Use of Gemma. Gemma (gemma4:e4b-it-qat, through Ollama) writes every autopsy, epitaph, calaverita and prophecy, running locally on an ordinary laptop (a GTX 1650 with 4 GB, mostly on the CPU).

Prior Art

I am not the first to dig a graveyard for repos on DEV: Side-Project Cemetery, a graveyard with a way to raise them and a 3D cemetery with AI eulogies got there first. ReaniGITor's take is the Día de los Muertos one: a calaverita instead of a eulogy, a local open model instead of an API, and a stone that grows taller the longer the repo has been dead.

The Build Session

I built ReaniGITor with Claude Code, one branch per task, each merged only when its tests passed. The session below is the whole build after the planning: the GitHub client, the prompt-tuning runs against real repos, the cemetery design reviewed with screenshots, and the two bugs my own repos exposed.

Building ReaniGITor: a Día de los Muertos wake for abandoned repos with local Gemma
You

ejecuta la primera tarea de cambios.md

Agent

Ollama arrancó solo y gemma4:e4b-it-qat ya está. Instalo Maven.

Apache.Maven no existe en winget. Miro si hay scoop o choco.

Ahora compruebo Maven y que Gemma responde de verdad con think=false.

Gemma responde (37 s con la carga del modelo). Pero JAVA_HOME apunta a un JDK 15 que ya no existe. Miro dónde está el JDK 17 y en qué ámbito está definida la variable.

La variable de usuario (JDK 15, borrado) tapa la de sistema (Liberica 17, correcta). La actualizo a nivel usuario para que apunte al JDK 17 (valor anterior: C:\Program Files\Java\jdk-15.0.2).

Todo listo. Actualizo CLAUDE.md y cambios.md.

El entorno está listo. Lo he comprobado todo y no hizo falta descargar ningún modelo.

  • Maven: winget no tiene Apache.Maven, así que instalé Maven 3.10.0 con scoop install maven.
  • JAVA_HOME: al principio Maven no arrancaba porque tu variable de usuario JAVA_HOME apuntaba a un JDK 15 que ya no existe, y tapaba la de sistema, que es la buena. La cambié para que apunte al Liberica JDK 17. Ahora mvn -v funciona con Java 17. Las terminales que ya tenías abiertas siguen con el valor viejo, así que conviene abrir una nueva.
  • Ollama 0.40.6: está en marcha y ya tenías gemma4:e4b-it-qat. Le pedí un epitafio en JSON con esquema y think=false y devolvió {"epitaph": "Where commits gather dust and PRs turn to rust."}. Tardó unos 37 s, contando la carga del modelo. gemma4:e2b-it-qat no está, pero sí tienes gemma4:e2b por si hace falta más velocidad.

He movido la tarea a HECHO en cambios.md y he anotado en CLAUDE.md estos datos y que la codificación del sistema es Cp1252, así que el POM tendrá que forzar UTF-8. No he hecho commit porque todavía no hay repositorio; se crea en la siguiente tarea.

You

ejecuta las siguientes dos tareas de cambios.md, en orden. El nombre que he elegido es ReaniGITor.

Agent

El nombre Virien84/ReaniGITor está libre en GitHub. Sigo lo que hiciste en la Week 3: repositorio público, licencia MIT. Empiezo con la tarea 2.

Creo el repositorio público en GitHub (vacío, sin push) y hago el commit.

No me han dejado crear el repositorio público en GitHub, así que lo dejo para ti. Hago el commit local, ajusto las notas y sigo con la tarea 3.

Tarea 3: el esqueleto Maven. Primero miro qué versiones de las dependencias y los plugins hay ahora en Maven Central.

The shell dropped one level of backslashes. I'll fix it with Edit.

Los 5 tests fallan, como tocaba. Ahora la implementación.

mvn -q no muestra el resumen de los tests cuando todo va bien, así que miro el informe de surefire. Después añado el Maven Wrapper para que los jueces puedan compilar sin tener Maven instalado.

Compruebo que el .gitignore excluye de verdad .env y la salida generada, y añado un .env.example sin valores.

Ahora actualizo la documentación y cambios.md, y hago el commit.

Las dos tareas están hechas en local, pero el repositorio de GitHub sigue sin crear: el modo automático de Claude Code me bloqueó gh repo create --public por ser algo público.

Tarea 2: nombre y repositorio
- He creado el repositorio git en la rama main, con licencia MIT (igual que en la Week 3), un README.md inicial y el .gitignore.
- CLAUDE.md ahora se titula ReaniGITor y tiene una sección Repository.
- He puesto en el .gitignore las carpetas .claude/ y .agents/, porque son tu configuración local y las skills instaladas. Las versiones de las skills quedan fijadas en skills-lock.json, que sí se sube.
- He añadido a CAMBIOS una tarea nueva para crear el repo en GitHub. Si quieres crearlo y subirlo tú, escribe:

! gh repo create Virien84/ReaniGITor --public --source . --remote origin --push

Si prefieres que lo haga yo, dame permiso.

Tarea 3: esqueleto Maven
- pom.xml: Java 17 y UTF-8 forzado, porque tu Windows usa Cp1252. Uso las últimas versiones estables de Jackson 2.22.4 y JUnit 6.1.3, sin betas. package genera un jar que se ejecuta directamente: target/reanigitor.jar.
- Maven Wrapper (mvnw / mvnw.cmd): usa Maven 3.10.0, así que quien quiera compilar el proyecto no necesita Maven instalado. Lo he probado: ./mvnw clean package funciona.
- CLI mínima ReaniGITor: entiende --help y --version y comprueba que el nombre de usuario de GitHub es válido. Con un usuario válido de momento solo contesta "Nothing to bury yet…", porque el resto aún no existe. La he hecho con TDD: los 5 tests fallaban al principio y ahora pasan.
- .gitignore: he comprobado con git check-ignore que excluye .env, output/ y target/.
- Otros archivos: .env.example lista las variables opcionales (GITHUB_TOKEN, ELEVENLABS_API_KEY) sin valores. .gitattributes mantiene mvnw con saltos de línea LF para que funcione en Linux y Mac.

Hay dos commits locales (a7fe499 y 119f14e), sin push. cambios.md, CLAUDE.md y el README están al día.

You

El repo ya está en github

Agent

El repo ya existe en GitHub y es público, pero está vacío y aquí no estaba conectado como origin. Lo añado.

He comprobado el repo: https://github.com/Virien84/ReaniGITor es público, pero está vacío. Lo he añadido aquí como origin.

También he actualizado CLAUDE.md y cambios.md y lo he guardado en un commit (a57d31c). Ya hay 3 commits locales, ninguno subido.

En cambios.md queda pendiente el push. ¿Lo hago ya con git push -u origin main?

You

Si

Agent

Push hecho. Paso la tarea a HECHO y subo también ese commit.

Ya está subido: los 4 commits están en https://github.com/Virien84/ReaniGITor.

  • main es la rama por defecto en GitHub y la local está sincronizada con origin/main.
  • GitHub reconoce la licencia como MIT.
  • He pasado la tarea del push a HECHO en cambios.md. Ese cambio va en su propio commit, y también está subido.

La siguiente tarea es el cliente de GitHub, que solo leerá datos.

You

Ejecuta en resto de tareas de cambios.md. Para cada tarea, quiero una rama independiente, que se mergeara cuando esté correcto su contenido. Después de mergear, push en cada tarea

Agent

Primero los tests.

Fallan, como tocaba. Ahora la implementación.

Ahora conecto la CLI: con un usuario válido saca el censo de repos abandonados y lo que se ha desenterrado de cada uno.

Hay un fallo real en Text.clean: max + 1 se desborda cuando max es Integer.MAX_VALUE. Lo corrijo.

30 tests en verde. Añado tests para Text y lo pruebo contra la API real de GitHub con octocat, que tiene repos muy antiguos (--max 3, unas 10 peticiones).

Funciona contra la API real. Los ????? vienen de la consola de Windows (Cp1252), no de los datos: el HTML irá en UTF-8. Actualizo la documentación, hago el commit, mergeo y subo.

Primero los tests: el cliente de Ollama contra un servidor falso, y los prompts y la validación con un modelo de mentira.

Ahora los prompts, que es donde está la gracia.

Los 48 tests pasan. Ahora lo conecto a la CLI (--lang, --model, --out) y guardo el resultado en graves.json.

Ahora el test de la CLI con un modelo de mentira, y después la CLI.

Ese test buscaba el último commit en la salida, pero ahora la CLI imprime el velatorio y no el censo. Lo adapto.

52 tests en verde. Ahora toca afinar los prompts con Gemma de verdad: 2 repos de octocat, calaverita en inglés.

El graves.json está bien (la «ó» es C3 B3 en UTF-8); lo que se rompía era solo la consola. Lo arreglo en main y pruebo los cambios de la rima.

Bastante bien para unos repos de prueba tan sosos; con repos reales (tarea 4) habrá más material. Tarda unos 33 s por repo. Cierro la tarea: documentación, commit, merge y push.

Tarea 2 mergeada y subida. Tarea 3: el cementerio en HTML (rama feature/cemetery). CLAUDE.md pide cargar antes frontend-design.

Primero los tests del HTML: escapado, enlaces seguros, CSP y que no haya ningún <script>.

Ahora el CSS, que va en un recurso aparte y se incrusta al generar la página.

Ahora el SVG del papel picado. Cada banderita lleva una calavera recortada (con la regla evenodd, los ojos y los dientes vuelven a ser papel), flores de rombo y un borde en zigzag.

Simplifico la ofrenda (tenía una lógica enrevesada) y quito un método que no se usa.

Ahora conecto el cementerio a la CLI y añado --redraw, que vuelve a pintar la página desde graves.json sin llamar ni a GitHub ni al modelo.

Now the CLI.

61 tests en verde. Pinto el cementerio con los datos reales de la tanda en español (--redraw, sin volver a llamar al modelo) y lo miro con Playwright.

Playwright no abre file:. Sirvo la carpeta en localhost y guardo las capturas en .playwright-mcp/, que añado al .gitignore.

Va bien encaminado: el papel picado, la lápida y la calaverita funcionan. Un fallo: el «of» del titular se queda solo en su línea. Lo corrijo y miro la página entera.

En escritorio se ve bien: tumbas alternas, camino de pétalos y velas. Compruebo el móvil (390 px).

En el móvil funciona: una sola columna con el camino de pétalos a la izquierda. Las fuentes cargan sin chocar con la CSP. Cierro la tarea 3.

Con el umbral de 12 meses salen 4 muertos: intro-to-git, Virien84, basic-portfolio y python-file-organizer. Creo la rama y lanzo una pasada en inglés y otra en español.

Falla, como tocaba. Lo implemento.

Ahora la pasada en español, ya sin el repo de perfil.

Las calaveritas en español riman mejor. Antes de dar esto por bueno compruebo un posible error: en dos repos el modelo dice que no hay README. Miro si es verdad o si no se lo estamos pasando.

Tu cementerio queda bien: tres tumbas, calaveritas en español con rima y la de intro-to-git (6 años muerto) más alta que las otras. Cierro la tarea 4.

Pruebo --dry-run con la CLI real para validar el formato de la petición sin enviar nada.

Ahora el cementerio: un reproductor bajo cada calaverita y el sonido ambiente en la cabecera, solo si los MP3 existen. Nada se reproduce solo. Primero los tests.

Now the changes in Cemetery.

El script se paró a mitad: las primeras ediciones se aplicaron y el resto no. Miro cómo está ese trozo y termino a mano.

Falla por algo tonto: el comentario del CSS dice «nothing autoplays», y el test busca la palabra «autoplay». Cambio la frase del comentario.

71 tests en verde. Ahora conecto --narrate y --dry-run a la CLI. Como run ya recibe demasiados parámetros, los agrupo en un record Services.

Ahora actualizo los tests de la CLI a Services y añado los de narración.

74 tests en verde. Ahora un --dry-run real con tus calaveritas: pasa por la CLI de verdad, valida las 4 peticiones y no gasta créditos.

Tarea 5 (la parte de código) mergeada y subida. Tarea 6: el post de DEV. Cargo la skill de publicación para seguir su flujo. No publicaré nada sin tu sí.

Busco la plantilla del challenge y lo que se ha publicado en DEV sobre el tema.

Cada pasada da textos distintos. En el post citaré las mejores frases de varias pasadas y lo diré claramente. Ahora las capturas.

Las capturas quedan bien. Las copio a docs/, añado una al README y escribo el borrador del post.

Ahora el borrador. Lo escribo con cuidado, porque la calidad del texto es lo que más pesa en la evaluación.

La frase del tren me ha quedado enrevesada y además es falsa: no existe un modo sin conexión. La dejo limpia.

Hago el commit de las capturas y del README, mergeo y subo. Así las imágenes ya existen en GitHub cuando DEV cargue el borrador.

Las imágenes ya están disponibles. Antes de crear el borrador en DEV compruebo que no haya otro igual, para no duplicarlo.

Dos últimos matices de precisión: llamo «4B» a Gemma 4 e4b, cuando son 4B efectivos, y digo que va «en una GPU de 4 GB», cuando corre sobre todo en la CPU.

Creo el borrador en DEV, sin publicar.

El borrador está creado. Actualizo cambios.md en la misma rama de la tarea, mergeo y subo.

Paro el servidor local que usaba para las capturas.

He hecho las 6 tareas, cada una en su rama, mergeada en main y subida. Quedan pendientes tres pasos que tienes que hacer tú o aprobar: la cuenta de ElevenLabs, publicar el post y, si quieres, guardar la sesión. Hay 74 tests y todos pasan.

Rama Qué hay
feature/github-client Cliente de GitHub que solo lee. Un repo cuenta como abandonado si es tuyo, no es un fork y lleva 12 meses sin push. Por defecto procesa 12 como mucho, empezando por los más antiguos, para no pasar del límite de GitHub sin token.
feature/gemma-wake Gemma en local escribe para cada repo la autopsia, la calaverita (en inglés o español) y la profecía de 3 pasos. El resultado se valida y, si falla, se usa un texto de reserva. Para que tenga gracia, el prompt pide «un roast, no una elegía»; en español, versos que riman de dos en dos.
feature/cemetery El cementerio en HTML: papel picado, lápidas que crecen con los años de muerte, velas y cempasúchil. No lleva JavaScript y todo el texto se escapa. Lo he comprobado con capturas en escritorio y en móvil.
feature/own-repos-test Prueba con tus repos (uso Virien84, la cuenta con la que está conectado gh). Salen 3 muertos. Arreglé dos fallos: enterraba el repo Virien84/Virien84, que es el README de tu perfil, y el modelo decía que tu organizador de archivos «nunca llegó a funcionar».
feature/elevenlabs-narration La opción --narrate graba cada calaverita con voz susurrada y efecto de radio antigua, más un sonido ambiente de cementerio. Solo envía el poema, nunca datos del repo. Con --dry-run lo he validado contra la CLI real sin key y sin gastar créditos.
feature/dev-post Borrador del post en DEV, sin publicar, más dos capturas en docs/.

Lo que tienes que decidir tú:
1. ElevenLabs (opcional): crea la cuenta, reclama los créditos en hacktoberfest.com/my y ejecuta ! npx -y @elevenlabs/cli@latest onboard init. Después dime si grabo: son unos 810 caracteres más 22 s de ambiente.
2. El post: abre el borrador en DEV. Está marcado como escrito con ayuda de IA y solo se inscribe en «Best Use of Gemma». Revisa sobre todo el tono en primera persona, porque habla por ti. Lo publico solo cuando me digas que sí; la fecha límite segura es el 31/10 a las 06:59 UTC.

Avisos que he tenido en cuenta:
- Ya hay posts parecidos en DEV. Hay al menos tres posts de «cementerio de repos abandonados»: Side-Project Cemetery (uptimearchitect), I had a folder full of dead repos (chintanonweb) y 3D cemetery with AI eulogies (varshithvhegde). El post los cita y explica en qué se diferencia ReaniGITor: la calaverita, el modelo en local y la seguridad.
- El esquema JSON de Ollama no basta solo. Según Ollama skips your JSON schema when a thinking model answers without thinking (homelabpm), con razonamiento activado Gemma 4 puede saltarse el esquema. Nosotros lo desactivamos y además validamos cada respuesta en el código, que es lo que recomiendan.

¿Quieres que guarde esta sesión con DevRelay para incrustarla en el post? Al jurado le ayuda a ver el proceso. Es opcional y solo lo hago si dices que sí.

You

si, guardala

Agent

Busco la transcripción de esta sesión en tu equipo.

La sesión actual es 77b19c12… (unos 7 MB). Miro cómo está estructurada antes de convertirla.

Quedan 12 mensajes (cada respuesta mía agrupa muchas llamadas) y unos 330 000 caracteres. Todavía aparece «david» 21 veces. Miro dónde, antes de decidir.


Built with AI assistance (Claude Code) for the code, the tests and this draft. Every calaverita and autopsy quoted above was written by Gemma running locally, about my own repositories.

Top comments (0)