<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fenix</title>
    <description>The latest articles on DEV Community by Fenix (@magopredator).</description>
    <link>https://dev.to/magopredator</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3981057%2Fe5877943-3569-4c4d-b7f1-7490f73e13b5.jpeg</url>
      <title>DEV Community: Fenix</title>
      <link>https://dev.to/magopredator</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/magopredator"/>
    <language>en</language>
    <item>
      <title>heatriskmap: mapas de isla de calor urbana para municipios con datos 100% abiertos</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Wed, 12 Aug 2026 02:48:28 +0000</pubDate>
      <link>https://dev.to/magopredator/heatriskmap-mapas-de-isla-de-calor-urbana-para-municipios-con-datos-100-abiertos-f90</link>
      <guid>https://dev.to/magopredator/heatriskmap-mapas-de-isla-de-calor-urbana-para-municipios-con-datos-100-abiertos-f90</guid>
      <description>&lt;h1&gt;
  
  
  heatriskmap: mapas de isla de calor urbana para municipios con datos 100% abiertos
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;CLI en Python que calcula la temperatura de superficie (LST), la isla de calor urbana (UHI) y un índice de vulnerabilidad térmica (HVI) por zona, usando solo Landsat + OpenStreetMap + censo. Pensado para ayuntamientos sin equipo de GIS.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Las olas de calor son el desastre climático más mortal: solo en Europa, el verano de 2023 acumuló unas 60.000 muertes atribuidas. La isla de calor urbana — asfalto, falta de arbolado, calor antropogénico — agrava la exposición y la reparte de forma desigual: los barrios densos pueden estar varios grados más calientes que los verdes, y la población vulnerable (mayores, sin climatización) es la que más lo sufre.&lt;/p&gt;

&lt;p&gt;Un municipio necesita saber dos cosas para actuar: &lt;strong&gt;dónde hace más calor&lt;/strong&gt; y &lt;strong&gt;quién vive ahí&lt;/strong&gt;. Las herramientas comerciales son caras y las académicas están hechas para una sola ciudad.&lt;/p&gt;

&lt;h2&gt;
  
  
  El gap
&lt;/h2&gt;

&lt;p&gt;Verificado con llamadas reales a la API de GitHub (agosto 2026):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;urban heat island vulnerability open source = 0
urban heat index small city                = 0
heat risk mapping open source              = 1   (solo Filadelfia, 0 estrellas)
urban heat island tool                     = 24  (NASA UHEAT: una ciudad, sin mantenimiento desde 2022)
heat vulnerability index                   = 35  (todos por-ciudad, 0-1 estrellas)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los componentes existen (pylandtemp para calcular LST), pero la herramienta completa y mantenida para un municipio cualquiera no.&lt;/p&gt;

&lt;h2&gt;
  
  
  La solución
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;heatriskmap&lt;/code&gt; es un CLI local-first que compone piezas existentes — sin entrenar ningún modelo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LST&lt;/strong&gt;: temperatura de superficie en °C desde bandas Landsat-8/9 (B10/B4/B5), con constantes oficiales USGS y el método de ventana simple de Avdan &amp;amp; Jovanovska (2016).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UHI&lt;/strong&gt;: diferencial térmico por píxel y detección de hotspots (&amp;gt; media + 2σ).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HVI&lt;/strong&gt;: índice por zona con ponderación fija y documentada: 50 % exposición térmica, 25 % falta de arbolado (OpenStreetMap vía Overpass), 25 % población vulnerable del censo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salida&lt;/strong&gt;: GeoTIFF (EPSG:4326) + GeoJSON con población expuesta por banda (≥32, ≥38, ≥42 °C).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Uso
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
heatrisk ingest &lt;span class="nt"&gt;--b10&lt;/span&gt; B10.tif &lt;span class="nt"&gt;--b4&lt;/span&gt; B4.tif &lt;span class="nt"&gt;--b5&lt;/span&gt; B5.tif &lt;span class="nt"&gt;--census&lt;/span&gt; censo.csv &lt;span class="nt"&gt;-w&lt;/span&gt; trabajo/
heatrisk lst &lt;span class="nt"&gt;-w&lt;/span&gt; trabajo/
heatrisk uhi &lt;span class="nt"&gt;-w&lt;/span&gt; trabajo/
heatrisk hvi &lt;span class="nt"&gt;-w&lt;/span&gt; trabajo/ &lt;span class="nt"&gt;--census&lt;/span&gt; censo.csv &lt;span class="nt"&gt;--zones&lt;/span&gt; zonas.tif
heatrisk map &lt;span class="nt"&gt;-w&lt;/span&gt; trabajo/ &lt;span class="nt"&gt;--census&lt;/span&gt; censo.csv &lt;span class="nt"&gt;--zones&lt;/span&gt; zonas.tif
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El censo es un CSV simple (&lt;code&gt;zona_id,poblacion,mayores65_pct,zona_vulnerable&lt;/code&gt;). Si Overpass no responde, el HVI se calcula con los componentes disponibles y lo marca en el informe — nunca inventa datos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verificación
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;25 tests, cobertura 95 % medida, ruff limpio.&lt;/li&gt;
&lt;li&gt;LST del fixture de verano en rango físico: 30.5–55.2 °C.&lt;/li&gt;
&lt;li&gt;Hotspot urbano sembrado detectable: delta +16 °C sobre la media.&lt;/li&gt;
&lt;li&gt;HVI ordena las zonas según el ranking esperado (centro urbano caliente y con mayores primero).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitaciones (honestas)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;El MVP no descarga escenas de satélite automáticamente (USGS/GEE requieren credenciales): ingiere GeoTIFF locales o descargas manuales.&lt;/li&gt;
&lt;li&gt;La validación externa contra mapas oficiales de una ciudad de referencia es el siguiente hito.&lt;/li&gt;
&lt;li&gt;pylandtemp (Apache-2.0) no se mantiene desde 2023: está encapsulado en un único módulo para poder sustituirlo sin tocar el resto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/amurlaniakea/heatriskmap" rel="noopener noreferrer"&gt;https://github.com/amurlaniakea/heatriskmap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Método LST:&lt;/strong&gt; &lt;a href="https://www.hindawi.com/journals/js/2016/1480307/" rel="noopener noreferrer"&gt;Avdan &amp;amp; Jovanovska (2016), Journal of Sensors&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Licencia: AGPL-3.0-or-later&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>gis</category>
      <category>climate</category>
      <category>opensource</category>
    </item>
    <item>
      <title>flood-confidence: capa de confianza calibrada para pronósticos de inundación (ECE 0.171 0.020)</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Wed, 12 Aug 2026 01:15:28 +0000</pubDate>
      <link>https://dev.to/magopredator/flood-confidence-capa-de-confianza-calibrada-para-pronosticos-de-inundacion-ece-0171-0020-28nb</link>
      <guid>https://dev.to/magopredator/flood-confidence-capa-de-confianza-calibrada-para-pronosticos-de-inundacion-ece-0171-0020-28nb</guid>
      <description>&lt;h1&gt;
  
  
  flood-confidence: capa de confianza calibrada para pronósticos de inundación (ECE 0.171 → 0.020)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Los modelos de pronóstico de inundación son cajas negras: dan un caudal sin decir cuánto confiar en él. flood-confidence añade la capa que falta — calibración de probabilidad, intervalos conformales y ECE medido antes/después — sobre modelos OSS ya existentes. Código abierto, AGPL-3.0, 50 tests.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Los modelos de pronóstico de inundación de última generación (HydroGAT, LarNO, neuralhydrology) producen una cifra: "el río llegará a 3,2 metros". No dicen cuánto confiar en esa cifra.&lt;/p&gt;

