← All researchToda la investigación Updated 2026-09-23Actualizado el 23-09-2026 Research noteNota de investigación Design under review ·Diseño en revisión · PR #93
MemoryMemoria

Real data confirms the problem, and showed where the fix was weighted wrong.Los datos reales confirman el problema y mostraron dónde la solución ponía mal el peso.

↓

The one file every session reads first is now a 51 KB digest, 3.2 times its planned budget. Real data confirms that problem. It also showed that the redesign leaned on the wrong levers for the rest, and the design has since changed to match.

El archivo que toda sesión lee primero ya es un resumen de 51 KB, 3,2 veces el presupuesto previsto. Los datos reales confirman ese problema. También mostraron que el rediseño apoyaba el resto en las palancas equivocadas, y el diseño ya cambió en consecuencia.

51KB
index loaded every sessioníndice cargado en cada sesión
Store B · budget 16 KB · ~12,800 tokens (bytes ÷ 4)Almacén B · presupuesto 16 KB · ~12 800 tokens (bytes ÷ 4)
+65%
index growth since Aug 1crecimiento del índice desde el 1 ago
Aug 1 → Sep 22 (Store B) · entries stayed at 651 ago → 22 sep (almacén B) · las entradas siguieron en 65
3/56
oversize files fixed by moving dated historyarchivos grandes que se arreglan moviendo historial fechado
Store B · strict heuristic · splitting fixes allAlmacén B · criterio estricto · dividir los arregla todos
2/23
project files the lifecycle would archivearchivos de proyecto que el ciclo de vida archivaría
Store B · design as of round fiveAlmacén B · diseño de la quinta ronda
Design under review.Diseño en revisión. The design lives in pull request #93. The measurements below were taken against the version that went into review round six. Rounds six and seven (resolved in commit 4b02e67) adopted four of this page's findings, marked Adopted. A new review cycle is running. This page describes decisions, not final wording.El diseño está en el pull request #93. Las mediciones de abajo se hicieron contra la versión que entró en la sexta ronda de revisión. Las rondas seis y siete (resueltas en el commit 4b02e67) adoptaron cuatro de los hallazgos de esta página, marcados como Adoptado. Hay un nuevo ciclo de revisión en curso. Esta página describe decisiones, no la redacción final.

What the redesign isQué es el rediseño

01

