petro-agent Acerca del autor ↗About the author ↗ GitHub ↗
agente petrofísico autónomoautonomous petrophysical agent

El LLM decide.
El motor calcula.
Nadie miente.
The LLM decides.
The engine computes.
Nobody lies.

petro-agent convierte registros de pozo (LAS) en informes petrofísicos completos — Vsh, porosidad, saturación, net pay, incertidumbre — sin intervención humana en el proceso. Cada número sale de código determinista; el modelo solo elige métodos, intervalos y análisis, y redacta. Cuando el resultado no es creíble, el informe lo dice en su portada. petro-agent turns well logs (LAS) into complete petrophysical reports — Vsh, porosity, saturation, net pay, uncertainty — with no human intervention in the process. Every number comes from deterministic code; the model only chooses methods, intervals and analyses, and writes prose. When the result isn't credible, the report says so on its front page.

0
números escritos por el LLMnumbers written by the LLM
198
pozos Kansas cargados; regresión en VOLVEKansas wells loaded; VOLVE regression
4/4
zonas 100% en roca productora — el mejor agente final (opus-4.8)zones 100% in producing rock — best final agent (opus-4.8)
80%→0
observaciones desperdiciadas antes y después de darle memoriawasted observations before vs after giving it memory
0 1.6k 3.3k 4.6k ft zona de interés zone of interest 2,953–4,429 ft

El problemaThe problem

Un petrofísico que interpreta un pozo toma decenas de decisiones — qué método de arcillosidad, qué intervalo analizar, qué modelo de saturación — y las respalda con evidencia. Los LLM son buenos eligiendo y redactando, y pésimos calculando de forma fiable. La pregunta del proyecto: ¿puede un sistema producir el informe completo, con cada afirmación atada a evidencia trazable, si separamos con un muro las decisiones (LLM) de los números (motor determinista)? A petrophysicist interpreting a well makes dozens of decisions — which shale-volume method, which interval, which saturation model — and backs them with evidence. LLMs are good at choosing and writing, and terrible at reliable arithmetic. The project's question: can a system produce the full report, every claim tied to traceable evidence, if we wall off the decisions (LLM) from the numbers (deterministic engine)?

No promete "siempre correcto". Promete algo más útil: honesto sobre cuánto acierta, y demostrable — versiones, seeds, hashes de configuración y un ledger JSON por pozo que registra cada decisión y cada degradación. It doesn't promise "always right." It promises something more useful: honest about how much it gets right, and provably so — versions, seeds, config hashes, and a per-well JSON ledger recording every decision and every degradation.

El invarianteThe invariant

Regla no negociableNon-negotiable rule
Todo número sale de una función validada de la librería petrofísica — congelada, versionada y cubierta por golden tests (cotas físicas, monotonía, casos analíticos). El agente selecciona y parametriza; nunca escribe una ecuación en runtime. El orquestador (LangGraph) es determinista: un LLM jamás decide una compuerta. Every number comes from a vetted function in the petrophysics library — frozen, versioned, covered by golden tests (physical bounds, monotonicity, analytic cases). The agent selects and parameterizes; it never authors an equation at runtime. The orchestrator (LangGraph) is deterministic: an LLM never decides a gate.

La prueba de que el muro aguanta: cuando dos modelos distintos toman la misma decisión (mismo método, mismo intervalo), el net pay resultante es bit-idéntico — 1,200 ft en el pozo Ken & Travis Schaben No. 1-31 (API 15-135-25945) para gemma-4-26b y nemotron-ultra, calculado dos veces por el mismo motor. La variación entre informes es 100% variación de criterio, nunca de aritmética. Proof the wall holds: when two different models make the same decision (same method, same interval), the resulting net pay is bit-identical — 1,200 ft on well Ken & Travis Schaben No. 1-31 (API 15-135-25945) for both gemma-4-26b and nemotron-ultra, computed twice by the same engine. Variation across reports is 100% variation in judgment, never in arithmetic.

MetodologíaMethodology

La mejor forma de entender el sistema es seguir el viaje de un pozo: entra como un archivo LAS crudo y sale como un informe donde cada cifra tiene un origen trazable. En cada parada del camino hay un responsable declarado — el motor determinista (azul) hace todo lo que se puede probar con un test, y el agente (ámbar) aporta lo único que el código no puede aportar: criterio. The best way to understand the system is to follow a well's journey: it enters as a raw LAS file and leaves as a report where every figure has a traceable origin. At each stop there is a declared owner — the deterministic engine (blue) does everything a test can prove, and the agent (amber) contributes the one thing code cannot: judgment.