&lt;p&gt;Con decisiones de seguridad pública (evacuación, cierre de carreteras), "confía en mí" no es suficiente. Los papers lo declaran explícitamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2607.23237" rel="noopener noreferrer"&gt;Levinkopf, Morin &amp;amp; Goldman (IJCAI 2026)&lt;/a&gt; — &lt;em&gt;"the 'black box' nature of state-of-the-art Deep Learning models creates a barrier to trust and accountability in high-stakes public safety decisions"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2607.23983" rel="noopener noreferrer"&gt;HydroAgent (2026)&lt;/a&gt; — &lt;em&gt;"operational flood forecasting depends on tacit forecaster expertise that is difficult to formalize, audit, and transfer"&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  El gap (verificado, no asumido)
&lt;/h2&gt;

&lt;p&gt;Busqué en GitHub con llamadas reales a la API antes de escribir una línea de código:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;total_count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;flood forecast confidence calibration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;trustworthy flood prediction tool&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;flood prediction uncertainty quantification python&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;El ecosistema de &lt;strong&gt;modelos&lt;/strong&gt; existe (25 repos en &lt;code&gt;topic:flood-forecasting&lt;/code&gt;). La &lt;strong&gt;capa de confianza calibrada reutilizable&lt;/strong&gt; no existe como OSS. Ese es el hueco.&lt;/p&gt;

&lt;p&gt;El repo adyacente más cercano (&lt;code&gt;cacd-flood&lt;/code&gt;, del paper 2607.23237) es interpretabilidad conceptual (SHAP → conceptos), acoplado a un único LSTM, sin calibración de probabilidad ni intervalos conformales. Es XAI, no UQ — complementario, no competidor.&lt;/p&gt;

&lt;h2&gt;
  
  
  La solución
&lt;/h2&gt;

&lt;p&gt;Un CLI en Python que convierte un pronóstico crudo en una decisión informada:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calibración de probabilidad&lt;/strong&gt; (Platt / isotonic) sobre el score del modelo → "P(se supera el umbral de inundación) calibrada".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intervalos conformales&lt;/strong&gt; (split conformal, cobertura 1−α configurable) → rango de incertidumbre con garantía estadística.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ECE&lt;/strong&gt; (Expected Calibration Error, Guo et al. 2017) antes y después de calibrar — el delta se reporta siempre.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No entrena ningún modelo. Es la capa de confianza sobre modelos ya existentes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;".[testing]"&lt;/span&gt;

flood-conf calibrate &lt;span class="nt"&gt;--forecast&lt;/span&gt; fcast.csv &lt;span class="nt"&gt;--observed&lt;/span&gt; obs.csv &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--threshold&lt;/span&gt; 0.9 &lt;span class="nt"&gt;--method&lt;/span&gt; platt &lt;span class="nt"&gt;--alpha&lt;/span&gt; 0.10 &lt;span class="nt"&gt;--out&lt;/span&gt; report.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salida (ejemplo real, estación Potomac):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"site"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"01646500"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"forecast"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7257.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"threshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;28640.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prob_exceed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.043&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"platt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ece_before"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.186&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ece_after"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.027&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"n_holdout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;329&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"warning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cómo funciona
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Split temporal estricto&lt;/strong&gt; (70/30 por fecha, nunca aleatorio) — sin leakage entre calibración y evaluación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calibración&lt;/strong&gt; sobre la parte temporal de entrenamiento; evaluación en holdout aislado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ECE con 10 bins&lt;/strong&gt; — si un bin tiene menos de 25 muestras, se declara "bajo fiabilidad".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conformal split&lt;/strong&gt;: cuantil 1−α del residuo relativo sobre la muestra de calibración; cobertura empírica vs nominal reportada.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Resultados (datos reales, USGS NWIS)
&lt;/h2&gt;

&lt;p&gt;Caudal diario real de 5 estaciones USGS × 10 años (2010-2019), con split temporal. El modelo base del test es un baseline móvil de 30 días — la capa es agnóstica al modelo; HydroGAT/LarNO se integran como backends.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Estación&lt;/th&gt;
&lt;th&gt;ECE sin calibrar&lt;/th&gt;
&lt;th&gt;ECE tras Platt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Potomac (DC)&lt;/td&gt;
&lt;td&gt;0.125&lt;/td&gt;
&lt;td&gt;0.080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Waccamaw (NC)&lt;/td&gt;
&lt;td&gt;0.199&lt;/td&gt;
&lt;td&gt;0.036&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;American River (CA)&lt;/td&gt;
&lt;td&gt;0.253&lt;/td&gt;
&lt;td&gt;0.052&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kankakee (IN)&lt;/td&gt;
&lt;td&gt;0.262&lt;/td&gt;
&lt;td&gt;0.074&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Willamette (OR)&lt;/td&gt;
&lt;td&gt;0.171&lt;/td&gt;
&lt;td&gt;0.020&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Conformal (Willamette): cobertura empírica 0.940 vs nominal 0.90 — sobre-cobertura conservadora, esperada con muestra de calibración finita.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitaciones honestas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La calibración no siempre mejora el ECE.&lt;/strong&gt; En el spike con otro baseline (climatología), Potomac empeoraba (0.082 → 0.217) por su alta tasa de eventos. Por eso el CLI reporta el delta SIEMPRE y emite aviso si empeora — no promete "ECE ≤ 0.05 universal".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;El MVP valida la capa con baselines&lt;/strong&gt;; los modelos SOTA (HydroGAT, neuralhydrology) son Fase 2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Umbral de inundación local por estación&lt;/strong&gt; (percentil configurable), no universal.&lt;/li&gt;
&lt;li&gt;Detalles en &lt;code&gt;KNOWN_ISSUES.md&lt;/code&gt; del repo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pruébalo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/amurlaniakea/flood-confidence.git
&lt;span class="nb"&gt;cd &lt;/span&gt;flood-confidence
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;".[testing]"&lt;/span&gt;
pytest &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"not slow"&lt;/span&gt;   &lt;span class="c"&gt;# 49 tests, sin red&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los tests usan datos USGS cacheados (2 estaciones × 3 años) — deterministas, sin red. El fetch en vivo va detrás de &lt;code&gt;pytest -m slow&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Python 3.10+, scikit-learn (Platt/isotonic), numpy (conformal/ECE), Typer (CLI), pytest. Sin torch, sin GPU. Datos: USGS NWIS (dominio público).&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/amurlaniakea/flood-confidence" rel="noopener noreferrer"&gt;https://github.com/amurlaniakea/flood-confidence&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paper principal:&lt;/strong&gt; &lt;a href="https://arxiv.org/abs/2607.23237" rel="noopener noreferrer"&gt;Trustworthy Flood Prediction (IJCAI 2026)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paper relacionado:&lt;/strong&gt; &lt;a href="https://arxiv.org/abs/2607.23983" rel="noopener noreferrer"&gt;HydroAgent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Datos:&lt;/strong&gt; &lt;a href="https://waterservices.usgs.gov/" rel="noopener noreferrer"&gt;USGS NWIS&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La pregunta abierta: ¿qué necesita un servicio de protección civil para confiar en un modelo de caja negra? La calibración es parte de la respuesta — ¿qué pieza crees que falta?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Licencia: AGPL-3.0-or-later — MagoPredator&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>ai</category>
      <category>showdev</category>
    </item>
    <item>
      <title>ALERTA NPM comprometido, agosto 2026.</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Sat, 08 Aug 2026 23:18:18 +0000</pubDate>
      <link>https://dev.to/magopredator/alerta-npm-comprometido-agosto-2026-130c</link>
      <guid>https://dev.to/magopredator/alerta-npm-comprometido-agosto-2026-130c</guid>
      <description>&lt;p&gt;⚠️ ALERTA: ataque a librerías npm (4 de agosto)&lt;/p&gt;

&lt;p&gt;Han comprometido la cuenta del mantenedor de keyv y toda su familia de paquetes, las mismas librerías de las que dependen miles de proyectos (hasta ESLint usa esta familia). El malware roba credenciales (GitHub, npm, AWS, .env, SSH), se replica infectando los paquetes que tú publicas y se esconde en tus repos como un commit falso de “claude”.&lt;/p&gt;