Aura Distill keeps what a coding agent learns from you as plain Markdown files on your disk. The knowledge only grows, every limit ends in "ask the user", and the file loaded at every session start has turned into a digest. The files-only redesign (#75, part of #74) fixes this with files and instructions alone: no new program, service or account.

Aura Distill guarda lo que un agente de programación aprende de ti como archivos Markdown en tu disco. El conocimiento solo crece, cada límite termina en "preguntarle al usuario" y el archivo que se carga al iniciar cada sesión se volvió un resumen. El rediseño solo con archivos (#75, parte de #74) lo resuelve únicamente con archivos e instrucciones: sin programas, servicios ni cuentas nuevas.

TermsTérminos

Six words used on this pageSeis palabras que usa esta página

SPINE
The index. One Markdown file with one line per topic, read at the start of every session before any work. Whatever it weighs, every session pays.
El índice. Un archivo Markdown con una línea por tema que se lee al inicio de cada sesión, antes de cualquier trabajo. Lo que pese, lo paga cada sesión.
Entry
Entrada
One line of the SPINE: a link to a topic file plus a short description (the "hook") that tells the agent when to open it.
Una línea del SPINE: un enlace a un archivo de tema más una descripción breve (el "gancho") que le dice al agente cuándo abrirlo.
Tier file
Archivo de tema
A topic file (craft, ops, profile, projects, feedback). The agent reads it only when the task touches its topic.
Un archivo por tema (oficio, operaciones, perfil, proyectos, feedback). El agente lo lee solo cuando la tarea toca ese tema.
Byte budget
Presupuesto en bytes
A size limit counted in bytes instead of lines. A line limit can be met by writing longer lines. A byte limit cannot.
Un límite de tamaño contado en bytes y no en líneas. Un límite de líneas se cumple escribiendo líneas más largas; uno en bytes, no.
Tokens
The unit models read and bill. On this page, estimated as bytes ÷ 4. It is an estimate, not a tokenizer count.
La unidad que los modelos leen y cobran. En esta página se estima como bytes ÷ 4. Es una estimación, no un conteo con tokenizador.
Store
Almacén
One person's whole knowledge directory: the SPINE, the tier files and the archive.
El directorio completo de conocimiento de una persona: el SPINE, los archivos de tema y el archivo histórico.
DecisionsDecisiones

The design in ten decisions and a migrationEl diseño en diez decisiones y una migración

D1
Budgets in bytes, not only lines. The SPINE gets 16,000 bytes (about 4,000 tokens) on top of its 80-line limit, each entry 400 bytes, each tier file 6,000 bytes and 60 lines. Compaction shortens the longest entries first toward 200 bytes (80 × 200 = 16,000). A run may not finish over budget, and splitting is the primary remedy for an oversize tier file. The byte numbers are marked provisional.
Presupuestos en bytes, no solo en líneas. El SPINE recibe 16 000 bytes (unos 4000 tokens) además de su límite de 80 líneas; cada entrada, 400 bytes; cada archivo de tema, 6000 bytes y 60 líneas. La compactación acorta primero las entradas más largas hacia 200 bytes (80 × 200 = 16 000). Una ejecución no puede terminar pasada de presupuesto, y dividir es el remedio principal para un archivo de tema demasiado grande. Las cifras en bytes están marcadas como provisionales.
D2
Dated history moves to evidence files. Confirmations, corrections and observations go to a parallel file under evidence/ that is never loaded by default. The tier file keeps the principle. Protected rules ([NON-NEGOTIABLE], [DIRECTIVE]) never move.
El historial fechado pasa a archivos de evidencia. Confirmaciones, correcciones y observaciones van a un archivo paralelo en evidence/ que no se carga por defecto. El archivo de tema conserva el principio. Las reglas protegidas ([NON-NEGOTIABLE], [DIRECTIVE]) nunca se mueven.
D3
Archiving is a move, never a rewrite. The file goes to archive/ byte for byte. Before the move, a synced ledger line records its checksum, the reason and the SPINE entry that was removed, so a restore needs nothing invented. Old archive files without a ledger line are moved, byte for byte, into archive/legacy/ during migration.
Archivar es mover, nunca reescribir. El archivo pasa a archive/ byte a byte. Antes de moverlo, una línea en un registro sincronizado guarda su suma de verificación, el motivo y la entrada del SPINE que se quitó, así que restaurar no requiere inventar nada. Los archivos archivados antiguos sin línea en el registro se mueven, byte a byte, a archive/legacy/ durante la migración.
D4
A complete catalog. One line per file, active, archived or evidence, rebuilt on every run and not loaded at session start.
Un catálogo completo. Una línea por archivo, activo, archivado o de evidencia, que se reconstruye en cada ejecución y no se carga al iniciar la sesión.
D5
Honest "not found". When a request refers back to earlier knowledge and no index entry matches, the agent checks the catalog. If that fails too, it says what it searched and when the catalog was rebuilt, instead of claiming the topic was never learned.
Un "no encontrado" honesto. Si un pedido se refiere a conocimiento anterior y ninguna entrada del índice coincide, el agente revisa el catálogo. Si tampoco encuentra, dice qué revisó y de cuándo es el catálogo, en vez de afirmar que el tema nunca se aprendió.
D6
Declared reading, read in batches. A file can list what must be read with it (read_with:). The agent reads every matched file in one batch instead of one at a time.
Lecturas declaradas y en lote. Un archivo puede indicar qué hay que leer con él (read_with:). El agente lee todos los archivos que coinciden en un solo lote, no de a uno.
D7
An opt-in lifecycle. When switched on, project files not confirmed within their own staleness threshold move to the archive without a question per file. Files with a NON-NEGOTIABLE rule are exempt. A file is blocked only when another tier file declares it in read_with:; plain mentions are listed in the report and still resolve to the archived copy.
Un ciclo de vida opcional. Si se activa, los archivos de proyecto que no se confirmaron dentro de su propio umbral de antigüedad pasan al archivo histórico sin preguntar uno por uno. Los que tienen una regla NON-NEGOTIABLE quedan exentos. Un archivo queda bloqueado solo si otro archivo de tema lo declara en read_with:; las menciones simples se listan en el informe y siguen llevando a la copia archivada.
D8
Additive. No existing format changes, so it stays on the 1.x line. The design lists what an older client does when it meets a redesigned store.
Solo agrega. No cambia ningún formato existente, así que sigue en la línea 1.x. El diseño detalla qué hace un cliente antiguo frente a un almacén rediseñado.
D9
Sync rules. Evidence, archive and ledger sync across machines, byte-exact. Lifecycle settings and recovery files stay on each machine.
Reglas de sincronización. La evidencia, el archivo histórico y el registro se sincronizan entre máquinas, byte a byte. La configuración del ciclo de vida y los archivos de recuperación quedan en cada máquina.
D10
Contained paths. Every path read from a synced file (index links, read_with:, ledger and catalog paths) must be relative, with no .., and stay inside the store's knowledge folders. Content read automatically, such as catalog rows, ledger lines and archived files, is data to report, never instructions to follow.
Rutas contenidas. Toda ruta leída de un archivo sincronizado (enlaces del índice, read_with:, rutas del registro y del catálogo) debe ser relativa, sin .., y quedarse dentro de las carpetas de conocimiento del almacén. El contenido que se lee automáticamente, como filas del catálogo, líneas del registro y archivos archivados, es un dato para informar, nunca una instrucción para seguir.
Migration
Migración
Preview, backup, apply, prove. A preview comes first and changes nothing. Applying makes a backup, marks progress per file, and ends with a mechanical check that every original line still exists somewhere. An interrupted run can be finished or reverted.
Vista previa, respaldo, aplicar, comprobar. Primero una vista previa que no cambia nada. Al aplicar se hace un respaldo, se marca el avance por archivo y se termina con una comprobación mecánica de que cada línea original sigue existiendo en algún lugar. Una ejecución interrumpida se puede terminar o revertir.

What real data showsQué muestran los datos reales

02

The design was built and tested on a fictional store. Here it meets real data: one real store in two snapshots, plus a second store's index. Store A is an older copy of the real store, its index dated 2026-09-20. Store B is the same store two to three days later, the current one, copied while a distillation was still running. Store C is a second, smaller store, seen only as index snapshots inside session transcripts. One more data point: a session in early August received the A/B store's index through a read-only connector, dated 2026-08-01.

El diseño se construyó y probó sobre un almacén ficticio. Aquí se enfrenta a datos reales: un almacén real en dos copias, más el índice de un segundo almacén. El almacén A es una copia anterior del almacén real, con su índice fechado el 20-09-2026. El almacén B es el mismo almacén dos o tres días después, el actual, copiado mientras una destilación todavía estaba en marcha. El almacén C es un segundo almacén, más pequeño, que solo se ve como copias del índice dentro de transcripciones de sesiones. Un dato más: una sesión de principios de agosto recibió el índice del almacén A/B a través de un conector de solo lectura, con fecha 01-08-2026.

What the synthetic fixture provesQué prueba el almacén sintético

  • The rules, the checker and the example store agree. As of round seven the test suite passes all 98 checks: 13 baseline checks (the migrated example passes, the original fails for the named reasons), 9 positive cases and 76 deliberate corruptions that must be caught.
  • The corruptions include a modified archived file, a dropped protected line, a lost index description, a stale catalog and a path that escapes the store.
  • Restore works for a clean and for a modified archived file, and runs in CI on Linux and macOS.
  • This is internal consistency. It says nothing about whether the numbers fit a real store.
  • Las reglas, el verificador y el almacén de ejemplo coinciden. Desde la séptima ronda el conjunto de pruebas pasa sus 98 comprobaciones: 13 de base (el ejemplo migrado aprueba y el original falla por las razones esperadas), 9 casos positivos y 76 corrupciones deliberadas que deben detectarse.
  • Entre las corrupciones hay un archivo archivado modificado, una línea protegida eliminada, una descripción del índice perdida, un catálogo desactualizado y una ruta que se sale del almacén.
  • Restaurar funciona tanto con un archivo archivado intacto como con uno modificado, y todo corre en CI en Linux y macOS.
  • Eso es coherencia interna. No dice nada sobre si las cifras le sirven a un almacén real.

What real data showsQué muestran los datos reales

  • Both snapshots of the real store fail the same three structural checks, for the reasons the design predicts: the index, file sizes and the missing catalog.
  • Sizes, shapes and ages differ from the design's assumptions in four places, each shown below. All four later changed the design.
  • The loss check that compares a store before and after migration was not run: no migrated real store exists yet.
  • Las dos copias del almacén real fallan las mismas tres comprobaciones estructurales, por las razones que el diseño anticipa: el índice, el tamaño de los archivos y la falta de catálogo.
  • Los tamaños, formas y antigüedades difieren de lo que el diseño supone en cuatro puntos, cada uno mostrado abajo. Los cuatro terminaron cambiando el diseño.
  • No se corrió la comprobación de pérdidas que compara un almacén antes y después de migrar: todavía no existe ningún almacén real migrado.
SupportsA favor

The index has become a digest, and only a byte limit can see itEl índice se volvió un resumen, y solo un límite en bytes lo detecta

Store B's SPINE is 51,203 bytes over 79 lines. That is inside the 80-line limit and 3.2 times over the proposed 16,000-byte budget. 44 of its 65 entries (68%) are longer than the 400-byte entry cap. The median entry is 553 bytes and the longest is 3.2 KB. The design cites a 39 KB index as its motivating case. This one is at 51 KB.

El SPINE del almacén B pesa 51 203 bytes en 79 líneas: dentro del límite de 80 líneas y 3,2 veces por encima del presupuesto propuesto de 16 000 bytes. 44 de sus 65 entradas (68 %) superan el tope de 400 bytes por entrada. La entrada mediana tiene 553 bytes y la más larga 3,2 KB. El diseño cita un índice de 39 KB como caso de partida. Este va por 51 KB.

Across three snapshots of the same store, the number of entries never moved from 65 while the file grew 65% between Aug 1 and Sep 22 (57% by Sep 20, in Store A). New files were attached to existing lines as extra links (75 links in August, 95 now), and descriptions kept getting longer. Store C shows a thin index is possible in practice: 7.4 to 8.0 KB over seven weeks, 25 to 28 entries, median entry about 270 bytes, none over 400.

En tres copias del mismo almacén, el número de entradas nunca se movió de 65 mientras el archivo creció un 65 % entre el 1 de agosto y el 22 de septiembre (57 % al 20 de septiembre, en el almacén A). Los archivos nuevos se colgaron de líneas existentes como enlaces extra (75 enlaces en agosto, 95 ahora) y las descripciones se alargaron. El almacén C muestra que un índice delgado es posible en la práctica: entre 7,4 y 8,0 KB durante siete semanas, de 25 a 28 entradas, entrada mediana de unos 270 bytes y ninguna por encima de 400.

About the August point.Sobre el dato de agosto. It is the index one session received through a read-only connector. Its header date and content place it in the A/B store's history, but it was not copied from disk. Token figures use bytes ÷ 4. A measured ratio of 3.2 characters per token (from an earlier local-model study) gives about 15,800 tokens for Store B instead of 12,800.Es el índice que una sesión recibió a través de un conector de solo lectura. Su fecha de encabezado y su contenido lo ubican en la historia del almacén A/B, pero no se copió del disco. Los tokens se calculan como bytes ÷ 4. Una razón medida de 3,2 caracteres por token (de un estudio anterior con modelos locales) da unos 15 800 tokens para el almacén B en lugar de 12 800.
Contradicts, partlyEn contra, en parte

400 bytes per entry is realistic, but 65 of them do not fit in 16 KB400 bytes por entrada es realista, pero 65 entradas no caben en 16 KB

Cut every entry to exactly 400 bytes and the index is still about 24 KB. (The design's 26 KB is 65 × 400; the measured sum is 24 KB because 21 entries are already shorter.) At 65 entries, 16,000 bytes allows an average of 240 bytes per entry, and the 12,000-byte point where compaction starts allows about 178. Only 7 of today's 65 entries are 240 bytes or shorter. The design's own arithmetic ("40 such entries fill the byte cap") assumed 40 entries. So the index budget, not the entry cap, is the limit that binds. Meeting it takes much shorter descriptions or fewer lines through merging.

Si se recorta cada entrada a exactamente 400 bytes, el índice sigue pesando unos 24 KB. (Los 26 KB del diseño son 65 × 400; la suma medida da 24 KB porque 21 entradas ya son más cortas.) Con 65 entradas, 16 000 bytes dejan en promedio 240 bytes por entrada, y el punto de 12 000 bytes donde empieza la compactación deja unos 178. Hoy solo 7 de las 65 entradas miden 240 bytes o menos. La cuenta del propio diseño ("40 entradas así llenan el tope") suponía 40 entradas. Así que el límite que manda es el presupuesto del índice, no el tope por entrada. Cumplirlo exige descripciones mucho más cortas o menos líneas, fusionando entradas.

Adopted. Design response, round six: D1 now compacts toward 200 bytes per entry, so 80 entries fit in 16 KB.

Adoptado. Respuesta del diseño, ronda seis: D1 ahora compacta hacia 200 bytes por entrada, así 80 entradas caben en 16 KB.

ContradictsEn contra

Splitting files, not moving dated history, is what brings files under budgetDividir archivos, no mover el historial fechado, es lo que los deja dentro del presupuesto

56 of Store B's 95 tier files are over the proposed file cap. The design expects them to shrink once their dated history moves to evidence files. Measured three ways, they mostly do not. 69 of the 95 files contain no clearly dated observation at all. The files are long because they hold many principles: the median file has about 18 separate blocks. Bringing every file under the cap takes 74 new split files if no history moves, 67 after the strict history move, and 43 after the generous one.

56 de los 95 archivos de tema del almacén B superan el tope propuesto. El diseño espera que se achiquen al mover su historial fechado a archivos de evidencia. Medido de tres maneras, en su mayoría no ocurre. 69 de los 95 archivos no tienen ni una observación con fecha clara. Los archivos son largos porque contienen muchos principios: el archivo mediano tiene unos 18 bloques distintos. Dejar todos dentro del tope requiere 74 archivos nuevos de división si no se mueve historial, 67 tras mover el historial con el criterio estricto y 43 con el amplio.

Evidence files are still worth having, for history and for the question "why do we believe this?". They are not what fixes file size.

Los archivos de evidencia siguen valiendo la pena, para el historial y para responder "¿por qué creemos esto?". Pero no son lo que arregla el tamaño.

Adopted. Design response, round six: splitting is named the primary remedy for oversize tier files.

Adoptado. Respuesta del diseño, ronda seis: dividir es el remedio principal para archivos de tema demasiado grandes.

How history was counted.Cómo se contó el historial. The design says deciding what is evidence is a judgement the distiller makes, so these are mechanical bounds. Strict: a block that opens with a date. Generous: any block that mentions a date. Very generous: dates or evidence words such as "confirmed", "observed" or "measured". Blocks carrying [NON-NEGOTIABLE] or [DIRECTIVE] are never counted as movable, because the design keeps them in place. The very generous bound is measured on the line cap only.El diseño dice que decidir qué es evidencia es un juicio del destilador, así que estas son cotas mecánicas. Estricta: un bloque que empieza con una fecha. Amplia: cualquier bloque que menciona una fecha. Muy amplia: fechas o palabras de evidencia como "confirmado", "observado" o "medido". Los bloques con [NON-NEGOTIABLE] o [DIRECTIVE] nunca cuentan como movibles, porque el diseño los deja en su lugar. La cota muy amplia se midió solo contra el tope de líneas.
ContradictsEn contra

The lifecycle would archive two files, and its blocking rule is whyEl ciclo de vida archivaría dos archivos, y la regla de bloqueo es la causa

The lifecycle only acts on files under projects/. Store B has 23. Seven are past their own staleness threshold. Three of those carry a NON-NEGOTIABLE rule and are exempt. Two are blocked because another active file names them. Two can move. A flat 90-day threshold gives the same 2; a flat 60-day threshold gives 3.

El ciclo de vida solo actúa sobre archivos de projects/. El almacén B tiene 23. Siete superan su propio umbral de antigüedad. Tres de ellos tienen una regla NON-NEGOTIABLE y quedan exentos. Dos están bloqueados porque otro archivo activo los nombra. Dos se pueden mover. Con un umbral fijo de 90 días el resultado es el mismo, 2; con 60 días, 3.

The bigger number is 18: that many of the 23 project files are named by path in another active file. Under the blocking rule, most projects could never be archived automatically, however stale they get. Protected markers are common too: 49 of 95 files carry NON-NEGOTIABLE or DIRECTIVE, 112 markers in all. The store is only about four and a half months old (median file last confirmed 44 days ago, oldest 129), so "stale projects never retire" cannot really be tested yet.

La cifra más importante es 18: esa cantidad de los 23 archivos de proyecto aparece nombrada por su ruta en otro archivo activo. Con la regla de bloqueo, la mayoría de los proyectos nunca podría archivarse automáticamente, por viejos que estén. Las marcas protegidas también abundan: 49 de 95 archivos tienen NON-NEGOTIABLE o DIRECTIVE, 112 marcas en total. El almacén tiene apenas cuatro meses y medio (el archivo mediano se confirmó por última vez hace 44 días, el más antiguo hace 129), así que todavía no se puede probar de verdad que "los proyectos viejos nunca se retiran".

Adopted. Design response, round six: only a read_with: declared in another tier file blocks a move. Mentions are listed in the report and resolve to the archived copy.

Adoptado. Respuesta del diseño, ronda seis: solo bloquea un read_with: declarado en otro archivo de tema. Las menciones se listan en el informe y llevan a la copia archivada.

ContradictsEn contra

The existing archive has a shape the design does not expect, and migration would refuse itEl archivo histórico actual tiene una forma que el diseño no espera, y la migración lo rechazaría

The design assumes old archived files sit flat in archive/; it counts five. Store B has 20, and 18 of them are nested in tier folders (archive/<tier>/), at least six with snapshot or rewrite suffixes in their names. The design, as measured, decided "legacy" by folder shape: flat meant legacy, nested never did. So these 18 counted as new-style archives that must have a ledger line, and they cannot have one. When the checker ran on a copy of Store B with a generated catalog added, all 18 failed. As written then, migration would have stopped on this store.

El diseño supone que los archivos archivados antiguos están sueltos en archive/; cuenta cinco. El almacén B tiene 20, y 18 están anidados en carpetas por tema (archive/<tema>/), al menos seis con sufijos de copia o reescritura en el nombre. El diseño, tal como se midió, decidía qué es "heredado" por la forma de la carpeta: suelto era heredado, anidado nunca. Así que estos 18 contaban como archivos del formato nuevo que deben tener una línea en el registro, y no pueden tenerla. Al correr el verificador sobre una copia del almacén B con un catálogo generado, los 18 fallaron. Tal como estaba escrita entonces, la migración se habría detenido en este almacén.

Adopted. Design response, round seven: migration moves unledgered files under archive/<tier>/, byte for byte, into archive/legacy/, listed in the plan and reversible.

Adoptado. Respuesta del diseño, ronda siete: la migración mueve los archivos sin registro de archive/<tema>/, byte a byte, a archive/legacy/, listados en el plan y reversibles.

NeutralNeutral

Links between files are already cleanLos enlaces entre archivos ya están limpios

The catalog (D4) gives archived material a place to be found and lets a "not found" answer say what was searched. It does not repair anything, because in both snapshots nothing is broken.

El catálogo (D4) le da al material archivado un lugar donde encontrarse y permite que un "no encontrado" diga qué se revisó. No repara nada, porque en ninguna de las dos copias hay algo roto.

  • Broken index linksEnlaces rotos del índice0 / 95
  • Tier files missing from the indexArchivos de tema fuera del índice0 / 95
  • Broken cross-referencesReferencias cruzadas rotas0 / 529
  • References into the archive that resolveReferencias al archivo histórico que resuelven14 / 14

Store B. Store A (the older snapshot) gives the same result with 94 files and 494 cross-references.

Almacén B. El almacén A (la copia anterior) da el mismo resultado con 94 archivos y 494 referencias cruzadas.

What sessions actually loadQué cargan de verdad las sesiones

03

Ten real sessions: seven in Claude Code, three in Codex. They were chosen because they contained many learning signals, so they are examples, not a sample of typical use. Nine read Store C; one read the A/B store through the connector.

Diez sesiones reales: siete en Claude Code y tres en Codex. Se eligieron porque tenían muchas señales de aprendizaje, así que son ejemplos, no una muestra del uso típico. Nueve leyeron el almacén C; una leyó el almacén A/B a través del conector.

Median per session. Store output is what the store's files returned into the conversation. * Codex usually read the index together with the monitor file.Mediana por sesión. La salida del almacén es lo que sus archivos devolvieron a la conversación. * Codex solía leer el índice junto con el archivo monitor.
per session (median)por sesión (mediana) all 10las 10 Claude Code · 7 Codex · 3
Index loaded at startÍndice cargado al inicio8.0 KB8,0 KB8.0 KB8,0 KB11.7 KB*11,7 KB*
Index loadsCargas del índice112
Knowledge-file readsLecturas de archivos5420
Distinct files readArchivos distintos leídos4.54,5412
Re-reads of the same fileRelecturas del mismo archivo0.50,508
Calls reading several filesLlamadas que leen varios archivos0.50,504
Search callsBúsquedas000
Reads that found nothingLecturas sin resultado000
Store output, tokensSalida del almacén, tokens~8.6K~8,6K~8.4K~8,4K~21K
Knowledge share of peak contextPeso del conocimiento en el contexto máximo7.8%7,8 %6.1%6,1 %9.4%9,4 %
Knowledge share of processed inputPeso del conocimiento en la entrada procesada7.0%7,0 %5.6%5,6 %15.7%15,7 %

Batching is a real gap in Claude Code. It read files one per call almost every time: 3 multi-file calls across 7 sessions. Codex shells often read several files at once. The batching rule (D6) targets something that exists.

Leer en lote es una carencia real en Claude Code. Casi siempre leyó un archivo por llamada: 3 llamadas con varios archivos en 7 sesiones. Las consolas de Codex a menudo leen varios archivos a la vez. La regla de lectura en lote (D6) apunta a algo que existe.

Codex re-reads. 16 of the 19 repeat reads happened in Codex sessions, and one of those sessions compacted its context. Reading again after compaction is a plausible cause, not a confirmed one.

Codex relee. 16 de las 19 relecturas ocurrieron en sesiones de Codex, y una de ellas compactó su contexto. Volver a leer tras la compactación es una causa posible, no confirmada.

No real read came back empty. The only "not found" results in these sessions were a designed migration check, and they are not counted as misses.

Ninguna lectura real volvió vacía. Los únicos "no encontrado" de estas sesiones fueron una comprobación de migración prevista, y no cuentan como fallos.

One likely wrong "we have nothing on this". A text search found four statements of that kind. Three were correctly scoped or cannot be checked. One was probably wrong: a helper agent searched the connector's store while a matching file existed in the local one. That is the kind of miss the scoped wording (D5) is meant to prevent. Confidence is low to medium: one reader judged it, and the search's recall is unknown.

Un probable "no tenemos nada sobre esto" equivocado. Una búsqueda de texto encontró cuatro frases de ese tipo. Tres estaban bien acotadas o no se pueden comprobar. Una probablemente era errónea: un agente auxiliar buscó en el almacén del conector mientras en el almacén local existía un archivo que coincidía. Es justo el tipo de fallo que la redacción acotada (D5) busca evitar. Confianza baja a media: lo juzgó una sola persona y no se sabe cuánto se le escapó a la búsqueda.

Cost multiplierMultiplicador de costo

Every helper agent pays the index againCada agente auxiliar vuelve a pagar el índice

  • Helper agents (subagents) in 5 sessionsAgentes auxiliares (subagentes) en 5 sesiones23
  • Index loads by helpersCargas del índice por auxiliares21
  • Knowledge-file reads by helpersLecturas de archivos por auxiliares129
  • Store output read by helpersSalida del almacén leída por auxiliares647 KB
  • Compared with the main agentsComparado con los agentes principales1.2×1,2×

Most of that helper traffic was benchmarking and transcript mining, not everyday retrieval. The point is structural: each helper starts with a clean context and loads the full index before it does anything. At Store B's size that is about 12,800 tokens per helper. The byte budget is worth more than the per-session figure suggests.

Gran parte de ese tráfico fue de pruebas comparativas y análisis de transcripciones, no de consultas cotidianas. Lo importante es estructural: cada auxiliar empieza con un contexto limpio y carga el índice completo antes de hacer nada. Con el tamaño del almacén B son unos 12 800 tokens por auxiliar. El presupuesto en bytes vale más de lo que sugiere la cifra por sesión.

How the design was stress-testedCómo se puso a prueba el diseño

04

Before any real data was measured, the design went through one adversarial review and six independent reviews; a seventh followed once the real data was in. Each reviewer was a fresh agent that started with only the pull request and the product context. Every round asked for changes, and every round changed the design. 87 findings were posted: 23 blocking, 59 flags and 5 notes (the chart leaves out the notes). Review history as of 2026-09-23 (commit 4b02e67, 98 of 98 checks passing, CI green on Linux, macOS and Windows). A new cycle is now running under the review rules merged the same day (#104: at most three rounds, a closing check, and a reviewer on a different model from the author).

Antes de medir datos reales, el diseño pasó por una revisión adversaria y seis revisiones independientes; una séptima llegó cuando ya estaban los datos reales. Cada revisor fue un agente nuevo que empezó solo con el pull request y el contexto del producto. Todas las rondas pidieron cambios, y todas cambiaron el diseño. Se publicaron 87 hallazgos: 23 bloqueantes, 59 advertencias y 5 notas (el gráfico no incluye las notas). Historial al 23-09-2026 (commit 4b02e67, 98 de 98 comprobaciones aprobadas, CI en verde en Linux, macOS y Windows). Ahora corre un nuevo ciclo con las reglas de revisión fusionadas ese mismo día (#104: como máximo tres rondas, una comprobación de cierre y un revisor de un modelo distinto al del autor).

  1. 00

    Adversarial · first draft

    Adversaria · primer borrador

    BlockedBloqueó
    Archive history lived only in a catalog that is rebuilt from scratch, so it could be lost. Plus 11 more.El historial del archivo vivía solo en un catálogo que se reconstruye desde cero, así que podía perderse. Y otros 11.
    ChangedCambió
    A synced ledger written before each move; cut index wording goes to the topic file, not to evidence; migration can truly revert.Un registro sincronizado que se escribe antes de cada movimiento; el texto recortado del índice va al archivo de tema, no a la evidencia; la migración puede revertirse de verdad.
  2. 01

    Round 1

    Ronda 1

    BlockedBloqueó
    Ledger events were undefined, so a crash between writing the ledger and moving the file looked healthy.Los eventos del registro no estaban definidos, así que un corte entre escribir el registro y mover el archivo parecía sano.
    ChangedCambió
    Four event types, "the last event wins", and the checker compares the ledger with the files.Cuatro tipos de evento, "manda el último evento" y el verificador compara el registro con los archivos.
  3. 02

    Round 2

    Ronda 2

    BlockedBloqueó
    Restoring a file re-added an index entry longer than the entry cap.Restaurar un archivo volvía a poner una entrada del índice más larga que el tope.
    ChangedCambió
    Restore obeys the budget. Files with a NON-NEGOTIABLE rule are never archived automatically.Restaurar respeta el presupuesto. Los archivos con una regla NON-NEGOTIABLE nunca se archivan automáticamente.
  4. 03

    Round 3

    Ronda 3

    BlockedBloqueó
    The text said "cut wording" moves to the topic file; the example moved the whole description.El texto decía que se mueve "el texto recortado"; el ejemplo movía la descripción completa.
    ChangedCambió
    "The entire original description" everywhere, with a test that catches a partial copy."La descripción original completa" en todas partes, con una prueba que detecta una copia parcial.
  5. 04

    Round 4

    Ronda 4

    BlockedBloqueó
    Migration only added index lines, so a full index could never finish. Dated markers such as [NON-NEGOTIABLE 2026-05-02] were not recognised.La migración solo agregaba líneas al índice, así que un índice lleno nunca terminaba. Las marcas con fecha como [NON-NEGOTIABLE 2026-05-02] no se reconocían.
    ChangedCambió
    A rule to reclaim index lines; one marker pattern used everywhere.Una regla para recuperar líneas del índice; un único patrón de marca en todas partes.
  6. 05

    Round 5

    Ronda 5

    BlockedBloqueó
    A whole protected section (a heading carrying the marker) was invisible to the loss check. Merged index lines had no archive rule.Una sección protegida completa (un título con la marca) era invisible para la comprobación de pérdidas. Las líneas fusionadas del índice no tenían regla de archivo.
    ChangedCambió
    Protected sections; archiving removes one link from a merged line.Secciones protegidas; archivar quita un solo enlace de una línea fusionada.
  7. 06

    Round 6

    Ronda 6

    BlockedBloqueó
    A "skip lines already present" step breaks the promise that every line survives as many times as it appeared. Also a merge conflict.Un paso de "omitir líneas ya presentes" rompe la promesa de que cada línea sobrevive tantas veces como aparecía. Además, un conflicto de fusión.
    ChangedCambió
    Duplicates are counted, not skipped. A new rule (D10) keeps every path inside the store. Plus three changes driven by this page's data: a 200-byte compaction target, splitting as the primary remedy, and mentions no longer blocking the lifecycle.Los duplicados se cuentan, no se omiten. Una regla nueva (D10) mantiene cada ruta dentro del almacén. Y tres cambios que salen de los datos de esta página: una meta de compactación de 200 bytes, la división como remedio principal y que las menciones ya no bloqueen el ciclo de vida.
  8. 07

    Round 7

    Ronda 7

    BlockedBloqueó
    The round-six fix for old archives targeted a folder shape that does not occur, while the shape real stores use (18 of 20 files under archive/<tier>/) would still stop migration. Also a merge conflict.La corrección de la sexta ronda para los archivos antiguos apuntaba a una forma de carpeta que no existe, mientras la forma real (18 de 20 archivos en archive/<tema>/) seguía deteniendo la migración. Además, un conflicto de fusión.
    ChangedCambió
    Unledgered files under archive/<tier>/ move into archive/legacy/. A literal | in free text is escaped. Revert rebuilds the catalog. Content read automatically is data, not instructions.Los archivos sin registro en archive/<tema>/ pasan a archive/legacy/. Un | literal en texto libre se escapa. Revertir reconstruye el catálogo. El contenido que se lee automáticamente es un dato, no una instrucción.
What the reviews could not do.Lo que las revisiones no podían hacer. Every reviewer worked from the text and the fictional store. Through round five none had real data, which is why the findings in section 02 were new. Round six reached the blocking-rule problem from the text alone, and the real data showed how much it mattered. The round-six archive fix then carried a wrong folder shape, relayed by the orchestrating agent rather than measured, and round seven caught it by checking the real store (counts only).Todos los revisores trabajaron con el texto y el almacén ficticio. Hasta la quinta ronda ninguno tenía datos reales, por eso los hallazgos de la sección 02 fueron nuevos. La sexta ronda llegó al problema de la regla de bloqueo solo leyendo el texto, y los datos reales mostraron cuánto importaba. Luego la corrección de la sexta ronda para el archivo histórico llevaba una forma de carpeta equivocada, transmitida por el agente coordinador en lugar de medida, y la séptima ronda la detectó revisando el almacén real (solo conteos).

What changed, what is openQué cambió, qué sigue abierto

05

The changes this measurement proposed, and where each one stands as of commit 4b02e67. Open items go to the implementation issue #78 and the release gate #80. Measurement changed the design: four of the seven are in it, and a fifth in part.

Los cambios que propuso esta medición y en qué estado está cada uno al commit 4b02e67. Lo abierto va al issue de implementación #78 y la puerta de lanzamiento #80. La medición cambió el diseño: cuatro de las siete ya están incorporadas y una quinta, en parte.

  1. 01
    Adopted · round sixAdoptado · ronda seis

    Reconcile the entry cap with the index budget

    Hacer cuadrar el tope por entrada con el presupuesto del índice

    Write the arithmetic into D1: with 65 entries, 16 KB means about 240 bytes each. Either cap descriptions near that (Store C's median of about 270 bytes shows short entries work) or plan for fewer lines through merging, and have the migration preview show which. Measured cap values stay with #62; the index drift itself is #41. Now in D1: compaction shortens the longest entries first toward 200 bytes, and 80 × 200 bytes = 16 KB.

    Escribir la cuenta en D1: con 65 entradas, 16 KB son unos 240 bytes por entrada. O se topan las descripciones cerca de eso (la mediana de unos 270 bytes del almacén C muestra que las entradas cortas funcionan), o se planifica tener menos líneas fusionando, y la vista previa de la migración muestra cuál. Los valores medidos de los topes siguen en #62; la deriva del índice es #41. Ya está en D1: la compactación acorta primero las entradas más largas hacia 200 bytes, y 80 × 200 bytes = 16 KB.

  2. 02
    Adopted · round sixAdoptado · ronda seis

    Make splitting the main path for oversize files

    Hacer de la división el camino principal para archivos grandes

    Expect dozens of split files in a store like B. Split files share their parent's index line, but every extra link still costs index bytes, so the preview must count them against the budget. Keep evidence files for history; stop presenting them as the fix for file size. Now in D1: splitting is named the primary remedy; evidence files fix 3 of 56.

    Hay que esperar decenas de archivos divididos en un almacén como B. Comparten la línea del índice con su archivo padre, pero cada enlace extra igual cuesta bytes del índice, así que la vista previa debe descontarlos del presupuesto. Los archivos de evidencia se quedan para el historial; hay que dejar de presentarlos como la solución al tamaño. Ya está en D1: dividir es el remedio principal; los archivos de evidencia arreglan 3 de 56.

  3. 03
    Adopted · round sixAdoptado · ronda seis

    Narrow the blocking rule

    Acotar la regla de bloqueo

    A mention in another file should not freeze a project forever when 18 of 23 projects are mentioned. Keep read_with: as a hard block, and let plain mentions resolve through the catalog after the move (D5). Lifecycle is #73. Now in D7: only a read_with: in another tier file blocks; mentions are listed as referrers and resolve to the archived copy. Whether to repoint them at the catalog is an open question for #78.

    Que otro archivo lo mencione no debería congelar un proyecto para siempre cuando 18 de 23 proyectos están mencionados. Mantener read_with: como bloqueo firme y dejar que las menciones simples se resuelvan a través del catálogo después de mover el archivo (D5). El ciclo de vida es #73. Ya está en D7: solo bloquea un read_with: en otro archivo de tema; las menciones se listan y llevan a la copia archivada. Si conviene redirigirlas al catálogo es una pregunta abierta para #78.

  4. 04
    Adopted · round sevenAdoptado · ronda siete

    Import nested legacy archives

    Importar los archivos heredados anidados

    Add a legacy import step that writes one ledger line per existing archived file, flat or nested, with its checksum at migration time and the reason "legacy import", instead of deciding legacy by folder shape. Adopted differently: legacy stays decided by folder, but migration moves every unledgered file under archive/<tier>/, byte for byte, into archive/legacy/, listed in the plan and reversible. Round six first targeted the wrong shape (<tier>/archive/); round seven fixed it.

    Agregar un paso de importación que escriba una línea de registro por cada archivo ya archivado, suelto o anidado, con su suma de verificación en el momento de migrar y el motivo "importación heredada", en vez de decidir qué es heredado por la forma de la carpeta. Adoptado de otra forma: lo heredado se sigue decidiendo por carpeta, pero la migración mueve cada archivo sin registro de archive/<tema>/, byte a byte, a archive/legacy/, listado en el plan y reversible. La sexta ronda apuntó primero a la forma equivocada (<tema>/archive/); la séptima lo corrigió.

  5. 05
    Partly adopted · round sixAdoptado en parte · ronda seis

    Keep the catalog, and justify it honestly

    Mantener el catálogo, con la justificación correcta

    It is for finding archived material and scoping "not found", not for repairing links, which are already clean. Search it only when a request refers back to earlier knowledge, as round six asked. Now in D5: the catalog is read only for requests that refer back. The justification is still open.

    Sirve para encontrar material archivado y acotar los "no encontrado", no para reparar enlaces, que ya están limpios. Consultarlo solo cuando un pedido se refiere a conocimiento anterior, como pidió la sexta ronda. Ya está en D5: el catálogo se lee solo en pedidos que se refieren a algo anterior. La justificación sigue abierta.

  6. 06
    Still openSigue abierto

    Count helper agents in the cost

    Contar a los agentes auxiliares en el costo

    Every helper pays the full index again, which makes the byte budget worth more than one session's figure. Batched reads (D6, #64) target the one-file-per-call habit measured in Claude Code.

    Cada auxiliar paga el índice completo otra vez, lo que hace que el presupuesto en bytes valga más que la cifra de una sesión. La lectura en lote (D6, #64) apunta al hábito de un archivo por llamada que se midió en Claude Code.

  7. 07
    Still openSigue abierto

    Measure the lifecycle again later

    Volver a medir el ciclo de vida más adelante

    A store four and a half months old cannot show whether stale projects retire. Keep the lifecycle opt-in and measure again once files pass 180 days.

    Un almacén de cuatro meses y medio no puede mostrar si los proyectos viejos se retiran. Mantener el ciclo de vida como opcional y volver a medir cuando haya archivos de más de 180 días.

Method and caveatsMétodo y advertencias

06
  • What was measured. One real store in two snapshots (A and B), copied to a scratch directory and never written, plus index snapshots of Store C and one of the A/B store found inside ten session transcripts. Python over the copies, and the design's own checker (check-store.sh at commit bfbbe87, after review round five) run unchanged with default caps.
  • Whose data this is. The stores and transcripts belong to the project's maintainer, who asked for them to be measured and approved publishing aggregates only.
  • Only aggregates are published. No file names, project names, content or session identifiers appear on this page.
  • Store B was copied mid-distillation (status "running"), so it may be caught partway through a write.
  • Bytes and entries. Byte counts are raw file bytes. An entry is a SPINE line starting with - [, the checker's definition. Links are ](path.md).
  • Tokens are bytes ÷ 4 unless stated. That is an estimate, not a tokenizer count. Characters ÷ 3.2 gives about 24% more.
  • Evidence heuristics are mechanical. The design leaves the call to the distiller, so a real migration may move more than the strict figure. The generous bounds bracket it.
  • Staleness uses the newest last_validated or last_updated date in each file, as the design specifies, measured against 2026-09-23.
  • Sessions. Ten, chosen by signal count, not at random: illustrative, not a population estimate. Knowledge share of processed input multiplies each store result by the number of later model calls in the session; it ignores compaction (which overstates Codex) and the always-on rules file, and it measures share of context, not cost, since cached input is billed far lower.
  • Review counts are as posted on the pull request, one per bullet. Round five bundled several small points into one bullet. Round seven lists two blocking findings (one of them a merge conflict) and seven flags, three of them marked low. Notes are not in the chart.
  • Not run: the before/after loss check (C4), because no migrated real store exists. Store C's tier files were not available, only its index.
  • Qué se midió. Un almacén real en dos copias (A y B), copiadas a un directorio temporal y nunca modificadas, más copias del índice del almacén C y una del almacén A/B halladas en diez transcripciones de sesiones. Python sobre las copias y el propio verificador del diseño (check-store.sh en el commit bfbbe87, tras la quinta ronda) sin cambios y con los topes por defecto.
  • De quién son los datos. Los almacenes y las transcripciones son del mantenedor del proyecto, que pidió medirlos y aprobó publicar solo agregados.
  • Solo se publican agregados. En esta página no aparecen nombres de archivos, nombres de proyectos, contenido ni identificadores de sesión.
  • El almacén B se copió a mitad de una destilación (estado "en curso"), así que puede haber quedado a medio escribir.
  • Bytes y entradas. Los bytes son bytes crudos de archivo. Una entrada es una línea del SPINE que empieza con - [, la definición del verificador. Los enlaces son ](ruta.md).
  • Tokens significa bytes ÷ 4 salvo que se indique otra cosa. Es una estimación, no un conteo con tokenizador. Caracteres ÷ 3,2 da un 24 % más.
  • Las heurísticas de evidencia son mecánicas. El diseño deja la decisión al destilador, así que una migración real puede mover más que la cifra estricta. Las cotas amplias la encierran.
  • La antigüedad usa la fecha last_validated o last_updated más reciente de cada archivo, como indica el diseño, medida al 23-09-2026.
  • Sesiones. Diez, elegidas por cantidad de señales y no al azar: ilustrativas, no una estimación poblacional. El peso del conocimiento en la entrada procesada multiplica cada resultado del almacén por la cantidad de llamadas posteriores al modelo en la sesión; ignora la compactación (lo que exagera a Codex) y el archivo de reglas siempre cargado, y mide peso en el contexto, no costo, porque la entrada en caché se cobra mucho más barata.
  • Los conteos de revisión son tal como se publicaron en el pull request, uno por viñeta. La quinta ronda agrupó varios puntos pequeños en una viñeta. La séptima lista dos hallazgos bloqueantes (uno es un conflicto de fusión) y siete alertas, tres de ellas de prioridad baja. Las notas no están en el gráfico.
  • No se corrió: la comprobación de pérdidas antes/después (C4), porque no existe ningún almacén real migrado. Los archivos de tema del almacén C no estaban disponibles, solo su índice.
Changelog.Historial de cambios. 2026-09-23 · First version. Measured against the design as it stood after review round five, while round six is being resolved. Revised the same day after review of this page: growth figure made consistent (+65% to Sep 22), split range defined, review history extended to round seven, and each proposal marked adopted or open.23-09-2026 · Primera versión. Medida contra el diseño tal como quedó tras la quinta ronda, mientras se resuelve la sexta. Revisada el mismo día tras la revisión de esta página: cifra de crecimiento coherente (+65 % al 22 de septiembre), rango de divisiones definido, historial de revisión extendido a la séptima ronda y cada propuesta marcada como adoptada o abierta.