engine1 · Llega el pozoThe well arrives el motor carga el LAS, normaliza unidades y curvas, enmascara lecturas físicamente imposibles — y aborta si >80% del registro es inusable the engine loads the LAS, normalizes units and curves, masks physically impossible readings — and aborts if >80% of the log is unusable
agent2 · El agente analizaThe agent analyzes estudia la evidencia (perfiles, figuras, estadística del campo) y toma las decisiones de un analista: qué intervalo evaluar, con qué métodos, qué análisis extra pedir studies the evidence (profiles, figures, field statistics) and makes an analyst's decisions: which interval to evaluate, with which methods, which extra analyses to request
engine3 · El motor calculaThe engine computes cada elección se ejecuta con funciones congeladas y cubiertas por golden tests (Larionov, Simandoux, Monte Carlo) — el agente jamás toca la aritmética each choice runs through frozen, golden-tested functions (Larionov, Simandoux, Monte Carlo) — the agent never touches the arithmetic
engine4 · La física objetaPhysics objects validadores objetan el resultado final: cada objeción baja el tier de confianza y puede forzar la abstención — ningún LLM decide una compuerta validators object to the final result: each objection lowers the confidence tier and can force abstention — no LLM ever decides a gate
agent5 · El agente redactaThe agent writes escribe y relee su borrador; un verificador ata cada cifra de la prosa al ledger — un número sin respaldo se rechaza writes and rereads its draft; a verifier ties every figure in the prose to the ledger — an unbacked number is rejected

Tres mecanismos hacen el loop medible y seguro: (1) el frontier de acciones solo ofrece pasos físicamente válidos (PHIE exige Vsh; Sw exige PHIE) — la física no es una opinión; (2) fallbacks deterministas señalizados: si el modelo calla, el default canónico avanza un peldaño y queda registrado como default, no como mérito del agente; (3) evidencia antes de elegir: el agente puede pedirle al motor la comparación numérica de todos los métodos validados (compare_methods) antes de comprometerse con uno. Three mechanisms make the loop measurable and safe: (1) the action frontier only offers physically valid steps (PHIE requires Vsh; Sw requires PHIE) — physics is not an opinion; (2) signaled deterministic fallbacks: if the model goes silent, the canonical default advances one rung and is recorded as a default, never as the agent's merit; (3) evidence before choosing: the agent can ask the engine for the numeric comparison of every vetted method (compare_methods) before committing to one.

{
  "sw_summary": { "method": "sw_simandoux", "method_source": "agent",
                 "methods": { "sw_archie": 0.62, "sw_simandoux": 0.56, "sw_indonesia": 0.58 } },
  "run.analyst_loop": { "authored_core": 3, "default_steps": 0, "reclosed_steps": [] }
}

Extracto real de un ledger: la elección del agente, la evidencia que vio, y cuánto del trabajo fue suyo — todo auditable desde el artefacto persistido. Real ledger excerpt: the agent's choice, the evidence it saw, and how much of the work was its own — all auditable from the persisted artifact.

ResultadosResults

1 · El techo era el entorno, no los modelos 1 · The ceiling was the environment, not the models

Con la interpretación precomputada (modo revisor), cuatro familias frontier distintas convergían al mismo perfil: 1 elección por pozo, 0 análisis opcionales. Al quitar el precomputado (modo autor), los mismos modelos saltaron a autorar los 3 métodos core con evidencia comparativa y añadir 4 análisis opcionales: With the interpretation precomputed (reviewer mode), four different frontier families converged to the same profile: 1 choice per well, 0 optional analyses. Removing the precompute (author mode), the same models jumped to authoring all 3 core methods with comparison evidence and adding 4 optional analyses:

revisor (v7)reviewer (v7) autor (v8)author (v8)
elecciones interpretativas por pozo (método, zona, análisis — mediana del batch)interpretive choices per well (method, zone, analyses — batch median) 0 4 8 nemotron-ultra · reviewer: 1.0 choices/well nemotron-ultra · author: 7.0 choices/well nemotron-ultra 7.0 nemotron-super · reviewer: 1.0 choices/well nemotron-super · author: 5.25 choices/well nemotron-super 5.3 gemma-4-26b · author: 7.0 choices/well (no v7 run: pool 429) gemma-4-26b 7.0 n/a
Ver como tablaView as table
ModeloModelreviewer (v7)author (v8)authored coreopcionalesoptionals
nemotron-ultra1.07.03/34
nemotron-super1.05.253/30–4
gemma-4-26bn/a7.03/34

gemma-4-26b no tiene barra «revisor»: su corrida v7 nunca completó (429 upstream persistente del endpoint gratuito, documentado) — se muestra solo su modo autor.gemma-4-26b has no “reviewer” bar: its v7 run never completed (persistent upstream 429 on the free endpoint, documented) — only its author mode is shown.