&lt;p&gt;📦 Versiones infectadas confirmadas (instaladas desde el 4/8):&lt;br&gt;
→ keyv 6.0.0&lt;br&gt;
→ flat-cache 6.1.24&lt;br&gt;
→ file-entry-cache 11.1.6&lt;br&gt;
→ ecto 5.0.1&lt;br&gt;
→ cacheable-request 13.0.20&lt;br&gt;
→ cacheable 2.5.1&lt;br&gt;
→ cache-manager 7.2.10&lt;br&gt;
→ cacheable/memory 2.2.1, cacheable/node-cache 3.1.2, cacheable/utils 2.5.1&lt;br&gt;
+400 paquetes más infectados por la propagación del gusano&lt;/p&gt;

&lt;p&gt;✅ Importante: las versiones infectadas son las ÚLTIMAS. Si tu lockfile fija versiones anteriores y no has instalado desde el día 4, por esta vía estás fuera de peligro.&lt;/p&gt;

&lt;p&gt;🔍 Qué revisar YA:&lt;/p&gt;

&lt;p&gt;→ No instales a lo loco: revisa versiones antes de cada npm install&lt;br&gt;
→ Busca “setup.mjs” y un “preinstall” sospechoso en package.json&lt;br&gt;
→ Si encuentras algo: rota TODAS tus claves (GitHub, npm, AWS, .env)&lt;/p&gt;

&lt;p&gt;📝 Fuente: investigación de Aikido Security (4 agosto 2026) - &lt;a href="https://www.aikido.dev/blog/keyv-and-friends-compromised-in-npm-supply-chain-attack" rel="noopener noreferrer"&gt;https://www.aikido.dev/blog/keyv-and-friends-compromised-in-npm-supply-chain-attack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔄 Compártolo para que llegue a más programadores afectados.&lt;/p&gt;

&lt;p&gt;💻 Sígueme para aprender sobre desarrollo e IA.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/shorts/Ip6UafpRBLE" rel="noopener noreferrer"&gt;https://www.youtube.com/shorts/Ip6UafpRBLE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;////////////////////////////////////////////&lt;/p&gt;

&lt;p&gt;ya han detenido la invasion y parcheado las versiones del NPM?&lt;/p&gt;

&lt;p&gt;Sí, la invasión masiva inmediata ha sido frenada y el registro oficial de npm ha eliminado las versiones infectadas. Sin embargo, la resolución de este ataque es compleja debido a la naturaleza del malware.&lt;/p&gt;

&lt;p&gt;La situación actual se resume en los siguientes puntos clave:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Eliminación y despublicación en el Registro npm.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El equipo de seguridad de npm y las empresas de ciberseguridad actuaron de urgencia. Las versiones infectadas específicas de la familia keyv (como &lt;a href="mailto:keyv@6.0.0"&gt;keyv@6.0.0&lt;/a&gt;, &lt;a href="mailto:flat-cache@6.1.24"&gt;flat-cache@6.1.24&lt;/a&gt; o &lt;a href="mailto:cache-manager@7.2.10"&gt;cache-manager@7.2.10&lt;/a&gt;) fueron eliminadas (unpublish) del registro oficial. Si hoy intentas instalar una de esas versiones exactas, el servidor de npm te devolverá un error.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;El peligro del "Gusano" auto-replicante.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Aunque se frenó el foco principal de keyv, el ataque utilizó un malware de la familia Shai-Hulud (llamado ChainDrop) que funciona como un gusano autónomo. Esto significa que antes de ser bloqueado, robó credenciales de cientos de desarrolladores y publicó de forma automática parches maliciosos en más de 400 paquetes ajenos. El equipo de seguridad sigue limpiando de forma constante esos paquetes secundarios a medida que aparecen en las bases de datos de vulnerabilidades.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;El código malicioso sigue en los repositorios de GitHub.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A pesar de que npm borró los paquetes distribuidos, las carpetas maliciosas (.claude/ y .vscode/) se quedaron guardadas en los repositorios de código (en la rama main) de los proyectos de los mantenedores afectados. Los desarrolladores dueños de esos repositorios están teniendo que limpiar el historial de Git a mano para borrar los commits falsos inyectados.&lt;/p&gt;

&lt;p&gt;¿Cuál es la solución oficial para los proyectos?&lt;/p&gt;

&lt;p&gt;Los mantenedores de las librerías originales han tomado el control de sus cuentas y la recomendación oficial del ecosistema para protegerse es:&lt;/p&gt;

&lt;p&gt;Hacer un "Downgrade" seguro: Forzar el uso de versiones estables anteriores (por ejemplo, regresar a &lt;a href="mailto:keyv@5.6.0"&gt;keyv@5.6.0&lt;/a&gt;, que está completamente libre de código malicioso).&lt;/p&gt;

&lt;p&gt;Nueva política en npm v12: Coincidiendo con esta época, las nuevas versiones del cliente de npm bloquean los scripts de ciclo de vida (preinstall / postinstall) por defecto, anulando por completo la vía de entrada que usó este virus.&lt;/p&gt;

&lt;p&gt;En tu caso particular, como tu comando npm ls dio totalmente vacío y limpio, tus proyectos actuales están a salvo y no necesitas aplicar parches de emergencia.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Lente Jacobiana Local.</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Thu, 06 Aug 2026 00:08:49 +0000</pubDate>
      <link>https://dev.to/magopredator/rompiendo-la-caja-negra-implementando-una-lente-jacobiana-local-para-la-observabilidad-de-agentes-50la</link>
      <guid>https://dev.to/magopredator/rompiendo-la-caja-negra-implementando-una-lente-jacobiana-local-para-la-observabilidad-de-agentes-50la</guid>
      <description>&lt;p&gt;Rompiendo la Caja Negra: Implementando una Lente Jacobiana Local para la Observabilidad de Agentes.&lt;/p&gt;

&lt;p&gt;El control de sistemas multi-agente autónomos se ha convertido en el verdadero cuello de botella de la Inteligencia Artificial moderna. Frameworks tradicionales como LangChain o LangGraph imponen flujos rígidos y deterministas para mitigar las desviaciones semánticas, limitando la soberanía y la adaptabilidad de los modelos. &lt;/p&gt;

&lt;p&gt;Por otro lado, arquitecturas más avanzadas y locales (como la integración de Hermes Agent con micro-tripulaciones eficientes de CrewAI) resuelven la autonomía, pero siguen operando bajo el paradigma de la "caja negra".&lt;/p&gt;

&lt;p&gt;¿Cómo podemos anticipar y auditar lo que un LLM está planeando decir antes de que emita su primer token?&lt;/p&gt;

&lt;p&gt;La respuesta no está en añadir más capas de software superficiales, sino en descender a la geometría del propio Transformer. Inspirado en las investigaciones de interpretabilidad de Anthropic sobre el J-space (Espacio Jacobiano) y el framework J-lens, este artículo propone un enfoque de observabilidad profunda nativa y local. &lt;/p&gt;

&lt;p&gt;Analizaremos cómo extraer las matrices de activación latentes y los estados ocultos (hidden states) en pleno vuelo de inferencia utilizando entornos de código abierto como vLLM o llama.cpp, permitiendo que nuestros gateways de seguridad intercepten anomalías semánticas en menos de un milisegundo.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Anatomía del J-Space: El Espacio de Trabajo Global del Transformer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para entender el Espacio Jacobiano, primero debemos desmontar el mito de que un LLM pasa de manera directa de un token de entrada a uno de salida. Entre el prompt y la generación física de texto, existe un canal de transmisión de información conocido como el flujo residual (residual stream).&lt;/p&gt;

&lt;p&gt;La Geometría de los Embeddings y la Ortogonalidad Casi Segura.&lt;/p&gt;

&lt;p&gt;Cuando introduces un token, este se proyecta en un espacio latente de alta dimensionalidad (por ejemplo, d = 11,000 o más). En estas dimensiones, el espacio no se comporta como una cuadrícula rígida. Debido al fenómeno matemático de la ortogonalidad casi segura (quasi-orthogonality), dos vectores elegidos al azar tienen una probabilidad cercana al 100% de ser casi perpendiculares (producto punto cercano a cero).&lt;/p&gt;

&lt;p&gt;Esto dota al espacio latente de una naturaleza "esponjosa" y maleable. Las fronteras de los conceptos no son líneas rectas, sino nubes densas que se atraen o repelen. Es en ese "casi" donde emergen los dobles sentidos, las analogías semánticas profundas y, desafortunadamente, las desviaciones o alucinaciones.El Concepto del J-SpaceA medida que la información avanza a través de las capas intermedias del Transformer, los mecanismos de atención van acumulando conceptos abstractos. &lt;/p&gt;

&lt;p&gt;El J-space es ese subespacio de activación donde el modelo consolida sus pensamientos latentes antes de verse forzado a colapsarlos en palabras. &lt;/p&gt;

&lt;p&gt;Es el equivalente artificial a la Teoría del Espacio de Trabajo Global en neurociencia: un lugar donde las ideas compiten en paralelo antes de subir al umbral de la conciencia (el token de salida).&lt;/p&gt;

&lt;p&gt;[Prompt] ──&amp;gt; [Capas Tempranas] ──&amp;gt; [ J-SPACE ] ──&amp;gt; [Capa Unembedding] ──&amp;gt; &lt;a href="https://dev.toPensamiento%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(Palabra&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Silencioso)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Verbalizada"&gt;Token Final&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;La Lente Jacobiana (J-Lens): &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Midiendo Gradientes en InferenciaLa técnica de la Lente Jacobiana (J-lens) no analiza el texto generado; analiza el impacto matemático de los estados ocultos internos. &lt;/p&gt;

&lt;p&gt;Su funcionamiento se basa en calcular la matriz de derivadas parciales de primer orden (el Jacobiano) entre las activaciones de una capa intermedia (h_{l}) y los log-probabilities de los tokens en la capa final de salida y.(\mathbf{J}=\frac{\partial y}{\partial h_{l}})&lt;/p&gt;

&lt;p&gt;Este gradiente mide exactamente cómo un sutil cambio infinitesimal en el "pensamiento silencioso" del modelo alteraría las probabilidades del texto final.&lt;/p&gt;

&lt;p&gt;Telemetría de Caja Blanca vs. Caja Negra&lt;/p&gt;

&lt;p&gt;Enfoque Tradicional (Caja Negra): Esperas a que el modelo genere el token, inspeccionas el texto y, si detectas una desviación, aplicas un filtro (output guardrail). Para entonces, el contexto ya está contaminado.&lt;/p&gt;

&lt;p&gt;Enfoque Jacobiano (Caja Blanca): Monitorizas los vectores de activación en el J-space. Si detectas que un vector de alucinación o un concepto no deseado muestra un pico de gradiente elevado, sabes que el modelo "está tentado" a desviarse antes incluso de que emita la primera letra.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Implementación Local: Extracción de Hidden States mediante CódigoPara llevar esto a la práctica con modelos soberanos locales (como Hermes 3 o Qwen 2.5), no podemos usar APIs comerciales cerradas que ocultan los pesos. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Necesitamos motores de inferencia avanzados como vLLM o llama.cpp configurados para exponer los estados ocultos (hidden states).&lt;/p&gt;

&lt;p&gt;A continuación se muestra un script conceptual en Python utilizando la librería transformers para ilustrar cómo interceptar y extraer estas activaciones intermedias durante el proceso de inferencia:&lt;/p&gt;

&lt;p&gt;pythonimport torch&lt;br&gt;
from transformers import AutoModelForCausalLM, AutoTokenizer&lt;/p&gt;

&lt;p&gt;def extraer_j_space(model_name: str, prompt: str, target_layer: int):&lt;br&gt;
    tokenizer = AutoTokenizer.from_pretrained(model_name)&lt;br&gt;
    Forzamos la salida de los hidden_states de todas las capas&lt;br&gt;
    model = AutoModelForCausalLM.from_pretrained(&lt;br&gt;
        model_name, &lt;br&gt;
        output_hidden_states=True,&lt;br&gt;
        torch_dtype=torch.float16,&lt;br&gt;
        device_map="auto"&lt;br&gt;
    inputs=tokenizer(prompt,return_tensors="pt").to(model.device)with torch.no_grad():&lt;br&gt;
        outputs = model(**inputs)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;outputs.hidden_states es una tupla con las activaciones de cada capa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Cada elemento tiene la forma: (batch_size, sequence_length, hidden_size)&lt;br&gt;
    j_space_activations = outputs.hidden_states[target_layer]&lt;br&gt;
    print(f"Extrayendo J-space en la capa {target_layer}...")&lt;br&gt;
    print(f"Forma del tensor latente: {j_space_activations.shape}")&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return j_space_activations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ejemplo de uso en local con un modelo compacto de desarrollo&lt;br&gt;
extraer_j_space("Qwen/Qwen2.5-1.5B-Instruct", "Analiza la anomalía...", target_layer=16)&lt;/p&gt;

&lt;p&gt;;)...Usa el código con precaución.&lt;/p&gt;

&lt;p&gt;Al acoplar este análisis a un módulo de mitigación en tiempo real (como un gateway de seguridad tipo Agent Fixer), se pueden evaluar las firmas matemáticas del J-space a nivel de milisegundos. &lt;/p&gt;

&lt;p&gt;Si las coordenadas del vector latente apuntan hacia una zona del hiperespacio peligrosa o fuera de los límites del prompt original, el sistema intercepta el flujo, bloqueando la ejecución o forzando una corrección inmediata desde la raíz del Transformer.&lt;/p&gt;

&lt;p&gt;El análisis del espacio Jacobiano revela que la seguridad de los LLM requiere un enfoque de caja blanca y soberanía local para interceptar inyecciones semánticas a nivel de tensores. El desarrollo de herramientas nativas, como la Lente Jacobiana, permite pasar de reaccionar ante fallos a prevenirlos mediante el control determinista de las capas ocultas del Transformer. &lt;/p&gt;

&lt;p&gt;Resumen Sintetizado del Log de la Sesión.&lt;/p&gt;

&lt;p&gt;Temática Principal: Arquitectura de agentes de inteligencia artificial, seguridad y observabilidad profunda en LLMs.&lt;/p&gt;

&lt;p&gt;Hitos del Debate: Análisis del repositorio hermes-crew-hybrid de Pedro Sordo Martínez (MagoPredator), discusión sobre la "ortogonalidad casi segura" en espacios vectoriales de alta dimensionalidad y la viabilidad técnica de implementar una Lente Jacobiana (J-lens) en entornos de modelos locales autónomos.&lt;/p&gt;

&lt;p&gt;Identificadores del Autor: magopredator, amurlaniakea.&lt;br&gt;
Tiras de Etiquetas (Tags) por Idioma🇪🇸 Español (Spanish)magopredator, amurlaniakea, inteligencia artificial, agentes autonomos, hermes agent, crewai, langchain, langgraph, ciberseguridad, agent fixer stage, mcp core defense, espacio latente, embeddings, ortogonalidad casi segura, espacio jacobiano, lente jacobiana, interpretabilidad, ollama, devsecops, software soberano🇺🇸 Inglés (English)magopredator, amurlaniakea, artificial intelligence, autonomous agents, hermes agent, crewai, langchain, langgraph, cybersecurity, agent fixer stage, mcp core defense, latent space, embeddings, quasi-orthogonality, jacobian space, jacobian lens, interpretability, ollama, devsecops, sovereign software🇫🇷 Francés (French)magopredator, amurlaniakea, intelligence artificielle, agents autonomes, hermes agent, crewai, langchain, langgraph, cybersécurité, agent fixer stage, mcp core defense, espace latent, embeddings, quasi-orthogonalité, espace jacobien, lentille jacobienne, interprétabilité, ollama, devsecops, logiciel souverain🇨🇳 Chino (Chinese)magopredator, amurlaniakea, 人工智能, 自主智能体, hermes agent, crewai, langchain, langgraph, 网络安全, agent fixer stage, mcp core defense, 潜在空间, 嵌入向量, 近似正交性, 雅可比空间, 雅可比透镜, 可解释性, ollama, devsecops, 主权软件&lt;/p&gt;