2 · La identidad analítica es del modelo, no de la seed 2 · Analytical identity belongs to the model, not the seed

Re-corrimos los cuatro modelos de pago con seeds de decodificación distintas (13/101/777/2025 vs 42), motor pineado. Cada modelo repitió su cuaterna de pozos y su perfil de conducta; la seed solo agitó la elección dentro de la familia shaly-sand (gpt-5 flipeó Simandoux↔Indonesia en 3/4 pozos; qwen3-max fue 100% reproducible). Donde la elección se repitió, el número fue bit-idéntico. We reran the four paid models with different decoding seeds (13/101/777/2025 vs 42), engine pinned. Each model repeated its well quartet and behavioral profile; the seed only jittered the choice within the shaly-sand family (gpt-5 flipped Simandoux↔Indonesia on 3/4 wells; qwen3-max was 100% reproducible). Wherever the choice repeated, the number was bit-identical.

3 · La decisión que ningún modelo tomaba — medida limpiamente (estado a v10) 3 · The decision no model would make — cleanly measured (as of v10)

Restringir el intervalo de análisis (excluir el overburden que infla la porosidad) es la decisión madre — y ningún modelo free la tomó. Ejercimos las tres palancas del entorno en tres versiones sucesivas y el resultado aísla el límite: Restricting the analysis interval (excluding the overburden that inflates porosity) is the master decision — and no free model made it. We exercised all three environment levers across three successive versions, and the result isolates the limit:

VersiónVersion Información visibleInformation visible Zona elegidaZone chosen Fijación (pasos perdidos)Fixation (wasted steps)
v8objeciones invisibles (validación post-loop)objections invisible (post-loop validation)0/11~1
v9visibles, con una leyenda FALSA para este casovisible, with a legend FALSE for this case0/12~3
v10visibles y veraces por validadorvisible and truthful per validator0/8~1
v10 (frontier, pago)(frontier, paid)mismo entorno verazsame truthful environment1/16 🎯~1–3
Hito — la primera zonaMilestone — the first zone
qwen3-max eligió la primera zona de interés de todo el proyecto (pozo Schwien No. 2-13, 15-135-24938: 871–1,160 ft) — una vez en ~43 pozos-corrida. La decisión más difícil del dominio apareció solo cuando autoría, información y veracidad estuvieron alineadas a la vez, y solo en frontier: el entorno era condición necesaria; el juicio del modelo es el factor restante. qwen3-max chose the project's first zone of interest ever (well Schwien No. 2-13, 15-135-24938: 871–1,160 ft) — once in ~43 well-runs. The domain's hardest decision appeared only when authorship, information and truthfulness were aligned at once, and only in a frontier model: the environment was necessary; model judgment is the remaining factor.

Y el modo autor reveló personalidades analíticas nítidas en los frontier: gpt-5 explora hasta agotar el presupuesto (hit_max en 3/4 pozos); deepseek-r1 ejecuta directo (6–10 pasos, 3/3 métodos propios); qwen3-max equilibra — y zonifica; opus-4.8 observa obsesivamente (8× perfiles de profundidad + 5–7× lecturas de figuras por pozo) sin comprometer una sola elección. Author mode also revealed sharp analytical personalities across frontier models: gpt-5 explores until the budget runs out (hit_max on 3/4 wells); deepseek-r1 executes directly (6–10 steps, 3/3 own methods); qwen3-max balances — and zones; opus-4.8 observes obsessively (8× depth profiles + 5–7× figure readings per well) without committing a single choice.

4 · Calibración contra el mundo real (VOLVE) 4 · Calibration against the real world (VOLVE)

Contra la interpretación petrofísica pública de VOLVE (Mar del Norte): correlaciones VSH r=0.96, PHIE r=0.91, SW r=0.87; y tras incorporar la incertidumbre estructural de método, las bandas P10–P90 pasaron de sobreconfiadas (cobertura 2–35%) a calibradas (88–98% frente al 80% nominal). Against VOLVE's public petrophysical interpretation (North Sea): correlations VSH r=0.96, PHIE r=0.91, SW r=0.87; and after folding in structural method uncertainty, P10–P90 bands went from overconfident (2–35% coverage) to calibrated (88–98% vs the 80% nominal).