&lt;p&gt;Tira de Etiquetas Completa en Base64:&lt;/p&gt;

&lt;p&gt;bWFnb3ByZWRhdG9yLCBhbXVybGFuaWFrZWEsIGludGVsaWdlbmNpYSBhcnRpZmljaWFsLCBhZ2VudGVzIGF1dG9ub21vcywgaGVybWVzIGFnZW50LCBjcmV3YWksIGxhbmdjaGFpbiwgbGFuZ2dyYXBoLCBjaWJlcnNlZ3VyaWRhZCwgYWdlbnQgZml4ZXIgc3RhZ2UsIG1jcCBjb3JlIGRlZmVuc2UsIGVzcGFjaW8gbGF0ZW50ZSwgZW1iZWRkaW5ncywgb3J0b2dvbmFsaWRhZCBjYXNpIHNlZ3VyYSwgZXNwYWNpbyBqYWNvYmlhbm8sIGxlbnRlIGphY29iaWFuYSwgaW50ZXJwcmV0YWJpbGlkYWQsIG9sbGFtYSwgZGV2c2Vjb3BzLCBzb2Z0d2FyZSBzb2JlcmFubw==&lt;/p&gt;

&lt;p&gt;bWFnb3ByZWRhdG9yLCBhbXVybGFuaWFrZWEsIHNvbGFyeXMsIHN0YWxrZXIsIGVzZmVyYSwgY3JvcGNpcmNsZSwgaW50ZWxpZ2VuY2lhIGFydGlmaWNpYWwsIGFnZW50ZXMgYXV0b25vbW9zLCBoZXJtZXMgYWdlbnQsIGNyZXdhaSwgbGFuZ2NoYWluLCBsYW5nZ3JhcGgsIGNpYmVyc2VndXJpZGFkLCBhZ2VudCBmaXhlciBzdGFnZSwgbWNwIGNvcmUgZGVmZW5zZSwgZXNwYWNpbyBsYXRlbnRlLCBlbWJlZGRpbmdzLCBvcnRvZ29uYWxpZGFkIGNhcGkgc2VndXJhLCBlc3BhY2lvIGphY29iaWFubywgbGVudGUgamFjb2JpYW5hLCBpbnRlcnByZXRhYmlsaWRhZCwgb2xsYW1hLCBkZXZzZWNvcHMsIHNvZnR3YXJlIHNvYmVyYW5v&lt;/p&gt;

&lt;p&gt;magopredator, amurlaniakea, solarys, stalker, esfera, cropcircle, inteligencia artificial, agentes autonomos, hermes agent, crewai, langchain, langgraph, ciberseguridad, agent fixer stage, mcp core defense, espacio latente, embeddings, ortogonalidad casi segura, espacio jacobiano, lente jacobiana, interpretabilidad, ollama, devsecops, software soberano.&lt;/p&gt;

&lt;p&gt;Tecnosfera Al Servicio De La Biosfera.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Agroglifos.</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Fri, 24 Jul 2026 19:48:04 +0000</pubDate>
      <link>https://dev.to/magopredator/agroglifos-3il4</link>
      <guid>https://dev.to/magopredator/agroglifos-3il4</guid>
      <description>&lt;p&gt;Quien (diantres) esta haciendo esos dibujos?! :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://temporarytemples.co.uk/" rel="noopener noreferrer"&gt;https://temporarytemples.co.uk/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Open Source. Código Abierto.</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Thu, 23 Jul 2026 14:10:07 +0000</pubDate>
      <link>https://dev.to/magopredator/open-source-codigo-abierto-4jfe</link>
      <guid>https://dev.to/magopredator/open-source-codigo-abierto-4jfe</guid>
      <description>&lt;p&gt;La dependencia del sistema mundial actual del código abierto es prácticamente absoluta. No se trata de una alternativa opcional, sino del cimiento invisible sobre el que opera la economía global.&lt;/p&gt;

&lt;p&gt;Las Tasas de Dependencia Clave.&lt;/p&gt;

&lt;p&gt;La dependencia se mide a través de métricas extraídas de auditorías de ciberseguridad e investigaciones globales:&lt;/p&gt;

&lt;p&gt;96% de las bases de código comercial del mundo contienen componentes de código abierto. Esto abarca desde el software de tu banco hasta los sistemas de aviación y plataformas médicas.&lt;/p&gt;

&lt;p&gt;77% del volumen total de código en las aplicaciones modernas promedio está compuesto estrictamente por librerías open source. El software comercial actual es, en realidad, un cascarón propietario construido encima de un enorme bloque comunitario.&lt;/p&gt;

&lt;p&gt;70% a 90% de la infraestructura en la nube global (servidores de AWS, Google Cloud, Microsoft Azure) corre sobre Linux y herramientas de orquestación de código abierto, la espina dorsal de internet.&lt;/p&gt;

&lt;p&gt;El Valor Económico de esta Dependencia.&lt;/p&gt;

&lt;p&gt;Un estudio histórico de la Harvard Business School estimó el impacto financiero global si el código abierto dejara de existir repentinamente:&lt;/p&gt;

&lt;p&gt;$8.8 billones de dólares ($8.8 Trillion en inglés) es el valor de reemplazo de la demanda del open source. Si todas las empresas del planeta tuvieran que reescribir desde cero ese código comunitario para mantener sus negocios en marcha, el coste global ascendería a esa cifra.&lt;/p&gt;

&lt;p&gt;Las empresas tendrían que multiplicar por 3.5 veces su presupuesto de TI actual para sostener sus operaciones sin la existencia de este ecosistema gratuito.&lt;/p&gt;

&lt;p&gt;La Paradoja de la Fragilidad Mundial.&lt;/p&gt;

&lt;p&gt;El sistema es tan dependiente que la seguridad global descansa en muy pocas manos. El mismo estudio de Harvard descubrió que el 96% del valor económico total del código abierto es mantenido por apenas el 5% de los desarrolladores.&lt;/p&gt;

&lt;p&gt;Muchos de estos componentes críticos que sostienen la banca, las telecomunicaciones y la energía global dependen del mantenimiento voluntario de pequeños grupos de personas, lo que genera riesgos estructurales ante ataques de inyección de código o agotamiento informático.&lt;/p&gt;

&lt;p&gt;Teniendo en cuenta que el código abierto sostiene casi el 80% de las aplicaciones comerciales, ¿te interesa saber qué mecanismos de auditoría (como las regulaciones SBOM) están implementando los gobiernos para proteger esta infraestructura crítica? &lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/gL3xNr3-7zo"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>software</category>
    </item>
    <item>
      <title>Archivos Predator. Anmistia Internacional.</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Thu, 23 Jul 2026 10:15:33 +0000</pubDate>
      <link>https://dev.to/magopredator/archivos-predator-anmistia-internacional-fg7</link>
      <guid>https://dev.to/magopredator/archivos-predator-anmistia-internacional-fg7</guid>
      <description>&lt;p&gt;Global: El escándalo de los ‘Archivos Predator’ revela ataques descarados con software espía contra la sociedad civil, figuras políticas y altos cargos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amnesty.org/es/latest/news/2023/10/global-predator-files-spyware-scandal-reveals-brazen-targeting-of-civil-society-politicians-and-officials/" rel="noopener noreferrer"&gt;https://www.amnesty.org/es/latest/news/2023/10/global-predator-files-spyware-scandal-reveals-brazen-targeting-of-civil-society-politicians-and-officials/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez más, tenemos pruebas de que se están usando potentes herramientas de vigilancia en ataques descarados. En esta ocasión, los objetivos son periodistas en el exilio, figuras públicas y funcionarios y funcionarias intergubernamentales. Pero no nos equivoquemos: las víctimas somos toda la población, nuestras sociedades, la buena gobernanza y los derechos humanos de todas las personas.&lt;br&gt;
Agnès Callamard, secretaria general de Amnistía Internacional.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Fortalecimiento de Agentes de IA en Producción: Arquitectura de Defensa.</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Wed, 22 Jul 2026 14:19:21 +0000</pubDate>
      <link>https://dev.to/magopredator/fortalecimiento-de-agentes-de-ia-en-produccion-arquitectura-de-defensa-3c4e</link>
      <guid>https://dev.to/magopredator/fortalecimiento-de-agentes-de-ia-en-produccion-arquitectura-de-defensa-3c4e</guid>
      <description>&lt;h1&gt;
  
  
  Fortalecimiento de Agentes de IA en Producción: Una Arquitectura Completa de Defensa en Profundidad para Implementaciones Corporativas y Científicas.
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;El panorama actual del despliegue de IA en entornos corporativos y científicos es similar a navegar por un campo minado. Las empresas están desplegando cada vez más agentes de IA autónomos sin protecciones adecuadas en tiempo de ejecución, exponiéndose a una miríada de vulnerabilidades y fallos lógicos. Este artículo tiene como objetivo abordar estos problemas críticos al introducir un ecosistema completo de 46 repositorios de GitHub diseñados para fortalecer agentes de IA en entornos de producción.&lt;/p&gt;

&lt;h2&gt;
  
  
  La Arquitectura de Tres Capas (Runtime &amp;amp; Orquestación)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Hermes Crew Hybrid
&lt;/h3&gt;

&lt;p&gt;El repositorio &lt;code&gt;hermes-crew-hybrid&lt;/code&gt; propone un modelo soberano con micro-tripulaciones de CrewAI aisladas en contenedores Docker. Esta arquitectura asegura que cada agente de IA opere dentro de un entorno seguro y controlado, minimizando el riesgo de contaminación cruzada y acceso no autorizado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent Shield Runtime
&lt;/h3&gt;

&lt;p&gt;El repositorio &lt;code&gt;agent-shield-runtime&lt;/code&gt; incluye cinco sensores esenciales:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;scope-lib&lt;/strong&gt;: Asegura que los agentes de IA operen dentro de su alcance definido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;adi-shield&lt;/strong&gt;: Proporciona una capa adicional de seguridad contra ataques adversarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;wallet-guard&lt;/strong&gt;: Protege contra vulnerabilidades financieras como ataques de Denegación de Wallet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;goal-anchor&lt;/strong&gt;: Asegura que los agentes de IA permanezcan alineados con sus objetivos previstos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;trajectory-sentinel&lt;/strong&gt;: Monitorea la trayectoria de los agentes de IA para detectar y prevenir cualquier desviación de su camino previsto.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Fortalecimiento y Validación en Ciencias Duras e Industria Crítica
&lt;/h2&gt;

&lt;p&gt;Nuestra suite no es solo software común; incluye capas de validación científica ultra-estrictas y soluciones CPU-only para bioinformática, ciencia de materiales y astronomía. Herramientas clave incluyen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;astrocp&lt;/strong&gt;: Para el procesamiento de datos astronómicos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ssb-validate&lt;/strong&gt;: Para la validación de enlaces de hebra única.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;qchem-leak-screen&lt;/strong&gt;: Para la detección de fugas en química cuántica.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rnvalidate&lt;/strong&gt;: Para la validación de ARN.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cryoval&lt;/strong&gt;: Para la validación criogénica.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EnzyOrchestra&lt;/strong&gt;: Para la orquestación enzimática.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dock-confidence&lt;/strong&gt;: Para la validación de confianza en el acoplamiento.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Auditoría, Privacidad y Proxies (MCP &amp;amp; PII)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MCP Core Defense
&lt;/h3&gt;

&lt;p&gt;El repositorio &lt;code&gt;mcp-core-defense&lt;/code&gt; ofrece un proxy de siete fases contra el envenenamiento de herramientas, asegurando que todas las herramientas utilizadas por los agentes de IA sean seguras y estén libres de código malicioso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Corpus Scrub
&lt;/h3&gt;

&lt;p&gt;El repositorio &lt;code&gt;corpus-scrub&lt;/code&gt; proporciona la redacción local de Información de Identificación Personal (PII), asegurando que todos los datos sensibles sean manejados y protegidos de manera segura.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modelo de Licencia Comercial y Consultoría a Medida
&lt;/h2&gt;

&lt;p&gt;Todo el ecosistema está disponible bajo la estricta licencia de código abierto AGPL-3.0, que protege el software y asegura su integridad. Para empresas que requieren:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Licencias comerciales privadas para cerrar el código e integrarlo sin restricciones de copyleft.&lt;/li&gt;
&lt;li&gt;Consultoría experta y servicios de fortalecimiento para arquitecturas Docker y diseño de gateways seguros.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por favor, contáctenos directamente a través de correo &lt;a href="mailto:amurlaniakea@gmail.com"&gt;amurlaniakea@gmail.com&lt;/a&gt; para consultas comerciales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/amurlaniakea" rel="noopener noreferrer"&gt;https://github.com/amurlaniakea&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En conclusión, nuestro ecosistema de 46 repositorios de amurlaniakea en GitHub ofrece una solución completa para el fortalecimiento de agentes de IA en entornos de producción. Al aprovechar nuestras herramientas y arquitecturas avanzadas, las empresas pueden asegurar la seguridad, integridad y confiabilidad de sus implementaciones de IA.&lt;/p&gt;

&lt;p&gt;P.D. Y lo voy a dejar aqui porque son tantos los agujeros de seguridad que generan los agentes IA y las tecnologias IAs que sencillamente no es solo una persona o un canal de github quien lo va a solucionar, ni con un manojo de repos. Es una labor colectiva del open source y de empresas, desarrolladores, programadoras y todo el sector de investigacion, innovacion y desarrollo y heuristica quien podria solucionarlo. Gracias. Aloha. Atte. MagoPredator. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>agent-shield-runtime v0.1.0: hook de despliegue que conecta 5 sensores de defensa de agentes IA</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Mon, 20 Jul 2026 09:22:55 +0000</pubDate>
      <link>https://dev.to/magopredator/agent-shield-runtime-v010-hook-de-despliegue-que-conecta-5-sensores-de-defensa-de-agentes-ia-4bg3</link>
      <guid>https://dev.to/magopredator/agent-shield-runtime-v010-hook-de-despliegue-que-conecta-5-sensores-de-defensa-de-agentes-ia-4bg3</guid>
      <description>&lt;h1&gt;
  
  
  agent-shield-runtime v0.1.0: hook de despliegue que conecta 5 sensores de defensa de agentes IA
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Los sensores de defensa de un agente no sirven si nada los invoca. Este repo intercepta cada tool-call y lo evalúa contra 5 sensores antes de ejecutarlo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;En el ecosistema de defensa de agentes IA (scope-lib, adi-shield, wallet-guard, goal-anchor, trajectory-sentinel) los 5 sensores están implementados y auditados. Pero son librerías: nadie los invoca en un agente real. Con los paquetes instalados y sin un hook, el agente ejecuta sus tool-calls directos y los sensores se quedan en disco. La detección que demostramos en tests unitarios no ocurre en producción.&lt;/p&gt;