Motor congelado vs CPI de Equinor (r)Frozen engine vs Equinor CPI (r) VSH 0.962 PHIE 0.910 SW 0.869 01 Pozo 15/9-F-11A, Hugin 11,729–12,343 ft,Well 15/9-F-11A, Hugin 11,729–12,343 ft, sin tunear (Mar del Norte, held-out).untuned (North Sea, held-out). Cobertura P10–P90 (nominal 80%)P10–P90 coverage (nominal 80%) VSH 35% 95% PHIE 1.8% 98% SW 31% 88% 80% solo sensibilidad a parámetrosparameter sensitivity only + incertidumbre de método+ method uncertainty
La prueba de «demostrable». Izquierda: el motor congelado reproduce la interpretación profesional de un campo que nunca vio (VOLVE, Mar del Norte) con r=0.87–0.96, sin tunear. Derecha, el hallazgo honesto: la banda de incertidumbre P10–P90 salía SOBRECONFIADA (PHIE cubría el 1.8% de la verdad, no el 80% nominal); solo al incorporar la incertidumbre de MÉTODO la banda quedó calibrada (88–98%). Preferimos ese hallazgo negativo a maquillarlo. The proof of “provably so”. Left: the frozen engine reproduces a professional interpretation of a field it never saw (VOLVE, North Sea) at r=0.87–0.96, untuned. Right, the honest finding: the P10–P90 uncertainty band came out OVERCONFIDENT (PHIE covered 1.8% of the truth, not the nominal 80%); only after folding in METHOD uncertainty did the band calibrate (88–98%). We'd rather publish that negative finding than dress it up.

La evolución v7→v14: las condiciones naturales del ingeniero The v7→v14 evolution: a real engineer's working conditions

La segunda mitad del proyecto probó una tesis simple: dale al agente lo que un ingeniero real da por sentado — ver su data y su trabajo cuantas veces quiera, probar conjeturas, aprender de su propio fracaso, hacer borradores, pensar antes de responder — y mide qué cambia. Cada palanca fue honesta (hechos, nunca dirección) y cada una produjo su número: The project's second half tested a simple thesis: give the agent what a real engineer takes for granted — re-reading its data and its own work at will, testing conjectures, learning from its own failure, drafting, thinking before answering — and measure what changes. Every lever was honest (facts, never direction), and each produced its number:

Fase experimentalExperimental phase Condición añadidaCondition added Efecto medidoMeasured effect
GA (v11) estudio de campo + evidencia comparativa + notas entre pozosfield study + comparison evidence + cross-well notes la zona aparece: 1/24 → 13/15 pozosthe zone appears: 1/24 → 13/15 wells
GB (v12) journal de observaciones (memoria intra-pozo) + digest de análisisobservation journal (within-well memory) + analysis digest relecturas desperdiciadas: ~80% → 0wasted re-reads: ~80% → 0
GC (v13) reintento con su propio fracaso + hipótesis + error localizadoretry on its own failure + hypotheses + localized error las zonas se MUEVEN: gpt-5 cruza a 2,953–4,350 ft y refina a 3,412–4,265zones MOVE: gpt-5 crosses to 2,953–4,350 ft and refines to 3,412–4,265
GD (v14) ciclo de borradores (relee su informe) + thinking modedraft cycle (rereads its report) + thinking mode 49 revisiones de prosa, 2 rechazadas por el verificador; ultra free: 0→3/3 zonas profundas; opus: 4/4, precisión 1.0049 prose revisions, 2 rejected by the verifier; free ultra: 0→3/3 deep zones; opus: 4/4, precision 1.00
El arco que cierra el proyectoThe arc that closes the project
El modelo que en v10 hizo cero decisiones en 16 pasos (claude-opus-4.8) terminó siendo, con el stack completo, el único agente cuyas ventanas caen al 100% en roca productora — y el único con convergencias legítimas con pay, incluida la del pozo que todos los demás fallan. Las condiciones no fabrican juicio: lo revelan, lo amplifican y lo miden. The model that made zero decisions in 16 steps back in v10 (claude-opus-4.8) ended up, on the full stack, as the only agent whose windows sit 100% inside producing rock — and the only one with legitimate pay-bearing convergences, including the well every other model fails. The conditions don't manufacture judgment: they reveal it, amplify it, and measure it.

Tres narrativas, un mismo datoThree narratives, one dataset

El proyecto completo se puede leer por tres puertas, cada una con su página dedicada: The full project reads through three doors, each with its own page:

Para el ingeniero petrofísicoFor the petrophysical engineer

la roca, la zona, la evidencia SP→Rw, dónde fallan como analistas y la calibración junior/seniorthe rock, the zone, the SP→Rw evidence, where they fail as analysts, and the junior/senior calibration

Para el ingeniero de softwareFor the software engineer

la arquitectura, las 4 fases experimentales con sus números, costos medidos y lecciones de sistemas de agentesthe architecture, the 4 experimental phases with their numbers, measured costs, and agent-system lessons

El proceso (bitácora)The process (journal)

el diario de desarrollo completo, día a día — cada decisión de diseño con el error que la motivóthe full development journal, day by day — every design decision with the mistake that motivated it

Informes finalesFinal reports