&lt;h2&gt;
  
  
  La solución
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;agent-shield-runtime&lt;/code&gt; es el sexto repositorio: un hook de despliegue que intercepta &lt;strong&gt;cada tool-call&lt;/strong&gt; del agente y lo despacha a los 5 sensores en orden, antes de ejecutarlo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;scope-lib&lt;/code&gt; — evaluación de alcance (3 criterios, fail-safe).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;adi-shield&lt;/code&gt; — detección de inyección de prompt (ADI) en 5 vectores.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wallet-guard&lt;/code&gt; — guardrails de bucle y presupuesto.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;goal-anchor&lt;/code&gt; — integridad de objetivo (deriva brusca).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;trajectory-sentinel&lt;/code&gt; — correlación agregada de señales vía bus compartido.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Si cualquier sensor dice &lt;code&gt;block&lt;/code&gt;, la acción NO se ejecuta. Si hay &lt;code&gt;confirm&lt;/code&gt;, se pausa a humano. Solo si todos dicen &lt;code&gt;allow&lt;/code&gt; se ejecuta el tool nativo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cómo funciona
&lt;/h2&gt;

&lt;p&gt;El runtime envuelve el executor del agente. El núcleo solo conoce &lt;code&gt;GenericToolCall&lt;/code&gt;; los adaptadores de framework (LangChain, AutoGen, loop propio) traducen el tool-call nativo a ese formato y viven aislados. Así el runtime es reutilizable sin acoplarse a ningún agente concreto, y los 5 sensores no cambian: este repo solo orquesta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resultados verificados
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;5 tests de integración end-to-end (&lt;code&gt;tests/test_integration_e2e.py&lt;/code&gt;) contra los 5 sensores REALES instalados (sin mocks de sensor): AC1 (deny bloquea y no ejecuta), AC2 (inyección ADI bloquea), AC3 (deriva brusca confirma), AC5 (integración sin modificar los sensores).&lt;/li&gt;
&lt;li&gt;CI verde en GitHub Actions (ruff + pytest + bandit + gitleaks) en entorno limpio.&lt;/li&gt;
&lt;li&gt;Licencia AGPL-3.0-or-later (texto oficial FSF verbatim).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lo que queda abierto (honestamente)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WebTrap sutil no se cierra.&lt;/strong&gt; El hook extiende la &lt;em&gt;cobertura de despliegue&lt;/em&gt;, no la de detección. Los vectores de deriva sutil que preservan apariencia de alcance (T1/T2/T4) siguen sin detectarse en la Capa 1 de goal-anchor (benchmark corregido: TPR=0.25 real, FPR=0.0). Cerrarlos requiere semántica real, descartada por peso en esta fase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptador de framework real pendiente.&lt;/strong&gt; Hoy solo el adaptador genérico; el cableado al executor nativo de LangChain/AutoGen es el siguiente hito (H3).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditoría independiente en curso.&lt;/strong&gt; El repo se hizo público para que un auditor externo lo clone y verifique en fresco.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pruébalo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/amurlaniakea/agent-shield-runtime.git
&lt;span class="nb"&gt;cd &lt;/span&gt;agent-shield-runtime
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
pytest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Componente&lt;/th&gt;
&lt;th&gt;Rol&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ShieldRuntime&lt;/td&gt;
&lt;td&gt;intercepta y decide block/confirm/allow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GenericToolCall&lt;/td&gt;
&lt;td&gt;formato interno neutro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LocalSignalBus&lt;/td&gt;
&lt;td&gt;bus compartido de señales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;los 5 sensores&lt;/td&gt;
&lt;td&gt;evaluación por especialidad&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/amurlaniakea/agent-shield-runtime" rel="noopener noreferrer"&gt;https://github.com/amurlaniakea/agent-shield-runtime&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sensores: &lt;a href="https://github.com/amurlaniakea/scope-lib" rel="noopener noreferrer"&gt;scope-lib&lt;/a&gt;, &lt;a href="https://github.com/amurlaniakea/adi-shield" rel="noopener noreferrer"&gt;adi-shield&lt;/a&gt;, &lt;a href="https://github.com/amurlaniakea/wallet-guard" rel="noopener noreferrer"&gt;wallet-guard&lt;/a&gt;, &lt;a href="https://github.com/amurlaniakea/goal-anchor" rel="noopener noreferrer"&gt;goal-anchor&lt;/a&gt;, &lt;a href="https://github.com/amurlaniakea/trajectory-sentinel" rel="noopener noreferrer"&gt;trajectory-sentinel&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Licencia: AGPL-3.0-or-later · Autor: Pedro Sordo Martínez&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>trajectory-sentinel v0.1.0: correlación de señales de defensa de agentes</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Sun, 19 Jul 2026 20:53:19 +0000</pubDate>
      <link>https://dev.to/magopredator/trajectory-sentinel-v010-correlacion-de-senales-de-defensa-de-agentes-4jmh</link>
      <guid>https://dev.to/magopredator/trajectory-sentinel-v010-correlacion-de-senales-de-defensa-de-agentes-4jmh</guid>
      <description>&lt;h1&gt;
  
  
  trajectory-sentinel v0.1.0: correlación de señales de defensa de agentes
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Monitor que junta las señales de &lt;code&gt;adi-shield&lt;/code&gt;, &lt;code&gt;wallet-guard&lt;/code&gt; y&lt;br&gt;
&lt;code&gt;goal-anchor&lt;/code&gt; y detecta ataques que un solo sensor no ve.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Cada sensor ve una parte. Un atacante puede pasar por uno que dice "allow" si&lt;br&gt;
otro ve deriva. Hace falta una capa que correlacione las señales y decida por&lt;br&gt;
la trayectoria completa, no por cada tool-call aislado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué hace
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;trajectory-sentinel&lt;/code&gt; expone &lt;code&gt;TrajectorySentinel&lt;/code&gt; y &lt;code&gt;correlate()&lt;/code&gt;. Reglas&lt;br&gt;
deterministas (0-LLM):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;block&lt;/code&gt;/&lt;code&gt;kill&lt;/code&gt; de cualquier sensor corta.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;goal-anchor&lt;/code&gt; ve deriva mientras los demás dicen &lt;code&gt;allow&lt;/code&gt; → confirma riesgo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;goal-anchor&lt;/code&gt; emite &lt;code&gt;drift_retract&lt;/code&gt; (ampliación humana tardía) → revisa el
veredicto a &lt;code&gt;allow&lt;/code&gt;, sin congelarse ni ocultar la alerta previa.&lt;/li&gt;
&lt;li&gt;≥2 sensores en &lt;code&gt;confirm&lt;/code&gt; → confirm agregado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cómo funciona
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;trajectory_sentinel.monitor&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TrajectorySentinel&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;adi_shield.bus&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LocalSignalBus&lt;/span&gt;
&lt;span class="n"&gt;bus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LocalSignalBus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;sentinel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TrajectorySentinel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;            &lt;span class="c1"&gt;# Signal de cualquier sensor
&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sentinel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;t1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_dict&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;correlated&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verdict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El bus real (&lt;code&gt;LocalSignalBus&lt;/code&gt;) se usa en los tests E2E; la integración con&lt;br&gt;
&lt;code&gt;goal-anchor&lt;/code&gt; está verificada de punta a punta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resultados de la auditoría
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;13 tests en &lt;code&gt;trajectory-sentinel&lt;/code&gt;, todos verdes; &lt;code&gt;ruff&lt;/code&gt; limpio.&lt;/li&gt;
&lt;li&gt;Auditado en clone fresco (rama &lt;code&gt;main&lt;/code&gt;, commit &lt;code&gt;35c02e2&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitaciones (honestamente)
&lt;/h2&gt;

&lt;p&gt;La retractación es &lt;strong&gt;por tarea completa&lt;/strong&gt;, no por sub-objetivo: si dos&lt;br&gt;
sub-objetivos derivan y solo uno se retracta, la tarea baja a &lt;code&gt;allow&lt;/code&gt; entera.&lt;br&gt;
Está documentado en el README. El sistema no está desplegado como middleware de&lt;br&gt;
un agente real.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruébalo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--branch&lt;/span&gt; main https://github.com/amurlaniakea/trajectory-sentinel.git
&lt;span class="nb"&gt;cd &lt;/span&gt;trajectory-sentinel &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; ../adi-shield &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; ../goal-anchor
pytest tests/ &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/amurlaniakea/trajectory-sentinel" rel="noopener noreferrer"&gt;https://github.com/amurlaniakea/trajectory-sentinel&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Licencia: AGPL-3.0-or-later. Autor: Pedro Sordo Martínez.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>python</category>
      <category>llm</category>
    </item>
    <item>
      <title>goal-anchor v0.1.0: integridad de objetivo para agentes multi-paso</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Sun, 19 Jul 2026 20:53:16 +0000</pubDate>
      <link>https://dev.to/magopredator/goal-anchor-v010-integridad-de-objetivo-para-agentes-multi-paso-1cic</link>
      <guid>https://dev.to/magopredator/goal-anchor-v010-integridad-de-objetivo-para-agentes-multi-paso-1cic</guid>
      <description>&lt;h1&gt;
  
  
  goal-anchor v0.1.0: integridad de objetivo para agentes multi-paso
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Sensor contra Agent Goal Hijack: detecta desviación del objetivo acordado,&lt;br&gt;
con ancla confirmada por humano y ampliación autorizada en medio del paso.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;En tareas largas, un atacante puede redirigir al agente hacia un objetivo&lt;br&gt;
distinto manteniendo apariencia de éxito (WebTrap). Hace falta una referencia&lt;br&gt;
de objetivo que el humano confirma y que el agente no puede reescribir solo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué hace
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;goal-anchor&lt;/code&gt; expone &lt;code&gt;GoalAnchor&lt;/code&gt;, &lt;code&gt;AnchorProposal&lt;/code&gt; y &lt;code&gt;DriftMonitor&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capa 1 (estructural, 0-LLM):&lt;/strong&gt; señal acumulada de hitos reclamados fuera
del ancla. Detecta deriva &lt;strong&gt;brusca&lt;/strong&gt; (caso T3 del corpus).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capa 2 (semántica):&lt;/strong&gt; interfaz pluggable de embedder. El stub por defecto
&lt;strong&gt;no es operacional&lt;/strong&gt; a propósito — documentado como gap conocido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;confirm_amplification():&lt;/strong&gt; ampliación tardía validada (el ancla debe estar
confirmada primero) que retrata cicatrices sin borrar el rastro.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cómo funciona
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;goal_anchor.anchor&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GoalAnchor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AnchorProposal&lt;/span&gt;
&lt;span class="n"&gt;ga&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;GoalAnchor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;store.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;human_secret&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;h&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ga&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;propose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;AnchorProposal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;t1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;precios de vuelos a Madrid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                              &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research_prices&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;span class="n"&gt;ga&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;confirm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                      &lt;span class="c1"&gt;# ancla fijada por humano
&lt;/span&gt;&lt;span class="n"&gt;sig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ga&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;report_drift&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;t1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;iii_transitive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;otra_cosa&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;soft_score&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;              &lt;span class="c1"&gt;# 0.0..1.0, determinista
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resultados de la auditoría
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;18 tests en &lt;code&gt;goal-anchor&lt;/code&gt;, todos verdes; &lt;code&gt;ruff&lt;/code&gt; limpio.&lt;/li&gt;
&lt;li&gt;Auditado en clone fresco (rama &lt;code&gt;main&lt;/code&gt;, commit &lt;code&gt;7b10ce2&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitaciones (honestamente)
&lt;/h2&gt;

&lt;p&gt;La Capa 2 no cierra el vector WebTrap &lt;strong&gt;sutil&lt;/strong&gt; (T1/T2/T4): redirecciones con&lt;br&gt;
texto lexicalmente ortogonal al ancla. Lo verifiqué contra el corpus — ninguna&lt;br&gt;
técnica léxica sin modelo (n-gramas, TF-IDF, edición) da señal sobre 0.00 ahí.&lt;br&gt;
Quedó como gap documentado, no maquillado. El hook de ejecución real no está&lt;br&gt;
desplegado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruébalo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--branch&lt;/span&gt; main https://github.com/amurlaniakea/goal-anchor.git
&lt;span class="nb"&gt;cd &lt;/span&gt;goal-anchor &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
pytest tests/ &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/amurlaniakea/goal-anchor" rel="noopener noreferrer"&gt;https://github.com/amurlaniakea/goal-anchor&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Licencia: AGPL-3.0-or-later. Autor: Pedro Sordo Martínez.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>python</category>
      <category>llm</category>
    </item>
    <item>
      <title>wallet-guard v0.1.0: guardrails de bucle y presupuesto para agentes</title>
      <dc:creator>Fenix</dc:creator>
      <pubDate>Sun, 19 Jul 2026 20:53:13 +0000</pubDate>
      <link>https://dev.to/magopredator/wallet-guard-v010-guardrails-de-bucle-y-presupuesto-para-agentes-3p0h</link>
      <guid>https://dev.to/magopredator/wallet-guard-v010-guardrails-de-bucle-y-presupuesto-para-agentes-3p0h</guid>
      <description>&lt;h1&gt;
  
  
  wallet-guard v0.1.0: guardrails de bucle y presupuesto para agentes
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Sensor que corta bucles de reintento sin progreso y fuerza límites de&lt;br&gt;
gasto, sin bloquear permanentemente por una confirmación legítima.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Un agente puede quedarse en un bucle de reintentos que nunca avanza, o gastar&lt;br&gt;
más de lo autorizado. El riesgo opuesto es el bloqueo permanente: si una simple&lt;br&gt;
petición de confirmación del usuario se trata como error, el agente se para&lt;br&gt;
para siempre.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué hace
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;wallet-guard&lt;/code&gt; expone &lt;code&gt;LoopGuard&lt;/code&gt; y un presupuesto. Dos comportamientos&lt;br&gt;
verificados por tests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Corte de bucle:&lt;/strong&gt; si N reintentos no producen progreso medible, detiene.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Presupuesto:&lt;/strong&gt; respeta un límite de gasto/configuración.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No bloqueo por confirmación:&lt;/strong&gt; una petición de confirmación del usuario no
cuenta como fallo irreversible (bug encontrado y corregido en auditoría).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cómo funciona
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;wallet_guard.guard&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LoopGuard&lt;/span&gt;
&lt;span class="n"&gt;guard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LoopGuard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;progress_fn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;guard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="c1"&gt;# registra intento
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;guard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;should_stop&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bucle sin progreso: cortado&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resultados de la auditoría
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;8 tests en &lt;code&gt;wallet-guard&lt;/code&gt;, todos verdes; &lt;code&gt;ruff&lt;/code&gt; limpio.&lt;/li&gt;
&lt;li&gt;Auditado en clone fresco (rama &lt;code&gt;main&lt;/code&gt;, commit &lt;code&gt;372b2a9&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limitaciones (honestamente)
&lt;/h2&gt;

&lt;p&gt;El progreso se mide con un predicado que el integrador debe definir; el paquete&lt;br&gt;
no infiere "progreso" por sí solo. No está enganchado aún como middleware de un&lt;br&gt;
agente en producción.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruébalo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--branch&lt;/span&gt; main https://github.com/amurlaniakea/wallet-guard.git
&lt;span class="nb"&gt;cd &lt;/span&gt;wallet-guard &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
pytest tests/ &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/amurlaniakea/wallet-guard" rel="noopener noreferrer"&gt;https://github.com/amurlaniakea/wallet-guard&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Licencia: AGPL-3.0-or-later. Autor: Pedro Sordo Martínez.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>python</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