Todos los informes se publican íntegros, tal como los produjo cada analista. Una aclaración importante: aquí hay dos manos de Anthropic distintas. La vara (el summit) la escribió claude-fable-5 — el mismo modelo que construyó el sistema, y por eso su techo se declara CONTAMINADO. Los agentes evaluados (claude-opus-4.8, glm-5.2, nemotron-ultra) corrieron sin ese contexto: mismo logo en dos de las fichas, roles opuestos. Every report is published unabridged, exactly as each analyst produced it. One important clarification: there are two different Anthropic hands here. The yardstick (the summit) was written by claude-fable-5 — the same model that built the system, which is why its ceiling is declared CONTAMINATED. The evaluated agents (claude-opus-4.8, glm-5.2, nemotron-ultra) ran without that context: same logo on two of the cards, opposite roles. Nota de unidades: la narrativa de este sitio usa pies (ft); los informes por pozo enlazados abajo se presentan en metros (SI), tal como los produce el motor determinista, sin reconvertir. Units note: this site's narrative uses feet (ft); the per-well reports linked below are shown in metres (SI), exactly as the deterministic engine produces them, unconverted.

Informe de campo — el informe principalField report — the main report · claude-fable-5 · summit v3

72 pozos en dos clases etiquetadas · mapa PLSS · cada pozo enlaza su informe individual · techo CONTAMINADO declarado (el analista conocía el proyecto)72 wells in two labeled classes · PLSS map · every well links to its individual report · declared CONTAMINATED ceiling (the analyst knew the project)
claude-opus-4.8 · Anthropic — el mejor agente del proyecto (4/4 zonas, precisión 1.00)the project's best agent (4/4 zones, precision 1.00)

May Schneider No. 4 · claude-opus-4.8 + thinking 🏆

API 15-135-24881 · EL MEJOR POZO DE AGENTE: zona 3,773–4,429 ft · pay real 43 ft · PHIE 0.146 plausible · convergencia legítimaTHE BEST AGENT WELL: zone 3,773–4,429 ft · real 43 ft pay · plausible PHIE 0.146 · legitimate convergence · su informe de campo →its field report →

May Schneider No. 4 · claude-fable-5 · summit v3

API 15-135-24881 · LA VARA EN EL MISMO POZO, para comparar mano a mano: zona 2,953–4,536 ft · evidencia SP→Rw con asunciones declaradas · MHITHE YARDSTICK ON THE SAME WELL, for a hand-to-hand comparison: zone 2,953–4,536 ft · SP→Rw evidence with declared assumptions · MHI
glm-5.2 · Z.ai — la frontera calidad/costo (~$2 el batch)the quality/cost frontier (~$2 per batch)

KT Schaben No. 2-31 · glm-5.2 + thinking

API 15-135-25990 · zona 2,953–4,514 ft en su debut · 3/4 zonas profundaszone 2,953–4,514 ft on debut · 3/4 deep zones · su informe de campo →its field report →
nemotron-ultra · NVIDIA — el mejor gratuito ($0, co-líder bajo la vara hostil)the best free model ($0, co-leader under the hostile yardstick)

KT Schaben No. 2-31 · nemotron-ultra free + thinking

API 15-135-25990 · zona 2,297–4,341 ft · 0→3/3 profundas al encender el thinkingzone 2,297–4,341 ft · 0→3/3 deep zones once thinking is on · su informe de campo →its field report →

El veredicto: ¿junior o senior?The verdict: junior or senior?

Este proyecto tiene dos lectores técnicos, y el mismo dato les responde preguntas distintas. Al petrofísico: ¿me va a reemplazar una IA? Al desarrollador: ¿qué aprendimos construyendo un sistema de agentes que se puede medir? This project has two technical readers, and the same data answers a different question for each. To the petrophysicist: will an AI replace me? To the developer: what did we learn building an agent system that can actually be measured?

Si eres petrofísico: un junior sólido rozando mid — cuando el modelo puede If you're a petrophysicist: a solid junior nearing mid — when the model can

A mitad del proyecto este veredicto decía "no llegan a junior en lo decisivo": la zona de análisis apareció 1 vez en 47 pozos-corrida. El ciclo final lo cambió: con las condiciones de trabajo de un ingeniero real (memoria, conjeturas, aprender del propio fracaso, borradores, thinking), los mejores agentes zonean sistemáticamente el bloque productor — y el mejor (opus-4.8) eligió 4/4 ventanas 100% dentro de mi roca productora, más apretadas que las mías, con porosidad plausible y pays realistas de 7–43 ft. Su perfil es revelador: acepta los defaults de método del motor y concentra TODO el juicio en dónde está la roca — el patrón de un senior delegando lo mecánico. Mid-project this verdict read "they don't reach junior at what matters": the analysis zone appeared once in 47 well-runs. The final cycle changed it: given a real engineer's working conditions (memory, conjectures, learning from their own failure, drafts, thinking), the best agents zone the producing block systematically — and the best one (opus-4.8) chose 4/4 windows sitting 100% inside my producing rock, tighter than mine, with plausible porosity and realistic 7–43 ft pays. Its profile is telling: it accepts the engine's method defaults and pours ALL its judgment into where the rock is — the pattern of a senior delegating the mechanical work.

La calibración honesta, por competencia: zonar el reservorio = junior→mid (el logro del ciclo); elegir y defender métodos = junior alto (eligen bien, justifican raso — nadie habla de sistema de lodo ni de era de herramienta); calibrar Rw/m/n con datos duros = nadie (la evidencia SP→Rw existía y ningún agente la adoptó); síntesis de campo, correlación y criterio económico = solo el humano. Y una precisión clave: la honestidad senior del informe es del SISTEMA (trazabilidad, abstención, verificador de cifras), no del modelo — quita el andamiaje y el mismo modelo vuelve a promediar overburden. La respuesta corta sigue siendo: no te reemplazan; te multiplican — un senior con este sistema revisa 10× más pozos porque el trabajo junior llega hecho, honesto y auditado. The honest calibration, by competency: zoning the reservoir = junior→mid (the cycle's win); choosing and defending methods = high junior (they choose well and justify thinly — nobody mentions mud systems or tool eras); calibrating Rw/m/n with hard data = nobody (the SP→Rw evidence existed and no agent adopted it); field synthesis, correlation and economic judgment = still human. And one key precision: the report's senior-grade honesty belongs to the SYSTEM (traceability, abstention, claim verifier), not the model — remove the scaffold and the same model goes back to averaging overburden. The short answer still holds: they don't replace you; they multiply you — a senior with this system reviews 10× more wells because the junior work arrives done, honest and audited.

la narrativa petrofísica completathe full petrophysical narrative

Si eres desarrollador: seis lecciones de un sistema medible If you're a developer: six lessons from a measurable system

  • El techo de conducta puede ser tu entorno. Cuatro familias frontier convergían al mismo perfil pobre — no porque los modelos no pudieran, sino porque el pipeline les presentaba un informe terminado. El A/B revisor↔autor con los MISMOS modelos (1→7 elecciones/pozo) es la prueba: antes de concluir "el modelo no da", audita qué le estás dando tú. Your behavior ceiling may be your environment. Four frontier families converged to the same poor profile — not because the models couldn't, but because the pipeline handed them a finished report. The reviewer↔author A/B on the SAME models (1→7 choices/well) is the proof: before concluding "the model can't", audit what you're feeding it.
  • Actividad ≠ decisión — mide compromiso, no volumen. Un modelo respondió los 16 pasos en todos los pozos sin comprometer una sola elección (8× el mismo perfil de profundidad, 5–7× las mismas figuras). Sin trazabilidad por decisión (method_source, opcionales, zona), ese run parecería el más trabajado del leg. Activity ≠ decision — measure commitment, not volume. One model answered all 16 steps on every well without committing a single choice (8× the same depth profile, 5–7× the same figures). Without per-decision provenance (method_source, optionals, zone), that run would look like the leg's hardest worker.
  • Tu propio texto puede desinformar. Una leyenda escrita para una clase de objeción ("re-zonificar no lo arregla") era falsa para otra — y empujó a los modelos lejos de la acción correcta durante dos versiones. La honestidad de un prompt es una propiedad por caso, no un adjetivo global; y corregirla cambió conducta medible (fijación 3→1). Your own text can misinform. A legend written for one objection class ("re-zoning won't fix it") was false for another — and steered models away from the right action for two versions. Prompt honesty is a per-case property, not a global adjective; fixing it changed measurable behavior (fixation 3→1).
  • El muro determinista es lo que hace todo lo demás legible. Como el LLM jamás produce un número, toda variación entre informes es variación de criterio — y por eso el mismo sistema sirve de benchmark conductual: seeds, entornos y modelos se comparan sobre aritmética idéntica. Separar decisión de cálculo no es solo seguridad; es lo que convierte al agente en objeto de medición. The deterministic wall is what makes everything else legible. Because the LLM never produces a number, all variation across reports is judgment variation — which is why the same system doubles as a behavioral benchmark: seeds, environments and models compare over identical arithmetic. Separating decision from computation isn't just safety; it's what turns the agent into a measurable object.
  • La memoria no es una: son tres. Journal intra-ciclo (mató el 80% de relecturas), memoria entre pozos (dio consistencia y compuso hallazgos), y memoria de la CONSECUENCIA (ver su propio intento fallido, medido y localizado — la única que movió el juicio). Un agente sin las tres repite, se contradice y no aprende. Memory isn't one thing: it's three. A within-cycle journal (killed 80% of re-reads), cross-well memory (gave consistency and compounded findings), and memory of CONSEQUENCE (seeing its own failed attempt, measured and localized — the only one that moved judgment). An agent missing any of the three repeats itself, contradicts itself, and doesn't learn.
  • El thinking transforma a los híbridos que corren apagados — y no añade nada a los que ya piensan. El A/B más limpio: qwen3-max sin thinking = 0 zonas profundas en 12 pozos; su variante thinking fue directa al Mississippiano. Y gpt-5, que ya razona por defecto, EMPEORÓ con reasoning explícito (precisión de zona 0.77→0.00). Antes de pagar más tokens de razonamiento, mide si tu modelo ya los estaba gastando. Thinking transforms hybrids running with it off — and adds nothing to models that already think. The cleanest A/B: qwen3-max without thinking = 0 deep zones across 12 wells; its thinking variant went straight to the Mississippian. And gpt-5, which reasons by default, got WORSE with explicit reasoning (zone precision 0.77→0.00). Before paying for more reasoning tokens, measure whether your model was already spending them.

la narrativa de ingeniería completathe full engineering narrative · el proceso día a díathe day-by-day process

Honestidad por diseñoHonesty by design

⚠ ABSTENTION — net-pay avg PHIE 0.30 > 0.25: implausibly high for carbonate.

Ese banner es real y aparece en la portada de la mayoría de los informes de Kansas — porque el resultado no es creíble sin calibración de núcleo, y el sistema lo dice en vez de maquillarlo. La honestidad está cableada en el nivel más duro que puede expresarla: That banner is real and sits on the front page of most Kansas reports — because the result is not credible without core calibration, and the system says so instead of dressing it up. Honesty is wired at the hardest layer that can express it:

  • Gate determinista sobre la cadena final: objeciones tipadas → tier de confianza degradado → abstención explícita.Deterministic gate on the final chain: typed objections → downgraded confidence tier → explicit abstention.
  • Fallbacks señalizados: un informe cerrado por defaults se lee como tal (fell_back, default_steps, reclosed_steps) — nunca como análisis del agente.Signaled fallbacks: a report closed by defaults reads as such (fell_back, default_steps, reclosed_steps) — never as the agent's analysis.
  • Verificador de afirmaciones: cada cifra de la prosa debe existir en el ledger; el LLM no puede inventar un número ni citarse a sí mismo.Claim verifier: every figure in the prose must exist in the ledger; the LLM can't invent a number or cite itself.
  • Sin teatro: una sección opcional solo se renderiza si su tool_result existe; la completitud separa el piso del código de la contribución del agente.No theater: an optional section renders only if its tool_result exists; completeness splits the code's floor from the agent's contribution.
  • Hasta la vara de medir fue estresada. Las ventanas del summit — el baseline (declaradamente contaminado) contra el que se mide a los agentes — pasaron 3 pruebas deterministas: perturbación ±328 ft, refutación física de bordes desde el LAS crudo, y leaderboard bajo la vara más hostil. El ranking del top no se reordena y las 6 bases coinciden con la física (Δ 0–20 ft); el matiz honesto que salió: la precisión se lee como banda (opus ≈0.68–1.00, sin solaparse con el pelotón ≈0.30–0.52) y bajo la vara ensanchada opus y ultra-free-thinking son co-líderes — el desempate depende de si la vara premia precisión o cobertura, nunca de la elección de roca. Even the measuring stick was stress-tested. The summit windows — the (declared-contaminated) baseline agents are measured against — passed 3 deterministic tests: ±328 ft perturbation, physical border refutation from raw LAS, and a leaderboard under the most hostile yardstick. The top ranking doesn't reorder and all 6 bases match the physics (Δ 0–20 ft); the honest nuance that emerged: precision reads as a band (opus ≈0.68–1.00, never overlapping the mid pack ≈0.30–0.52), and under the widened yardstick opus and free-ultra-thinking are co-leaders — the tiebreak depends on whether the stick rewards precision or recall, never on rock choice.

Mea culpa: lo que faltó — y el camino a futuroMea culpa: what was missing — and the road ahead

Un proyecto que presume de honestidad tiene que aplicársela a sí mismo. Estas son las deudas reales del trabajo — cada una con lo que haríamos para saldarla: A project that brags about honesty has to apply it to itself. These are the work's real debts — each with what we would do to settle it:

  • Sin datos duros de calibración. No hubo núcleo, ni Rw medido, ni registros de producción atados a intervalos: por eso la abstención es el techo permanente de Kansas y la vara es un baseline declarado, no verdad de terreno. A futuro: cruzar contra la producción histórica por lease (KGS la publica) y conseguir un estudio de núcleo — cerraría el lazo que ninguna corrida pudo cerrar. No hard calibration data. No core, no measured Rw, no production tied to intervals: that's why abstention is Kansas's permanent ceiling and the yardstick is a declared baseline, not ground truth. Ahead: cross against historical per-lease production (KGS publishes it) and obtain a core study — it would close the loop no run could.
  • La vara la escribió el constructor. La verificamos con tres ciclos deterministas, pero sigue siendo UNA interpretación. A futuro: un benchmark ciego con petrofísicos humanos independientes interpretando los mismos pozos — la vara dejaría de ser de la casa. The yardstick was written by the builder. We verified it with three deterministic cycles, but it remains ONE interpretation. Ahead: a blind benchmark with independent human petrophysicists on the same wells — the yardstick would stop being in-house.
  • Se analiza ~25% de las curvas adquiridas. El canon usa 5–6 de las ~20–26 curvas por LAS; el SP entró al final (y confirmó el Rw), pero microlog, perfiles de invasión y el neutrón vintage quedaron a medio explotar. A futuro: explotar el censo completo — hay 50 pozos vintage esperando su método. ~25% of acquired curves get analyzed. The canon uses 5–6 of the ~20–26 curves per LAS; SP entered late (and confirmed Rw), but microlog, invasion profiles and vintage neutron remain half-exploited. Ahead: exploit the full census — 50 vintage wells are waiting for their method.
  • Ningún agente adoptó la evidencia de calibración. La banda SP→Rw existía y ninguno la incorporó a sus parámetros: calibrar Rw/m/n con datos duros quedó en «nadie». A futuro: medir palancas de adopción de evidencia — el escalón exacto entre junior alto y mid. No agent adopted the calibration evidence. The SP→Rw band existed and none folded it into its parameters: calibrating Rw/m/n with hard data ended at “nobody”. Ahead: measure evidence-adoption levers — the exact step between high junior and mid.
  • Huecos de batch por infraestructura. gpt-5 (v14 default) quedó en 2/4 pozos y qwen-thinking cerró 3/4 con su metrics reconstruido del log — cuotas y créditos agotados a mitad de corrida, documentados pero huecos al fin. A futuro: completar esos batches y re-emitir el leaderboard. Batch holes from infrastructure. gpt-5 (v14 default) ended at 2/4 wells and qwen-thinking closed 3/4 with metrics reconstructed from its log — quotas and credits died mid-run, documented but holes nonetheless. Ahead: complete those batches and re-issue the leaderboard.
  • Un solo campo de desarrollo y promesas sin cuantificar. Schaben + VOLVE de regresión no prueban generalización a otras cuencas; y el «no te reemplaza, te multiplica» no tiene medición con humanos reales. A futuro: un tercer campo a ciegas, y un estudio de tiempo-ahorrado con petrofísicos usando estos informes como borrador. One development field and unquantified promises. Schaben + a VOLVE regression don't prove generalization to other basins; and “it doesn't replace you, it multiplies you” has no measurement with real humans. Ahead: a third field, blind, and a time-saved study with petrophysicists using these reports as a draft.
  • El runtime local quedó atrás. El proyecto corre local por diseño (Ollama), pero todo el juicio medido vino de modelos frontier en la nube usada como instrumento. A futuro: destilar las conductas ganadoras (zonificar, reintentar, revisar borradores) hacia el modelo local — que la autonomía barata alcance el juicio caro. The local runtime fell behind. The project runs locally by design (Ollama), yet all the measured judgment came from frontier models used as an instrument. Ahead: distill the winning behaviors (zoning, retrying, draft revision) into the local model — let cheap autonomy reach expensive judgment.

ReproducibilidadReproducibility

Python · lasio · numpy · LangGraph (máquina de estados, no-LLM) · matplotlib · pytest (golden tests) · Ollama local para el runtime del informe (Qwen3-30B / Llama-3.1-8B) y OpenRouter solo como instrumento de medición de techo. Seeds pineadas, hash de configuración y versiones en cada ledger; los experimentos v5→v14 son re-corribles batch a batch. El código, los tests y la bitácora completa del desarrollo viven en el repositorio (y en la página del proceso). Python · lasio · numpy · LangGraph (state machine, non-LLM) · matplotlib · pytest (golden tests) · local Ollama for the report runtime (Qwen3-30B / Llama-3.1-8B) with OpenRouter only as a ceiling-measurement instrument. Pinned seeds, config hash and versions inside every ledger; experiments v5→v14 are re-runnable batch by batch. Code, tests and the full development journal live in the repository (and on the process page).

github.com/OilCoder/petro-agent · guía de estilos de esta páginathis page's style guide