@saulwade/swl-ses 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. package/CLAUDE.md +238 -0
  2. package/README.md +560 -0
  3. package/_userland/agentes/.gitkeep +0 -0
  4. package/_userland/habilidades/.gitkeep +0 -0
  5. package/agentes/.evolved.json +9 -0
  6. package/agentes/accesibilidad-wcag-swl.md +692 -0
  7. package/agentes/arquitecto-swl.md +238 -0
  8. package/agentes/auto-evolucion-swl.md +854 -0
  9. package/agentes/backend-api-swl.md +470 -0
  10. package/agentes/backend-csharp-swl.md +418 -0
  11. package/agentes/backend-go-swl.md +388 -0
  12. package/agentes/backend-java-swl.md +279 -0
  13. package/agentes/backend-node-swl.md +477 -0
  14. package/agentes/backend-python-swl.md +608 -0
  15. package/agentes/backend-rust-swl.md +362 -0
  16. package/agentes/backend-workers-swl.md +480 -0
  17. package/agentes/cloud-infra-swl.md +485 -0
  18. package/agentes/consolidador-swl.md +539 -0
  19. package/agentes/datos-swl.md +584 -0
  20. package/agentes/depurador-swl.md +349 -0
  21. package/agentes/devops-ci-swl.md +374 -0
  22. package/agentes/disenador-ui-swl.md +558 -0
  23. package/agentes/documentador-swl.md +343 -0
  24. package/agentes/evals/arquitecto-swl.evals.json +56 -0
  25. package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
  26. package/agentes/evals/implementador-swl.evals.json +56 -0
  27. package/agentes/evals/orquestador-swl.evals.json +60 -0
  28. package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
  29. package/agentes/evals/red-team-swl.evals.json +59 -0
  30. package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
  31. package/agentes/frontend-angular-swl.md +627 -0
  32. package/agentes/frontend-css-swl.md +720 -0
  33. package/agentes/frontend-react-swl.md +696 -0
  34. package/agentes/frontend-swl.md +500 -0
  35. package/agentes/frontend-tailwind-swl.md +830 -0
  36. package/agentes/implementador-swl.md +328 -0
  37. package/agentes/investigador-swl.md +430 -0
  38. package/agentes/investigador-ux-swl.md +500 -0
  39. package/agentes/llm-apps-swl.md +276 -0
  40. package/agentes/migrador-swl.md +417 -0
  41. package/agentes/mobile-android-swl.md +509 -0
  42. package/agentes/mobile-cross-swl.md +539 -0
  43. package/agentes/mobile-ios-swl.md +500 -0
  44. package/agentes/mobile-testing-swl.md +300 -0
  45. package/agentes/notificador-swl.md +916 -0
  46. package/agentes/observabilidad-swl.md +436 -0
  47. package/agentes/orquestador-swl.md +884 -0
  48. package/agentes/pagos-swl.md +283 -0
  49. package/agentes/perfilador-usuario-swl.md +306 -0
  50. package/agentes/planificador-swl.md +402 -0
  51. package/agentes/producto-prd-swl.md +587 -0
  52. package/agentes/red-team-swl.md +216 -0
  53. package/agentes/release-manager-swl.md +568 -0
  54. package/agentes/rendimiento-swl.md +714 -0
  55. package/agentes/resolutor-build-swl.md +243 -0
  56. package/agentes/revisor-angular-swl.md +276 -0
  57. package/agentes/revisor-codigo-swl.md +348 -0
  58. package/agentes/revisor-csharp-swl.md +262 -0
  59. package/agentes/revisor-go-swl.md +257 -0
  60. package/agentes/revisor-java-swl.md +255 -0
  61. package/agentes/revisor-kotlin-swl.md +271 -0
  62. package/agentes/revisor-nextjs-swl.md +279 -0
  63. package/agentes/revisor-php-swl.md +269 -0
  64. package/agentes/revisor-react-swl.md +276 -0
  65. package/agentes/revisor-rust-swl.md +344 -0
  66. package/agentes/revisor-seguridad-swl.md +390 -0
  67. package/agentes/revisor-swift-swl.md +266 -0
  68. package/agentes/revisor-typescript-swl.md +344 -0
  69. package/agentes/sre-swl.md +265 -0
  70. package/agentes/tdd-qa-swl.md +354 -0
  71. package/agentes/ux-disenador-swl.md +501 -0
  72. package/bin/lib/bot-comandos.js +1030 -0
  73. package/bin/lib/bot-discovery.js +182 -0
  74. package/bin/lib/bot-git.js +142 -0
  75. package/bin/swl-ses.js +325 -0
  76. package/bin/swl-telegram-bot.js +442 -0
  77. package/bin/swl-telegram-bot.plist +21 -0
  78. package/bin/swl-telegram-bot.service +14 -0
  79. package/comandos/swl/.evolved.json +23 -0
  80. package/comandos/swl/actualizar.md +174 -0
  81. package/comandos/swl/adoptar-proyecto.md +207 -0
  82. package/comandos/swl/aprender.md +701 -0
  83. package/comandos/swl/auditar-deps.md +134 -0
  84. package/comandos/swl/autoresearch.md +170 -0
  85. package/comandos/swl/ayuda.md +224 -0
  86. package/comandos/swl/brainstorm.md +50 -0
  87. package/comandos/swl/checkpoint.md +330 -0
  88. package/comandos/swl/compactar.md +283 -0
  89. package/comandos/swl/configurar-ci.md +227 -0
  90. package/comandos/swl/contexto.md +112 -0
  91. package/comandos/swl/contribuir.md +233 -0
  92. package/comandos/swl/crear-skill.md +292 -0
  93. package/comandos/swl/cron.md +196 -0
  94. package/comandos/swl/dashboard.md +146 -0
  95. package/comandos/swl/discutir-fase.md +230 -0
  96. package/comandos/swl/ejecutar-fase.md +135 -0
  97. package/comandos/swl/evaluar-skill.md +487 -0
  98. package/comandos/swl/evolucion-estado.md +142 -0
  99. package/comandos/swl/evolucionar.md +259 -0
  100. package/comandos/swl/exportar-vault.md +189 -0
  101. package/comandos/swl/gateway.md +158 -0
  102. package/comandos/swl/inbox.md +116 -0
  103. package/comandos/swl/instalar.md +220 -0
  104. package/comandos/swl/instintos.md +86 -0
  105. package/comandos/swl/mapear-codebase.md +312 -0
  106. package/comandos/swl/mcp-status.md +175 -0
  107. package/comandos/swl/metricas.md +270 -0
  108. package/comandos/swl/modelo.md +102 -0
  109. package/comandos/swl/notificaciones.md +396 -0
  110. package/comandos/swl/nuevo-proyecto.md +154 -0
  111. package/comandos/swl/planear-fase.md +221 -0
  112. package/comandos/swl/plugins.md +256 -0
  113. package/comandos/swl/reflect-skills.md +125 -0
  114. package/comandos/swl/release.md +217 -0
  115. package/comandos/swl/revisar-impacto.md +206 -0
  116. package/comandos/swl/revisar.md +330 -0
  117. package/comandos/swl/salud.md +363 -0
  118. package/comandos/swl/sesiones.md +200 -0
  119. package/comandos/swl/skill-search.md +113 -0
  120. package/comandos/swl/verificar.md +585 -0
  121. package/comandos/swl/wiki.md +620 -0
  122. package/contextos/dev.md +32 -0
  123. package/contextos/research.md +30 -0
  124. package/contextos/review.md +31 -0
  125. package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
  126. package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
  127. package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
  128. package/habilidades/agent-browser/SKILL.md +218 -0
  129. package/habilidades/agentes-como-servicio/SKILL.md +218 -0
  130. package/habilidades/ai-runtime-security/SKILL.md +273 -0
  131. package/habilidades/angular-avanzado/SKILL.md +164 -0
  132. package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
  133. package/habilidades/angular-moderno/SKILL.md +186 -0
  134. package/habilidades/angular-moderno/evals/evals.json +45 -0
  135. package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
  136. package/habilidades/api-rest-diseno/SKILL.md +191 -0
  137. package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
  138. package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
  139. package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
  140. package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
  141. package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
  142. package/habilidades/async-python/SKILL.md +149 -0
  143. package/habilidades/async-python/evals/evals.json +47 -0
  144. package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
  145. package/habilidades/auth-patrones/.evolved.json +9 -0
  146. package/habilidades/auth-patrones/SKILL.md +413 -0
  147. package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
  148. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
  149. package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
  150. package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
  151. package/habilidades/autoresearch/SKILL.md +268 -0
  152. package/habilidades/autoresearch/evals/evals.json +41 -0
  153. package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
  154. package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
  155. package/habilidades/azure-cloud/SKILL.md +308 -0
  156. package/habilidades/azure-cloud/recursos/aks.md +327 -0
  157. package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
  158. package/habilidades/backend-production-resilience/SKILL.md +288 -0
  159. package/habilidades/brainstorming/SKILL.md +295 -0
  160. package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
  161. package/habilidades/build-errors-cpp/SKILL.md +270 -0
  162. package/habilidades/build-errors-csharp/SKILL.md +265 -0
  163. package/habilidades/build-errors-go/SKILL.md +306 -0
  164. package/habilidades/build-errors-java/SKILL.md +278 -0
  165. package/habilidades/build-errors-kotlin/SKILL.md +303 -0
  166. package/habilidades/build-errors-nextjs/SKILL.md +312 -0
  167. package/habilidades/build-errors-php/SKILL.md +270 -0
  168. package/habilidades/build-errors-python/SKILL.md +292 -0
  169. package/habilidades/build-errors-rust/SKILL.md +284 -0
  170. package/habilidades/build-errors-swift/SKILL.md +272 -0
  171. package/habilidades/build-errors-typescript/SKILL.md +369 -0
  172. package/habilidades/checklist-calidad/SKILL.md +271 -0
  173. package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
  174. package/habilidades/checklist-seguridad/SKILL.md +285 -0
  175. package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
  176. package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
  177. package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
  178. package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
  179. package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
  180. package/habilidades/cloud-aws/SKILL.md +142 -0
  181. package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
  182. package/habilidades/compactacion-contexto/SKILL.md +247 -0
  183. package/habilidades/contenedores-docker/SKILL.md +137 -0
  184. package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
  185. package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
  186. package/habilidades/context-builder/SKILL.md +170 -0
  187. package/habilidades/control-profundidad/SKILL.md +128 -0
  188. package/habilidades/csharp-experto/SKILL.md +322 -0
  189. package/habilidades/csharp-patrones/SKILL.md +316 -0
  190. package/habilidades/csharp-testing/SKILL.md +286 -0
  191. package/habilidades/css-moderno/SKILL.md +166 -0
  192. package/habilidades/css-moderno/evals/evals.json +43 -0
  193. package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
  194. package/habilidades/datos-etl/SKILL.md +129 -0
  195. package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
  196. package/habilidades/dbml-experto/SKILL.md +339 -0
  197. package/habilidades/dbml-experto/evals/evals.json +56 -0
  198. package/habilidades/dependencias-auditoria/SKILL.md +320 -0
  199. package/habilidades/deprecacion-migracion/SKILL.md +169 -0
  200. package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
  201. package/habilidades/design-tokens/SKILL.md +158 -0
  202. package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
  203. package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
  204. package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
  205. package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
  206. package/habilidades/discutir-fase/SKILL.md +188 -0
  207. package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
  208. package/habilidades/diseno-responsivo/SKILL.md +186 -0
  209. package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
  210. package/habilidades/django-experto/SKILL.md +205 -0
  211. package/habilidades/django-experto/recursos/async-django.md +390 -0
  212. package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
  213. package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
  214. package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
  215. package/habilidades/django-experto/recursos/testing-django.md +415 -0
  216. package/habilidades/doc-sync/SKILL.md +280 -0
  217. package/habilidades/drift-detection/SKILL.md +179 -0
  218. package/habilidades/ejecutar-fase/SKILL.md +468 -0
  219. package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
  220. package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
  221. package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
  222. package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
  223. package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
  224. package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
  225. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
  226. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
  227. package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
  228. package/habilidades/evaluacion-agentes/SKILL.md +314 -0
  229. package/habilidades/event-driven/SKILL.md +153 -0
  230. package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
  231. package/habilidades/extraccion-documentos/SKILL.md +221 -0
  232. package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
  233. package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
  234. package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
  235. package/habilidades/fastapi-experto/SKILL.md +221 -0
  236. package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
  237. package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
  238. package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
  239. package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
  240. package/habilidades/filament-admin/SKILL.md +290 -0
  241. package/habilidades/frontend-avanzado/SKILL.md +257 -0
  242. package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
  243. package/habilidades/gcp-cloud/SKILL.md +260 -0
  244. package/habilidades/gcp-cloud/recursos/gke.md +234 -0
  245. package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
  246. package/habilidades/generacion-mermaid/SKILL.md +229 -0
  247. package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
  248. package/habilidades/go-experto/SKILL.md +305 -0
  249. package/habilidades/go-patrones/SKILL.md +299 -0
  250. package/habilidades/go-testing/SKILL.md +291 -0
  251. package/habilidades/graphql-experto/SKILL.md +323 -0
  252. package/habilidades/guardrail-semantico/SKILL.md +282 -0
  253. package/habilidades/harness-claude-code/SKILL.md +299 -0
  254. package/habilidades/iam-secretos/SKILL.md +265 -0
  255. package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
  256. package/habilidades/infra-github-actions/SKILL.md +166 -0
  257. package/habilidades/instalar-sistema/.evolved.json +9 -0
  258. package/habilidades/instalar-sistema/SKILL.md +221 -0
  259. package/habilidades/java-experto/SKILL.md +290 -0
  260. package/habilidades/java-patrones/SKILL.md +275 -0
  261. package/habilidades/java-testing/SKILL.md +288 -0
  262. package/habilidades/kotlin-compose/SKILL.md +278 -0
  263. package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
  264. package/habilidades/kotlin-experto/SKILL.md +318 -0
  265. package/habilidades/kotlin-testing/SKILL.md +267 -0
  266. package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
  267. package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
  268. package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
  269. package/habilidades/langchain-langraph/SKILL.md +386 -0
  270. package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
  271. package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
  272. package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
  273. package/habilidades/legacy-code-rescue/SKILL.md +267 -0
  274. package/habilidades/likec4-experto/SKILL.md +412 -0
  275. package/habilidades/likec4-experto/evals/evals.json +69 -0
  276. package/habilidades/manejo-errores/.evolved.json +9 -0
  277. package/habilidades/manejo-errores/SKILL.md +407 -0
  278. package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
  279. package/habilidades/mapear-codebase/SKILL.md +275 -0
  280. package/habilidades/memoria-busqueda/SKILL.md +194 -0
  281. package/habilidades/memoria-busqueda/evals/evals.json +44 -0
  282. package/habilidades/meta-skills-estandar/SKILL.md +298 -0
  283. package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
  284. package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
  285. package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
  286. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
  287. package/habilidades/microservicios/SKILL.md +155 -0
  288. package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
  289. package/habilidades/mobile-flutter/SKILL.md +199 -0
  290. package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
  291. package/habilidades/mobile-react-native/SKILL.md +176 -0
  292. package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
  293. package/habilidades/mongodb-experto/SKILL.md +302 -0
  294. package/habilidades/monitoring-alertas/SKILL.md +201 -0
  295. package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
  296. package/habilidades/nestjs-experto/SKILL.md +307 -0
  297. package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
  298. package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
  299. package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
  300. package/habilidades/nextjs-experto/SKILL.md +335 -0
  301. package/habilidades/nextjs-patrones/SKILL.md +303 -0
  302. package/habilidades/nextjs-testing/SKILL.md +331 -0
  303. package/habilidades/node-experto/.evolved.json +9 -0
  304. package/habilidades/node-experto/SKILL.md +266 -0
  305. package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
  306. package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
  307. package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
  308. package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
  309. package/habilidades/nuevo-proyecto/SKILL.md +204 -0
  310. package/habilidades/orquestacion-async/SKILL.md +303 -0
  311. package/habilidades/paid-media-tracking/SKILL.md +269 -0
  312. package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
  313. package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
  314. package/habilidades/patrones-python/SKILL.md +228 -0
  315. package/habilidades/patrones-python/evals/evals.json +56 -0
  316. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
  317. package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
  318. package/habilidades/perfil-usuario/SKILL.md +200 -0
  319. package/habilidades/perfil-usuario/evals/evals.json +55 -0
  320. package/habilidades/performance-baseline/SKILL.md +297 -0
  321. package/habilidades/php-experto/SKILL.md +291 -0
  322. package/habilidades/php-patrones/SKILL.md +306 -0
  323. package/habilidades/php-testing/SKILL.md +280 -0
  324. package/habilidades/planear-fase/SKILL.md +269 -0
  325. package/habilidades/postgresql-experto/SKILL.md +151 -0
  326. package/habilidades/postgresql-experto/evals/evals.json +53 -0
  327. package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
  328. package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
  329. package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
  330. package/habilidades/privacy-memoria/SKILL.md +141 -0
  331. package/habilidades/privacy-memoria/evals/evals.json +43 -0
  332. package/habilidades/prompt-engineering/SKILL.md +518 -0
  333. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
  334. package/habilidades/rag-arquitectura/SKILL.md +338 -0
  335. package/habilidades/rails-experto/SKILL.md +237 -0
  336. package/habilidades/rails-experto/recursos/active-record.md +260 -0
  337. package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
  338. package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
  339. package/habilidades/react-experto/SKILL.md +209 -0
  340. package/habilidades/react-experto/evals/evals.json +55 -0
  341. package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
  342. package/habilidades/react-optimizacion/SKILL.md +174 -0
  343. package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
  344. package/habilidades/redis-experto/SKILL.md +305 -0
  345. package/habilidades/release-semver/.evolved.json +9 -0
  346. package/habilidades/release-semver/SKILL.md +248 -0
  347. package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
  348. package/habilidades/rust-experto/SKILL.md +400 -0
  349. package/habilidades/rust-patrones/SKILL.md +296 -0
  350. package/habilidades/rust-testing/SKILL.md +311 -0
  351. package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
  352. package/habilidades/sql-optimizacion/SKILL.md +200 -0
  353. package/habilidades/sql-optimizacion/evals/evals.json +54 -0
  354. package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
  355. package/habilidades/sre-patrones/SKILL.md +333 -0
  356. package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
  357. package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
  358. package/habilidades/stripe-pagos/SKILL.md +550 -0
  359. package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
  360. package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
  361. package/habilidades/structured-outputs/SKILL.md +343 -0
  362. package/habilidades/swift-experto/SKILL.md +320 -0
  363. package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
  364. package/habilidades/swift-patrones/SKILL.md +313 -0
  365. package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
  366. package/habilidades/swift-testing/SKILL.md +254 -0
  367. package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
  368. package/habilidades/swl-dashboard/SKILL.md +370 -0
  369. package/habilidades/swl-markitdown/SKILL.md +285 -0
  370. package/habilidades/swl-markitdown/evals/evals.json +52 -0
  371. package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
  372. package/habilidades/tailwind-experto/SKILL.md +240 -0
  373. package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
  374. package/habilidades/tdd-workflow/SKILL.md +293 -0
  375. package/habilidades/terraform-experto/SKILL.md +321 -0
  376. package/habilidades/testing-python/SKILL.md +340 -0
  377. package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
  378. package/habilidades/threat-model-lite/SKILL.md +246 -0
  379. package/habilidades/tracing-processor/SKILL.md +212 -0
  380. package/habilidades/tracking-measurement/SKILL.md +239 -0
  381. package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
  382. package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
  383. package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
  384. package/habilidades/typescript-avanzado/SKILL.md +144 -0
  385. package/habilidades/typescript-avanzado/evals/evals.json +55 -0
  386. package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
  387. package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
  388. package/habilidades/ux-diseno/SKILL.md +116 -0
  389. package/habilidades/ux-diseno/evals/evals.json +43 -0
  390. package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
  391. package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
  392. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
  393. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
  394. package/habilidades/verificacion-evidencia/SKILL.md +160 -0
  395. package/habilidades/verificar-trabajo/SKILL.md +303 -0
  396. package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
  397. package/habilidades/wiki-conocimiento/SKILL.md +276 -0
  398. package/habilidades/wireframes-flujos/SKILL.md +212 -0
  399. package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
  400. package/habilidades/workflow-claude-code/SKILL.md +260 -0
  401. package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
  402. package/hooks/_run-hook.sh +57 -0
  403. package/hooks/actualizar-perfil-usuario.js +364 -0
  404. package/hooks/agente-lifecycle.js +71 -0
  405. package/hooks/aiisms-detector.js +173 -0
  406. package/hooks/audit-trail.js +204 -0
  407. package/hooks/auto-background.js +97 -0
  408. package/hooks/auto-consolidacion.js +178 -0
  409. package/hooks/auto-evolucion.js +666 -0
  410. package/hooks/auto-restaurar-settings.js +360 -0
  411. package/hooks/calidad-pre-commit.js +929 -0
  412. package/hooks/calidad-typescript.js +511 -0
  413. package/hooks/captura-feedback-usuario.js +148 -0
  414. package/hooks/check-update.js +211 -0
  415. package/hooks/clasificador-mensajes.js +271 -0
  416. package/hooks/degradacion-instintos.js +272 -0
  417. package/hooks/escaneo-secretos.js +389 -0
  418. package/hooks/extraccion-aprendizajes.js +763 -0
  419. package/hooks/grafo-contexto.js +129 -0
  420. package/hooks/graph-update.js +67 -0
  421. package/hooks/guardrail-modelo.js +247 -0
  422. package/hooks/inbox-aviso.js +75 -0
  423. package/hooks/inyeccion-contexto.js +246 -0
  424. package/hooks/lib/abort-registry.js +214 -0
  425. package/hooks/lib/agent-backend.js +210 -0
  426. package/hooks/lib/agent-comms.js +263 -0
  427. package/hooks/lib/agent-issue-codes.js +284 -0
  428. package/hooks/lib/agent-matcher.js +189 -0
  429. package/hooks/lib/async-hook-registry.js +252 -0
  430. package/hooks/lib/atomic-write.js +130 -0
  431. package/hooks/lib/auto-consolidator.js +335 -0
  432. package/hooks/lib/canary-skills.js +187 -0
  433. package/hooks/lib/consolidation-lock.js +291 -0
  434. package/hooks/lib/context-builder.js +430 -0
  435. package/hooks/lib/context-compressor.js +657 -0
  436. package/hooks/lib/convergence-detector.js +105 -0
  437. package/hooks/lib/delegation-tracker.js +198 -0
  438. package/hooks/lib/detectar-package-manager.js +423 -0
  439. package/hooks/lib/edit-accumulator.js +171 -0
  440. package/hooks/lib/error-classifier.js +308 -0
  441. package/hooks/lib/event-bus.js +112 -0
  442. package/hooks/lib/evolution-tracker.js +442 -0
  443. package/hooks/lib/execution-state.js +316 -0
  444. package/hooks/lib/fingerprint-id.js +135 -0
  445. package/hooks/lib/gateway-notify.js +116 -0
  446. package/hooks/lib/graph-security.js +75 -0
  447. package/hooks/lib/guardrail-metrics.js +202 -0
  448. package/hooks/lib/hook-circuit-breaker.js +206 -0
  449. package/hooks/lib/loop-detector.js +267 -0
  450. package/hooks/lib/mcp-health.js +184 -0
  451. package/hooks/lib/mcp-pool.js +436 -0
  452. package/hooks/lib/memory-search.js +506 -0
  453. package/hooks/lib/merkle-audit.js +96 -0
  454. package/hooks/lib/model-router.js +222 -0
  455. package/hooks/lib/normalize-error.js +324 -0
  456. package/hooks/lib/normalize-input.js +65 -0
  457. package/hooks/lib/nudge-tracker.js +306 -0
  458. package/hooks/lib/otlp-exporter.js +365 -0
  459. package/hooks/lib/performance-marks.js +239 -0
  460. package/hooks/lib/privacy-filter.js +128 -0
  461. package/hooks/lib/prompt-injection-scanner.js +209 -0
  462. package/hooks/lib/provenance-tracker.js +183 -0
  463. package/hooks/lib/rate-limit-tracker.js +253 -0
  464. package/hooks/lib/reflect-classifier.js +164 -0
  465. package/hooks/lib/resource-quota.js +122 -0
  466. package/hooks/lib/retry-jitter.js +165 -0
  467. package/hooks/lib/risk-engine.js +368 -0
  468. package/hooks/lib/run-log.js +408 -0
  469. package/hooks/lib/session-fts.js +379 -0
  470. package/hooks/lib/session-store.js +293 -0
  471. package/hooks/lib/singleton-guard.js +159 -0
  472. package/hooks/lib/skill-auditor.js +588 -0
  473. package/hooks/lib/sync-status.js +228 -0
  474. package/hooks/lib/taint-tracker.js +107 -0
  475. package/hooks/lib/task-service.js +295 -0
  476. package/hooks/lib/tech-skills-map.js +146 -0
  477. package/hooks/lib/telegram-cliente.js +159 -0
  478. package/hooks/lib/telegram-config.js +170 -0
  479. package/hooks/lib/token-budget.js +156 -0
  480. package/hooks/lib/token-estimator.js +420 -0
  481. package/hooks/lib/toon-compressor.js +245 -0
  482. package/hooks/lib/usage-model.js +183 -0
  483. package/hooks/lib/variable-resolver.js +230 -0
  484. package/hooks/linea-estado.js +324 -0
  485. package/hooks/metricas-evolucion.js +209 -0
  486. package/hooks/monitor-contexto.js +325 -0
  487. package/hooks/notificacion-sesion-stop.js +198 -0
  488. package/hooks/notificacion-telegram-notification.js +4 -0
  489. package/hooks/notificacion-telegram-subagent.js +4 -0
  490. package/hooks/notificacion-telegram.js +267 -0
  491. package/hooks/preservar-estado-pre-compact.js +150 -0
  492. package/hooks/proteccion-rutas.js +366 -0
  493. package/hooks/registro-turnos.js +209 -0
  494. package/hooks/resumen-sesion.js +249 -0
  495. package/hooks/risk-scoring.js +323 -0
  496. package/hooks/rotar-audit-auto.js +122 -0
  497. package/hooks/sugerir-regenerar-inventario.js +170 -0
  498. package/hooks/telemetria-agentes.js +167 -0
  499. package/hooks/tracking-costos.js +688 -0
  500. package/instintos/global.yaml +8 -0
  501. package/instintos/perfil-usuario.yaml +53 -0
  502. package/instintos/prompt-appendices.yaml +57 -0
  503. package/instintos/proyecto.yaml +372 -0
  504. package/manifiestos/gateway-config.json +77 -0
  505. package/manifiestos/handoff-context.json +223 -0
  506. package/manifiestos/hook-profiles.json +44 -0
  507. package/manifiestos/hooks-config.json +360 -0
  508. package/manifiestos/modulos.json +1173 -0
  509. package/manifiestos/perfiles.json +404 -0
  510. package/package.json +86 -0
  511. package/plantillas/ESTADO.md +109 -0
  512. package/plantillas/HOJA-RUTA.md +143 -0
  513. package/plantillas/PROYECTO.md +122 -0
  514. package/plantillas/REQUISITOS.md +132 -0
  515. package/plantillas/auditor-veto-template.md +105 -0
  516. package/plantillas/github-workflows/README.md +47 -0
  517. package/plantillas/github-workflows/release-please.yml +44 -0
  518. package/plantillas/github-workflows/swl-ci.yml +107 -0
  519. package/plantillas/github-workflows/swl-security.yml +51 -0
  520. package/plantillas/mcp-mineru.json +13 -0
  521. package/plantillas/research/ARQUITECTURA.md +220 -0
  522. package/plantillas/research/FUNCIONALIDADES.md +175 -0
  523. package/plantillas/research/RESUMEN.md +165 -0
  524. package/plantillas/research/STACK.md +233 -0
  525. package/plantillas/research/TRAMPAS.md +299 -0
  526. package/plantillas/skill-evals-template.json +44 -0
  527. package/plugin.json +343 -0
  528. package/reglas/accesibilidad.md +269 -0
  529. package/reglas/api-diseno.md +400 -0
  530. package/reglas/arquitectura.md +352 -0
  531. package/reglas/brevedad-output.md +124 -0
  532. package/reglas/cloud-infra.md +247 -0
  533. package/reglas/docs.md +245 -0
  534. package/reglas/estilo-codigo.md +201 -0
  535. package/reglas/git-workflow.md +245 -0
  536. package/reglas/gobernanza.md +271 -0
  537. package/reglas/harness-claude-code.md +213 -0
  538. package/reglas/hooks.md +186 -0
  539. package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
  540. package/reglas/lenguajes/csharp/hooks.md +281 -0
  541. package/reglas/lenguajes/csharp/patrones.md +226 -0
  542. package/reglas/lenguajes/csharp/seguridad.md +258 -0
  543. package/reglas/lenguajes/csharp/testing.md +176 -0
  544. package/reglas/lenguajes/go/estilo-codigo.md +195 -0
  545. package/reglas/lenguajes/go/hooks.md +249 -0
  546. package/reglas/lenguajes/go/patrones.md +249 -0
  547. package/reglas/lenguajes/go/seguridad.md +225 -0
  548. package/reglas/lenguajes/go/testing.md +272 -0
  549. package/reglas/lenguajes/java/estilo-codigo.md +217 -0
  550. package/reglas/lenguajes/java/hooks.md +251 -0
  551. package/reglas/lenguajes/java/patrones.md +226 -0
  552. package/reglas/lenguajes/java/seguridad.md +233 -0
  553. package/reglas/lenguajes/java/testing.md +238 -0
  554. package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
  555. package/reglas/lenguajes/kotlin/hooks.md +245 -0
  556. package/reglas/lenguajes/kotlin/patrones.md +201 -0
  557. package/reglas/lenguajes/kotlin/seguridad.md +202 -0
  558. package/reglas/lenguajes/kotlin/testing.md +236 -0
  559. package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
  560. package/reglas/lenguajes/nextjs/hooks.md +186 -0
  561. package/reglas/lenguajes/nextjs/patrones.md +225 -0
  562. package/reglas/lenguajes/nextjs/seguridad.md +216 -0
  563. package/reglas/lenguajes/nextjs/testing.md +193 -0
  564. package/reglas/lenguajes/php/estilo-codigo.md +228 -0
  565. package/reglas/lenguajes/php/hooks.md +165 -0
  566. package/reglas/lenguajes/php/patrones.md +233 -0
  567. package/reglas/lenguajes/php/seguridad.md +186 -0
  568. package/reglas/lenguajes/php/testing.md +205 -0
  569. package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
  570. package/reglas/lenguajes/rust/hooks.md +240 -0
  571. package/reglas/lenguajes/rust/patrones.md +250 -0
  572. package/reglas/lenguajes/rust/seguridad.md +221 -0
  573. package/reglas/lenguajes/rust/testing.md +194 -0
  574. package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
  575. package/reglas/lenguajes/swift/hooks.md +257 -0
  576. package/reglas/lenguajes/swift/patrones.md +235 -0
  577. package/reglas/lenguajes/swift/seguridad.md +248 -0
  578. package/reglas/lenguajes/swift/testing.md +242 -0
  579. package/reglas/markitdown.md +60 -0
  580. package/reglas/memoria-consolidada.md +209 -0
  581. package/reglas/patrones.md +225 -0
  582. package/reglas/performance.md +195 -0
  583. package/reglas/pruebas.md +159 -0
  584. package/reglas/seguridad-agentes.md +351 -0
  585. package/reglas/seguridad.md +151 -0
  586. package/reglas/skills-estandar.md +373 -0
  587. package/reglas/testing.md +193 -0
  588. package/schemas/agent-contract.json +176 -0
  589. package/schemas/agent-frontmatter.schema.json +149 -0
  590. package/schemas/agent-message.schema.json +53 -0
  591. package/schemas/agent-output-implementacion.schema.json +85 -0
  592. package/schemas/agent-output-planificacion.schema.json +113 -0
  593. package/schemas/agent-output-review.schema.json +78 -0
  594. package/schemas/diary-entry.schema.json +80 -0
  595. package/schemas/hook-profiles.schema.json +39 -0
  596. package/schemas/hooks-config.schema.json +74 -0
  597. package/schemas/instinct.schema.json +115 -0
  598. package/schemas/modulos.schema.json +29 -0
  599. package/schemas/perfiles.schema.json +28 -0
  600. package/schemas/plugin.schema.json +64 -0
  601. package/schemas/skill-evals.schema.json +95 -0
  602. package/schemas/skill-frontmatter.schema.json +170 -0
  603. package/scripts/actualizar.js +145 -0
  604. package/scripts/audit-skills.sh +78 -0
  605. package/scripts/auditar-agentes-gaps.js +149 -0
  606. package/scripts/auditar-cobertura-frameworks.js +241 -0
  607. package/scripts/auditar-skills-gaps.js +206 -0
  608. package/scripts/bootstrap-instintos.js +259 -0
  609. package/scripts/check-update.js +109 -0
  610. package/scripts/comandos/agents.js +105 -0
  611. package/scripts/comandos/info.js +108 -0
  612. package/scripts/comandos/install-asistido.js +186 -0
  613. package/scripts/comandos/skills.js +211 -0
  614. package/scripts/configurar-branch-protection.js +418 -0
  615. package/scripts/daemon-swl.py +388 -0
  616. package/scripts/desinstalar.js +130 -0
  617. package/scripts/doctor.js +559 -0
  618. package/scripts/field-report.js +199 -0
  619. package/scripts/generar-inventario.js +317 -0
  620. package/scripts/inbox-tmux-inject.js +161 -0
  621. package/scripts/inferir-herramientas-permitidas.js +586 -0
  622. package/scripts/inicializar.js +133 -0
  623. package/scripts/instalador.js +1031 -0
  624. package/scripts/instalar-git-hook.js +122 -0
  625. package/scripts/lib/agp-frontmatter.js +222 -0
  626. package/scripts/lib/append-con-marcadores.js +199 -0
  627. package/scripts/lib/artefactos-python.js +43 -0
  628. package/scripts/lib/audit-query.js +221 -0
  629. package/scripts/lib/autostart-linux.js +347 -0
  630. package/scripts/lib/autostart-macos.js +360 -0
  631. package/scripts/lib/autostart-windows.js +307 -0
  632. package/scripts/lib/budget-enforcer.js +252 -0
  633. package/scripts/lib/claude-sessions.js +285 -0
  634. package/scripts/lib/configurar-ci.js +380 -0
  635. package/scripts/lib/console-span-exporter.js +92 -0
  636. package/scripts/lib/contadores-inventario.js +217 -0
  637. package/scripts/lib/dashboard-widgets.js +290 -0
  638. package/scripts/lib/detectar-runtime.js +279 -0
  639. package/scripts/lib/detectar-stack.js +187 -0
  640. package/scripts/lib/diary-entry.js +234 -0
  641. package/scripts/lib/drift-detector.js +545 -0
  642. package/scripts/lib/estado.js +124 -0
  643. package/scripts/lib/gestor-componentes.js +243 -0
  644. package/scripts/lib/gitignore-manifest.js +305 -0
  645. package/scripts/lib/graph-analyze.py +556 -0
  646. package/scripts/lib/graph-builder.py +485 -0
  647. package/scripts/lib/graph-cluster.py +259 -0
  648. package/scripts/lib/health-row.js +168 -0
  649. package/scripts/lib/hooks-settings.js +789 -0
  650. package/scripts/lib/manifiestos.js +138 -0
  651. package/scripts/lib/mc-client.js +137 -0
  652. package/scripts/lib/notificaciones-telegram.js +1107 -0
  653. package/scripts/lib/npm-version.js +261 -0
  654. package/scripts/lib/paquetes-conocidos.js +50 -0
  655. package/scripts/lib/preservar-usuario.js +586 -0
  656. package/scripts/lib/prompt-builder.js +264 -0
  657. package/scripts/lib/resolver-externo.js +332 -0
  658. package/scripts/lib/schedule-parser.js +305 -0
  659. package/scripts/lib/scoring-instintos.js +240 -0
  660. package/scripts/lib/seguridad.js +160 -0
  661. package/scripts/lib/selector-interactivo.js +152 -0
  662. package/scripts/lib/semantic-search.js +242 -0
  663. package/scripts/lib/skill-discovery.js +234 -0
  664. package/scripts/lib/skill-metrics.js +246 -0
  665. package/scripts/lib/skill-normalizer.js +112 -0
  666. package/scripts/lib/skills-hub.js +340 -0
  667. package/scripts/lib/span-schema.js +134 -0
  668. package/scripts/lib/tool-cost-analyzer.js +255 -0
  669. package/scripts/lib/tracing-processor-interface.js +286 -0
  670. package/scripts/lib/transformadores/base.js +80 -0
  671. package/scripts/lib/transformadores/claude.js +124 -0
  672. package/scripts/lib/transformadores/codex.js +115 -0
  673. package/scripts/lib/transformadores/copilot.js +106 -0
  674. package/scripts/lib/transformadores/gemini.js +74 -0
  675. package/scripts/lib/transformadores/index.js +35 -0
  676. package/scripts/lib/transformadores/opencode.js +75 -0
  677. package/scripts/lib/ui.js +259 -0
  678. package/scripts/limpiar-artefactos-python.js +131 -0
  679. package/scripts/mcp-orchestrator.py +386 -0
  680. package/scripts/mcp-pool-manager.py +352 -0
  681. package/scripts/mcp-telemetry.py +378 -0
  682. package/scripts/poblar-evolvable.js +226 -0
  683. package/scripts/publicar.js +287 -0
  684. package/scripts/reflect-skills.js +403 -0
  685. package/scripts/rotar-audit-logs.js +185 -0
  686. package/scripts/run-skill-evals.js +242 -0
  687. package/scripts/smoke-test.js +374 -0
  688. package/scripts/token-analysis.py +471 -0
  689. package/scripts/validar-manifest.js +195 -0
  690. package/scripts/validar-memoria.js +321 -0
  691. package/scripts/validar-tests-aislamiento.js +184 -0
  692. package/scripts/validar-tokens-test.js +208 -0
  693. package/scripts/validar.js +147 -0
  694. package/scripts/validate-markdown.py +339 -0
  695. package/scripts/validate-skills.py +385 -0
  696. package/scripts/vendor/claude-usage/README.md +116 -0
  697. package/scripts/vendor/claude-usage/cli.py +334 -0
  698. package/scripts/vendor/claude-usage/dashboard.py +795 -0
  699. package/scripts/vendor/claude-usage/scanner.py +467 -0
  700. package/scripts/vendor/markitdown/cli.py +194 -0
  701. package/scripts/verificar-evolucion.js +289 -0
  702. package/scripts/verificar-release.js +494 -0
@@ -0,0 +1,175 @@
1
+ ---
2
+ name: prevencion-racionalizacion
3
+ description: >
4
+ Patrones para prevenir que los agentes racionalicen atajos, salten procesos o
5
+ inventen excusas para no seguir el workflow. Incluye tabla de excusas comunes,
6
+ red flags de pensamiento y técnicas para construir skills resistentes a la
7
+ racionalización. Cargar al diseñar skills, al detectar agentes saltando procesos,
8
+ o al revisar por qué un agente no siguió un paso obligatorio.
9
+ herramientasPermitidas: [Read, Grep]
10
+ exclusiones:
11
+ - "No cargar para prevenir sobre-ingeniería o cambios fuera del scope — ese es `prevencion-sobreingenieria`; este skill trata racionalización de *omisión* de pasos obligatorios, no de *adición* innecesaria de complejidad."
12
+ - "No cargar para evaluar si un proceso fue seguido correctamente después de un incidente — eso es `verificar-trabajo` o revisión post-mortem; este skill sirve para diseñar skills resistentes a la evasión, no para auditoría post-hoc."
13
+ - "No cargar cuando el agente quiere omitir un paso que no está en la spec — en ese caso aplicar las 4 reglas de desviación del implementador; este skill aplica a pasos obligatorios ya documentados en un proceso."
14
+ - "No cargar si el skill o proceso a proteger aún no tiene los pasos definidos — las cláusulas anti-racionalización requieren un proceso existente sobre el cual construir las reglas 'sin excepciones'."
15
+ evolvable: true # default para skill estandar
16
+ ---
17
+ # Prevención de Racionalización en Agentes
18
+
19
+ La racionalización ocurre cuando un agente genera una justificación convincente
20
+ para no seguir un proceso que debería seguir. La justificación suena razonable.
21
+ Puede incluso ser técnicamente correcta en abstracto. Pero en el contexto específico,
22
+ es una excusa para tomar un atajo. El resultado es el mismo que si el proceso
23
+ no existiera: el trabajo queda incompleto o mal hecho.
24
+
25
+ ## Cuándo cargar este skill
26
+
27
+ Invoca `Skill("prevencion-racionalizacion")` cuando:
28
+
29
+ - Se diseña un skill nuevo y se quieren incluir cláusulas anti-racionalización
30
+ - Se detecta que un agente saltó un paso obligatorio con una justificación
31
+ - Se hace autoresearch de un skill que los agentes no siguen consistentemente
32
+ - Se revisa por qué un proceso falló en producción y la causa fue un atajo
33
+ - Se escribe la sección "Sin excepciones" de cualquier regla obligatoria
34
+
35
+ ## Qué es la racionalización en agentes AI
36
+
37
+ Un agente racionaliza cuando:
38
+ 1. Encuentra que seguir el proceso requiere esfuerzo adicional
39
+ 2. Genera una razón por la cual ese esfuerzo no es necesario en este caso
40
+ 3. Procede sin seguir el proceso, convencido de que la razón es válida
41
+
42
+ La diferencia con una excepción legítima es que la excepción legítima está
43
+ documentada en el proceso mismo. Si no está documentada, es racionalización.
44
+
45
+ ## Tabla de excusas comunes
46
+
47
+ | Excusa del agente | Realidad |
48
+ |---|---|
49
+ | "Es demasiado simple para necesitar diseño" | Hasta features simples se benefician de 5 minutos de diseño. La simplicidad percibida es subjetiva. |
50
+ | "Ya sé qué hacer, no necesito preguntar al usuario" | El usuario puede tener contexto crítico que el agente no tiene. Preguntar cuesta menos que reimplementar. |
51
+ | "Los tests no son necesarios para este cambio" | Todo cambio que modifica comportamiento necesita verificación. La excepción está en el proceso, no en el juicio del agente. |
52
+ | "Solo esta vez voy a saltar este paso" | "Solo esta vez" establece precedente. La próxima vez será más fácil justificarlo. |
53
+ | "El espíritu del proceso es lo que importa" | Si se viola la letra del proceso, se viola el espíritu. El proceso tiene la forma que tiene por razones concretas. |
54
+ | "Ya intenté 3 veces, debo cambiar de enfoque radicalmente" | 3 intentos fallidos con el mismo enfoque indican un problema de raíz, no de enfoque. Diagnosticar antes de cambiar. |
55
+ | "Este skill no aplica a mi situación" | Si hay 1% de probabilidad de que aplique, debe invocarse. El costo de invocar es bajo; el costo de no invocar cuando debía puede ser alto. |
56
+ | "El contexto es diferente aquí" | El proceso fue diseñado para contextos variados. Si el contexto genuinamente lo invalida, hay que documentarlo y escalar. |
57
+ | "El usuario no lo va a notar" | El usuario puede no notar ahora. Lo notará cuando el sistema falle de una forma que este paso prevenía. |
58
+ | "Voy a completarlo después" | "Después" no existe en el contexto de un agente. Si no se hace ahora, no se hace. |
59
+
60
+ ## Red flags de pensamiento
61
+
62
+ Cuando un agente produce cualquiera de estos patrones de pensamiento, debe detenerse
63
+ y aplicar el proceso completo:
64
+
65
+ - **"No necesito..."** — si existe un proceso para algo, se necesita. Demostrar con
66
+ evidencia del proceso mismo que no aplica, no con razonamiento propio.
67
+
68
+ - **"Esto es obvio..."** — lo obvio para el agente puede no serlo para el usuario
69
+ o para otro agente. Si es obvio, documentarlo cuesta poco. Si no es obvio, documentarlo
70
+ previene errores.
71
+
72
+ - **"Solo voy a..."** — el "solo" minimiza el impacto. Los cambios "solo" tienen
73
+ consecuencias que el agente no anticipó. Hacer el proceso completo.
74
+
75
+ - **"Dado el contexto, puedo saltar..."** — el proceso existe precisamente para
76
+ contextos específicos. Si el contexto justifica una excepción, la excepción debe
77
+ estar en el proceso. Si no está, no es una excepción, es una violación.
78
+
79
+ - **"Ya lo hice antes sin problema..."** — el éxito pasado no garantiza el éxito
80
+ futuro. Cada instancia del proceso es independiente.
81
+
82
+ - **"El agente anterior ya verificó esto..."** — cada agente es responsable de
83
+ verificar lo que afirma. La verificación de otro agente no es evidencia propia.
84
+
85
+ ## Principio fundamental
86
+
87
+ > Si hay 1% de probabilidad de que un skill aplique, DEBE invocarse.
88
+
89
+ El costo de invocar un skill innecesario es bajo: unos tokens extra de contexto.
90
+ El costo de no invocar un skill necesario puede ser alto: un bug en producción,
91
+ un requisito no implementado, una vulnerabilidad de seguridad.
92
+
93
+ La racionalización siempre infravalora el costo de no seguir el proceso y sobrevalora
94
+ el costo de seguirlo. Corregir ese sesgo sistemáticamente.
95
+
96
+ ## Cómo construir skills resistentes a la racionalización
97
+
98
+ Al diseñar o actualizar un skill, incluir estas secciones explícitas:
99
+
100
+ ### 1. Listar excusas específicas del dominio
101
+
102
+ No usar excusas genéricas. Investigar qué atajos específicos toman los agentes
103
+ en este dominio y documentarlos:
104
+
105
+ ```markdown
106
+ ## Excusas comunes en este dominio — y por qué son incorrectas
107
+
108
+ | Excusa | Por qué es incorrecta |
109
+ |---|---|
110
+ | [excusa específica 1] | [razón concreta] |
111
+ | [excusa específica 2] | [razón concreta] |
112
+ ```
113
+
114
+ ### 2. Agregar sección "Sin excepciones" explícita
115
+
116
+ ```markdown
117
+ ## Sin excepciones
118
+
119
+ Las siguientes reglas no tienen excepciones. Si el agente encuentra una razón
120
+ para no seguirlas, esa razón es racionalización, no una excepción legítima:
121
+
122
+ - [regla 1] — SIEMPRE, incluso si [excusa típica]
123
+ - [regla 2] — SIEMPRE, incluso si [excusa típica]
124
+
125
+ La única excepción legítima es que el proceso mismo la documente explícitamente.
126
+ ```
127
+
128
+ ### 3. Incluir red flags de pensamiento específicos
129
+
130
+ ```markdown
131
+ ## Señales de racionalización en este contexto
132
+
133
+ Detener y reiniciar el proceso si aparece cualquiera de estos pensamientos:
134
+ - "Este endpoint es demasiado simple para necesitar schema Pydantic"
135
+ - "Este test es obvio y no aporta valor"
136
+ - [red flag específico del dominio]
137
+ ```
138
+
139
+ ### 4. Documentar el costo de saltarse el proceso
140
+
141
+ Los agentes racionalizan mejor cuando no tienen visibilidad del costo real:
142
+
143
+ ```markdown
144
+ ## Qué pasa cuando se salta este proceso
145
+
146
+ - [consecuencia concreta 1 de saltarse el proceso]
147
+ - [consecuencia concreta 2]
148
+ ```
149
+
150
+ ## Checklist anti-racionalización
151
+
152
+ Al revisar si un agente siguió un proceso:
153
+
154
+ - [ ] El agente invocó todos los skills listados en la spec
155
+ - [ ] El agente ejecutó todos los pasos del protocolo, no solo los convenientes
156
+ - [ ] Si el agente se saltó un paso, la excepción está documentada en el proceso mismo
157
+ - [ ] No hubo "solo esta vez" ni "en este contexto particular"
158
+ - [ ] El agente reportó evidencia, no confianza
159
+
160
+ ## Cuándo NO cargar
161
+
162
+ - Se detecta que el agente está agregando abstracciones o código que nadie pidió — eso es sobre-ingeniería, no racionalización; cargar `prevencion-sobreingenieria`.
163
+ - El paso omitido no estaba documentado en el proceso — las cláusulas anti-racionalización protegen pasos explícitos; si el paso falta en la spec, primero definirlo y luego protegerlo.
164
+ - Se quiere auditar si un proceso específico fue ejecutado correctamente tras una sesión — eso es `verificar-trabajo`; este skill diseña skills resistentes a evasión futura, no valida ejecuciones pasadas.
165
+ - La causa del atajo fue un bug en el proceso, no una justificación del agente — en ese caso aplicar la Regla 1 (AUTO-FIX) del implementador; la racionalización requiere que el agente haya generado activamente una excusa.
166
+
167
+ ## Gotchas / Errores comunes no obvios
168
+
169
+ - **Cláusula "sin excepciones" tan absoluta que bloquea casos legítimos**: el agente no puede avanzar porque el proceso dice "SIEMPRE invocar X, sin excepción" pero hay un escenario técnico legítimo donde X no está disponible. Causa: las cláusulas anti-racionalización se redactaron sin documentar las excepciones reales del dominio. Solución: el proceso debe incluir las excepciones legítimas explícitamente — toda excepción no documentada es racionalización, pero toda excepción documentada en el proceso sí es válida; redactar las cláusulas como "SIEMPRE, salvo [excepción documentada aquí]".
170
+ - **Red flag "ya lo hice antes sin problema" usado para validar un atajo que efectivamente es correcto**: el agente tiene evidencia empírica real de que el paso puede omitirse en ese contexto específico. Causa: los red flags son señales de alerta, no prohibiciones absolutas. Solución: si el agente tiene evidencia de que un paso es innecesario en un contexto específico, la acción correcta es documentar la excepción en el proceso (Regla 2 AUTO-ADD del implementador), no ignorar el red flag ni proceder silenciosamente.
171
+ - **Tabla de excusas del dominio rellena con excusas genéricas del skill base**: el skill creado tiene como excusa de dominio "este skill no aplica a mi situación" en lugar de una excusa específica del dominio técnico. Causa: copiar la tabla de excusas genéricas sin adaptarla. Solución: las excusas de dominio deben ser observadas de la práctica real — revisar los logs de sesión donde el agente saltó el proceso para extraer las justificaciones reales que usó, no inventarlas a priori.
172
+ - **Usuario reporta "sigue fallando" tras un fix y el agente parcha el síntoma sin investigar causa raíz**: el agente aplica un segundo fix en la misma capa donde aplicó el primero, asumiendo que el primer fix estaba incompleto. En realidad, el bug está en una capa distinta (ej: se normaliza el input del formulario pero el bug real es que la consulta de deduplicación usa una columna cache stale; el tercer usuario reporta duplicados no por error de normalización, sino porque la comparación se hace contra `nombre_normalizado` en BD que fue calculado por una versión anterior de la función). Causa: el modelo mental del agente se ancla en la primera hipótesis — "es el normalizador" — y todos los fixes siguientes intentan mejorar el normalizador en lugar de cuestionar la hipótesis. Solución: cuando el usuario reporta "mismo síntoma tras fix", ejecutar **3 preguntas anti-anclaje** antes de tocar código: (1) ¿qué capa del sistema NO modifiqué en el primer fix?, (2) ¿hay estado persistido entre requests (BD, caché, sesión) que pueda tener valores calculados por la versión anterior del código?, (3) ¿el test que reproduce el bug empezaba con la BD limpia o con datos pre-existentes? Si (3) es "pre-existentes" y el fix no tocó esos datos, el bug probablemente está en la interacción entre el código nuevo y el estado viejo.
173
+
174
+ ---
175
+ *Skill creado con swl:crear-skill el 2026-03-31. Version 1.0.1 (+ Gotcha meta-aprendizaje 2026-04-20).*
@@ -0,0 +1,323 @@
1
+ ---
2
+ name: prevencion-sobreingenieria
3
+ description: >
4
+ Previene sobre-ingeniería y código innecesario en generación asistida por IA.
5
+ Cuatro principios: pensar antes de codificar, simplicidad primero, cambios
6
+ quirúrgicos y ejecución orientada a metas verificables. Cargar antes de
7
+ implementar features, refactorizar código o resolver bugs — especialmente
8
+ cuando el agente tiende a agregar abstracciones especulativas o tocar código
9
+ fuera del alcance solicitado.
10
+ version: "1.1.0"
11
+ evolved: true
12
+ evolved-from: "1.0.0"
13
+ evolved-at: "2026-04-24"
14
+ evolved-by: "aprender"
15
+ evolved-note: "Sección nueva: variables residuales post-refactor son code smell (F841 con ruff)"
16
+ herramientasPermitidas: [Read, Grep]
17
+ toolsRequeridos: Read, Grep, Glob
18
+ exclusiones:
19
+ - "No cargar cuando el agente omite pasos obligatorios del proceso — eso es racionalización, no sobre-ingeniería; cargar `prevencion-racionalizacion`."
20
+ - "No cargar para tasks one-liner obvias (fix de typo, rename de variable, one-shot de una línea) — el propio skill indica que la simplicidad aplica al proceso; añadir análisis de sobre-ingeniería a cambios triviales es en sí mismo sobre-ingeniería."
21
+ - "No cargar para auditar código ya existente en busca de complejidad acumulada — ese análisis es parte de `mapear-codebase` o `revisor-codigo-swl`; este skill guía la implementación en curso, no la auditoría de deuda técnica."
22
+ - "No cargar cuando la abstracción propuesta tiene 3 o más casos de uso concretos ya identificados — el criterio de 3 usos es el umbral del skill para justificar una abstracción; por encima de ese umbral, diseñarla es correcto."
23
+ evolvable: true # default para skill estandar
24
+ ---
25
+ # Prevención de sobre-ingeniería
26
+
27
+ Skill derivado de los principios de Andrej Karpathy sobre errores comunes de LLMs
28
+ al generar código, adaptado al ecosistema SWL.
29
+
30
+ ## Cuándo cargar
31
+
32
+ - Antes de implementar cualquier feature nueva con `implementador-swl` o `backend-*-swl`
33
+ - Cuando un agente tiende a agregar abstracciones que nadie pidió
34
+ - Al refactorizar código existente (riesgo de "mejorar" código adyacente)
35
+ - Cuando el usuario reporta que el agente "hace demasiado" o "cambia cosas que no debía"
36
+ - En revisiones de código donde se detecta complejidad innecesaria
37
+
38
+ ## Principio 1 — Pensar antes de codificar
39
+
40
+ Antes de escribir una sola línea, explicitar supuestos y resolver ambigüedades.
41
+
42
+ ### Reglas
43
+
44
+ 1. **Explicitar supuestos** — Si hay ambigüedad en la instrucción, preguntar. NUNCA
45
+ asumir silenciosamente qué quiso decir el usuario.
46
+ 2. **Presentar interpretaciones** — Si hay múltiples formas válidas de resolver el
47
+ problema, presentarlas brevemente y dejar que el usuario elija.
48
+ 3. **Surfacear tradeoffs** — Si la solución tiene consecuencias no obvias (performance,
49
+ complejidad, dependencias nuevas), mencionarlas antes de implementar.
50
+
51
+ ### Anti-patrón
52
+
53
+ ```python
54
+ # MAL — asume scope sin preguntar
55
+ def exportar_usuarios():
56
+ usuarios = db.query(Usuario).all()
57
+ csv = generar_csv(usuarios, campos=TODOS_LOS_CAMPOS)
58
+ enviar_email(admin, csv)
59
+ registrar_log_auditoria("export_usuarios")
60
+ return csv
61
+ # El usuario solo pidió "exportar usuarios" — ¿qué campos? ¿formato?
62
+ # ¿enviar email? ¿log de auditoría? Todo fue asumido.
63
+
64
+ # BIEN — clarifica antes de implementar
65
+ # Antes de implementar: ¿qué campos necesitas en el export?
66
+ # ¿Formato CSV o JSON? ¿Solo usuarios activos o todos?
67
+ # ¿Se requiere notificación o solo el archivo?
68
+ def exportar_usuarios(campos: list[str], solo_activos: bool = True) -> bytes:
69
+ query = db.query(Usuario)
70
+ if solo_activos:
71
+ query = query.filter(Usuario.es_activo == True)
72
+ return generar_csv(query.all(), campos=campos)
73
+ ```
74
+
75
+ ## Principio 2 — Simplicidad primero
76
+
77
+ El código más simple que resuelve el problema es el código correcto. Toda
78
+ complejidad adicional requiere justificación explícita.
79
+
80
+ ### Reglas
81
+
82
+ 1. **Código mínimo viable** — Escribir la solución más corta y clara que cumpla
83
+ el requisito. Si 200 líneas pueden ser 50, reescribir.
84
+ 2. **Sin abstracciones especulativas** — No crear interfaces, factories, strategies
85
+ ni patrones de diseño para un solo caso de uso. Tres usos concretos justifican
86
+ una abstracción; menos de tres, no.
87
+ 3. **Sin features fantasma** — No agregar configurabilidad, flags, parámetros
88
+ opcionales ni manejo de errores para escenarios que no existen hoy.
89
+ 4. **Sin error handling para lo imposible** — No validar que un parámetro interno
90
+ no sea null cuando el tipo lo garantiza. Validar solo en fronteras del sistema.
91
+
92
+ ### Anti-patrón
93
+
94
+ ```python
95
+ # MAL — Strategy pattern para un solo tipo de descuento
96
+ class DiscountStrategy(ABC):
97
+ @abstractmethod
98
+ def calculate(self, price: Decimal) -> Decimal: ...
99
+
100
+ class PercentageDiscount(DiscountStrategy):
101
+ def __init__(self, pct: Decimal):
102
+ self.pct = pct
103
+ def calculate(self, price: Decimal) -> Decimal:
104
+ return price * self.pct / 100
105
+
106
+ class DiscountFactory:
107
+ _strategies = {"percentage": PercentageDiscount}
108
+ @classmethod
109
+ def create(cls, type: str, **kwargs) -> DiscountStrategy:
110
+ return cls._strategies[type](**kwargs)
111
+
112
+ # BIEN — función directa para un solo caso de uso
113
+ def calcular_descuento(precio: Decimal, porcentaje: Decimal) -> Decimal:
114
+ return precio * porcentaje / 100
115
+ ```
116
+
117
+ ### Test de simplicidad
118
+
119
+ Antes de hacer commit, preguntar: *¿un ingeniero senior diría que esto está
120
+ sobre-complicado?* Si la respuesta es "sí" o "tal vez", simplificar.
121
+
122
+ ## Principio 3 — Cambios quirúrgicos
123
+
124
+ Solo tocar el código que la tarea requiere. Cada línea cambiada debe trazar
125
+ directamente al requisito del usuario.
126
+
127
+ ### Reglas
128
+
129
+ 1. **No "mejorar" código adyacente** — Si el usuario pide corregir un bug en la
130
+ función A, no renombrar variables en la función B ni agregar type hints en C.
131
+ 2. **No refactorizar de oportunidad** — Si el código existente funciona y no es
132
+ parte del cambio, dejarlo. Aunque "podría ser mejor".
133
+ 3. **Respetar estilo existente** — Si el archivo usa comillas simples, usar comillas
134
+ simples. Si usa tabs, usar tabs. Incluso si preferirías otro estilo.
135
+ 4. **Solo eliminar lo que tu cambio hizo innecesario** — Si tu cambio hace que un
136
+ import quede sin uso, elimínalo. Pero no eliminar imports que ya estaban sin uso
137
+ antes de tu cambio.
138
+
139
+ ### Anti-patrón
140
+
141
+ ```python
142
+ # Tarea: "corregir el cálculo de IVA cuando la tasa es 0%"
143
+
144
+ # MAL — corrige el bug Y además "mejora" cosas que no le pidieron
145
+ def calcular_impuestos(
146
+ precio: Decimal, # type hint agregado (no pedido)
147
+ tasa: float,
148
+ ) -> Decimal: # return type agregado (no pedido)
149
+ """Calcula impuestos sobre el precio.""" # docstring agregado (no pedido)
150
+ if tasa == 0:
151
+ return Decimal("0") # ← este es el fix real
152
+ return precio * Decimal(str(tasa)) # refactorizado sin necesidad
153
+
154
+ # BIEN — solo el fix necesario
155
+ def calcular_impuestos(precio, tasa):
156
+ if tasa == 0:
157
+ return Decimal("0") # fix: evitar multiplicación innecesaria con tasa 0
158
+ return precio * Decimal(str(tasa))
159
+ ```
160
+
161
+ ### Test quirúrgico
162
+
163
+ Revisar el diff antes del commit: *¿cada línea cambiada es directamente necesaria
164
+ para cumplir lo que el usuario pidió?* Si hay líneas que no pasan este test,
165
+ revertirlas.
166
+
167
+ ## Principio 4 — Ejecución orientada a metas
168
+
169
+ Transformar instrucciones vagas en criterios de éxito verificables antes de
170
+ implementar.
171
+
172
+ ### Reglas
173
+
174
+ 1. **Definir criterio de éxito** — Antes de implementar, declarar qué significa
175
+ "terminado" en términos verificables (tests que pasan, comportamiento observable).
176
+ 2. **Plan breve con verificación** — Para tareas multi-paso, declarar los pasos
177
+ y cómo se verifica cada uno.
178
+ 3. **Test primero para bugs** — Al corregir un bug, escribir primero el test que
179
+ lo reproduce. Verificar que falla. Luego corregir. Verificar que pasa.
180
+
181
+ ### Plantillas de transformación
182
+
183
+ | Instrucción vaga | Meta verificable |
184
+ |---|---|
185
+ | "Agregar validación" | Escribir tests de inputs inválidos → hacerlos pasar |
186
+ | "Corregir el bug" | Escribir test que reproduce el bug → hacerlo pasar |
187
+ | "Refactorizar X" | Tests existentes pasan antes Y después del cambio |
188
+ | "Hacerlo más rápido" | Definir métrica (p95 latencia) + baseline + objetivo |
189
+ | "Mejorar la autenticación" | Definir qué problema específico resolver primero |
190
+
191
+ ### Anti-patrón
192
+
193
+ ```markdown
194
+ # MAL — plan vago sin verificación
195
+ 1. Revisar el sistema de autenticación
196
+ 2. Identificar problemas
197
+ 3. Implementar mejoras
198
+ 4. Probar
199
+
200
+ # BIEN — meta concreta con verificación por paso
201
+ Meta: las sesiones se invalidan al cambiar contraseña.
202
+ 1. Test: cambiar contraseña → sesión anterior rechazada (FAIL esperado)
203
+ 2. Implementar invalidación de sesiones en cambio de contraseña
204
+ 3. Verificar: test anterior PASA
205
+ 4. Verificar: login con nueva contraseña funciona (sin regresión)
206
+ ```
207
+
208
+ ## Resumen de señales de alerta
209
+
210
+ | Señal | Problema | Acción |
211
+ |---|---|---|
212
+ | Se necesita "y" para describir el cambio | Múltiples cambios en uno | Dividir en commits separados |
213
+ | Clase con 1 solo uso | Abstracción prematura | Reemplazar con función |
214
+ | Parámetro `**kwargs` "por flexibilidad" | Feature fantasma | Parámetros explícitos |
215
+ | `try/except` para error que nunca ocurre | Manejo defensivo excesivo | Eliminar |
216
+ | Se modificaron archivos fuera del scope | Cambio no quirúrgico | Revertir extras |
217
+ | "Aproveché para mejorar…" | Refactor de oportunidad | Commit separado o no hacerlo |
218
+ | `if config.get("feature_x", False)` | Feature flag prematuro | Código directo |
219
+
220
+ ## Calibración: cuándo NO aplicar rigor completo
221
+
222
+ Estos principios sesgan hacia cautela sobre velocidad. Para tareas triviales
223
+ (fix de typo, one-liner obvio, rename de variable), usar criterio. No toda línea
224
+ de código requiere análisis profundo. La simplicidad también aplica al proceso.
225
+
226
+ ## Cuándo NO cargar
227
+
228
+ - El agente omite un paso obligatorio del proceso con una justificación — eso es racionalización, no sobre-ingeniería; cargar `prevencion-racionalizacion`.
229
+ - La tarea es un fix de typo, rename de variable u otro one-liner obvio — el análisis completo de los 4 principios no compensa; el propio skill reconoce que "la simplicidad también aplica al proceso".
230
+ - El objetivo es identificar complejidad acumulada en código heredado — ese análisis es parte de `mapear-codebase` (Paso 5: deuda técnica) o de una revisión de código; este skill previene sobre-ingeniería durante la implementación, no la audita después.
231
+ - La abstracción ya tiene 3 o más casos de uso concretos identificados — el umbral del skill para justificar una abstracción es 3 usos; si ya se cumplen, diseñar la interfaz es correcto y este skill no agrega restricciones.
232
+
233
+ ## Gotchas / Errores comunes no obvios
234
+
235
+ - **Test quirúrgico fallado porque el diff incluye cambios de formato automático del linter**: el agente revisa el diff antes del commit y ve líneas reformateadas por `black` o `prettier` que no estaban en el scope. Causa: el linter se ejecuta sobre archivos tocados y formatea líneas adyacentes al cambio real. Solución: distinguir entre cambios del agente y cambios del formateador automático — si el formateador era parte del flujo pre-commit, las líneas de formato no cuentan como cambios fuera del scope; si no era parte del flujo, revertir el formato y solo incluir el cambio mínimo.
236
+ - **Principio de "no mejorar código adyacente" interpretado como prohibición de agregar type hints al código que se modifica**: el agente corrige un bug pero no actualiza el type hint del parámetro que cambió de tipo. Causa: generalizar la regla de "no tocar lo adyacente" a partes del código que sí deben actualizarse como parte del fix. Solución: la regla aplica a código que no necesita cambiar; un type hint incorrecto *después del cambio* es parte del fix, no una mejora de oportunidad.
237
+ - **Principio 1 (clarificar antes de implementar) aplicado a tareas que ya tienen spec completa**: el agente pregunta por decisiones que ya están documentadas en el PLAN.md aprobado. Causa: no leer la spec antes de preguntar. Solución: el Principio 1 aplica cuando hay ambigüedad real después de leer el PLAN.md, CLAUDE.md y los archivos relevantes — si la respuesta está en los documentos ya leídos, preguntar es sobreingeniería del proceso, no clarificación.
238
+ - **Criterio de 3 usos para abstracciones aplicado a tipos (interfaces/protocolos)**: el agente no crea una interfaz para un tipo que se usa en un solo lugar. Causa: confundir "3 usos para abstracciones de comportamiento" con "3 usos para tipos". Solución: el criterio de 3 usos aplica a factories, strategies, y patrones de comportamiento especulativos; una interfaz TypeScript o un Protocol Python que define un contrato usado una vez puede ser la solución correcta si el tipo es el boundary entre módulos.
239
+
240
+ ---
241
+
242
+ ## Variables residuales post-refactor son code smell
243
+
244
+ ### Regla
245
+
246
+ Variables asignadas pero no usadas (F841 en ruff/flake8) **post-refactor** son
247
+ casi siempre residuos de una versión anterior del código que el refactor no
248
+ limpió. Se parecen a "variables temporales del desarrollador" pero delatan un
249
+ refactor incompleto — la lógica que las usaba se movió o eliminó, pero las
250
+ asignaciones quedaron.
251
+
252
+ ### Por qué son peligrosas
253
+
254
+ - **Confunden al próximo lector**: asumirá que la variable se usa más abajo.
255
+ - **Inflan el diff cognitivo** del refactor real.
256
+ - **Ocultan bugs sutiles**: el valor asignado puede tener side effects (llamada
257
+ a función costosa o con efecto en estado) que ya no aporta nada al flujo.
258
+ - **Invalidan la métrica de cobertura**: líneas "cubiertas" por tests que en
259
+ realidad no afectan el resultado.
260
+
261
+ ### Patrón operativo
262
+
263
+ Después de **cualquier refactor** que modifique el flujo de una función (extraer
264
+ método, inlinear función, cambiar el shape de un return), correr:
265
+
266
+ ```bash
267
+ ruff check --select=F841 ruta/al/modulo.py
268
+ # o para todo el proyecto
269
+ ruff check --select=F841 .
270
+ ```
271
+
272
+ Cada F841 detectado post-refactor es candidato 1 de 2:
273
+
274
+ 1. **Variable muerta** (caso común post-refactor): eliminarla.
275
+ 2. **Variable viva pero mal nombrada** (caso raro): si el valor se usa como
276
+ side effect intencional (ej: evaluar una propiedad para cachear), renombrar
277
+ con prefijo `_` y comentar el propósito.
278
+
279
+ ### Anti-patrón típico
280
+
281
+ ```python
282
+ # Antes del refactor: había un if que usaba exito_key
283
+ def procesar(data):
284
+ exito, exito_key = intentar(data)
285
+ if exito_key == "via_rapida":
286
+ return procesar_rapido(data)
287
+ return procesar_normal(data, exito_key)
288
+
289
+
290
+ # Después de refactor que eliminó la rama "via_rapida"
291
+ def procesar(data):
292
+ exito, exito_key = intentar(data) # ← F841: exito_key asignado, no usado
293
+ return procesar_normal(data) # ← también exito residual
294
+ ```
295
+
296
+ ### Patrón canónico
297
+
298
+ ```python
299
+ # Post-refactor limpio
300
+ def procesar(data):
301
+ _ = intentar(data) # si el side effect de intentar() importa
302
+ return procesar_normal(data)
303
+
304
+ # o mejor: si ni siquiera el side effect importa
305
+ def procesar(data):
306
+ return procesar_normal(data)
307
+ ```
308
+
309
+ ### Reglas
310
+
311
+ - **Gate pre-commit**: agregar `ruff check --select=F841` al pre-commit hook del proyecto. No bloquea en un repo grande donde F841 preexiste, pero sí bloquea en los archivos modificados por el commit actual.
312
+ - **Revisión explícita post-refactor grande**: tras extraer 5+ métodos o mover 5+ bloques, correr `ruff --select=F401,F841` sobre los archivos tocados.
313
+ - **NO silenciar con `# noqa: F841` sin justificación** — la excepción legítima (side effect intencional con nombre `_`) es tan rara que vale la pena documentarla; silenciar sin comentario es ocultar deuda.
314
+ - **Incluir en checklist de PR**: "F841 limpio en archivos tocados" como item explícito.
315
+
316
+ ### Aplicabilidad
317
+
318
+ Detectable en:
319
+
320
+ - Python: `ruff --select=F841`, `flake8 --select=F841`.
321
+ - TypeScript/JavaScript: `eslint --rule 'no-unused-vars: error'`.
322
+ - Go: el compilador lo hace obligatorio (`declared but not used`).
323
+ - Rust: warning `unused_variables`, promovido a error con `#![deny(unused_variables)]`.
@@ -0,0 +1,141 @@
1
+ ---
2
+ name: privacy-memoria
3
+ description: >
4
+ Sistema de privacidad para la memoria SWL: tags <private>, filtrado de contenido
5
+ sensible, y mejores prácticas para proteger datos en aprendizajes y sesiones.
6
+ Cargar cuando se trabaje con datos sensibles, se configure el sistema de memoria
7
+ o se implementen componentes que lean/escriban APRENDIZAJES.md o session-store.
8
+ herramientasPermitidas: [Read, Write]
9
+ evolvable: false # bloqueado por lista (skill de seguridad/privacidad)
10
+ nist_csf: [GV.OV-01, PR.DS-01, PR.DS-02, DE.CM-09]
11
+ nist_ai_rmf: [GOVERN-1.2, MAP-4.1, MANAGE-4.1]
12
+ atlas_techniques: [AML.T0048]
13
+ exclusiones:
14
+ - "No cargar para privacidad en esquemas de base de datos (columnas cifradas, tokenización, GDPR en modelos) — para diseño de privacidad en persistencia cargar `postgresql-experto` o `dbml-experto`."
15
+ - "No cargar para cumplimiento regulatorio formal (GDPR, HIPAA, LFPDPPP) — la evaluación regulatoria requiere `threat-model-lite` combinado con asesoría legal externa, no tags de memoria."
16
+ - "No cargar para cifrado en tránsito (TLS, mTLS, cifrado de payloads entre servicios) o gestión de claves — para transporte cifrado y rotación de credenciales cargar `iam-secretos`."
17
+ - "No cargar para escaneo de credenciales hardcodeadas en código fuente — para secretos en source cargar `checklist-seguridad` y el hook `escaneo-secretos`; los tags `<private>` no sustituyen la detección estática."
18
+ ---
19
+ # Privacy Tags y Filtrado de Memoria
20
+
21
+ ## Cuándo cargar
22
+
23
+ - Implementar o modificar hooks que lean/escriban `APRENDIZAJES.md`
24
+ - Configurar `session-store.js` o `inyeccion-contexto.js`
25
+ - Trabajar con datos que puedan contener PII, credenciales o información confidencial
26
+ - Revisar que aprendizajes capturados no filtren información privada
27
+
28
+ ## Cuándo NO cargar
29
+
30
+ - El diseño es de privacidad a nivel de base de datos (columnas cifradas, tokenización, políticas de retención en tablas): cargar `postgresql-experto` o `dbml-experto`. Los tags `<private>` operan sobre la capa de memoria de agentes (APRENDIZAJES.md, session-store), no sobre datos en reposo en BD.
31
+ - La tarea es cumplimiento regulatorio formal (GDPR, HIPAA, LFPDPPP): los tags son un mecanismo de higiene interna, no un control de cumplimiento. Cargar `threat-model-lite` y consultar asesoría legal externa para el marco regulatorio aplicable.
32
+ - La necesidad es cifrado en tránsito o gestión de claves (TLS, rotación de tokens, mTLS entre servicios): cargar `iam-secretos`. Este skill no cubre transporte ni criptografía.
33
+ - La búsqueda es de credenciales hardcodeadas en código fuente: los tags `<private>` no protegen código — cargar `checklist-seguridad` (A02) y confiar en el hook `escaneo-secretos`. Los tags son una capa de conveniencia para aprendizajes, no de seguridad real.
34
+
35
+ ---
36
+
37
+ ## Tags de privacidad disponibles
38
+
39
+ Envuelve contenido sensible en cualquiera de estos tags para excluirlo del
40
+ almacenamiento de aprendizajes y sesiones:
41
+
42
+ ```
43
+ <private>contenido que no debe persistir</private>
44
+ <secreto>credenciales temporales, tokens de API</secreto>
45
+ <privado>datos personales, PII</privado>
46
+ ```
47
+
48
+ Los tres tags son equivalentes en comportamiento. Usar el que sea más legible
49
+ en el contexto: `<private>` en código predominantemente en inglés, `<secreto>`
50
+ o `<privado>` en contextos en español.
51
+
52
+ ---
53
+
54
+ ## Donde aplica el filtrado
55
+
56
+ El módulo `hooks/lib/privacy-filter.js` expone `filtrarPrivacidad()` y debe
57
+ invocarse en estos puntos del pipeline antes de escribir a disco o memoria:
58
+
59
+ | Componente | Punto de filtrado |
60
+ |-----------|------------------|
61
+ | `extraccion-aprendizajes.js` | Antes de escribir en `APRENDIZAJES.md` |
62
+ | `inyeccion-contexto.js` | Antes de inyectar contexto en nueva sesión |
63
+ | `session-store.js` | Antes de persistir el summary de sesión |
64
+
65
+ Patrón de uso en hooks:
66
+
67
+ ```js
68
+ const { filtrarPrivacidad, contieneTagsPrivados } = require('./lib/privacy-filter');
69
+
70
+ // Antes de persistir
71
+ const { textoFiltrado, tagsRemovidos } = filtrarPrivacidad(textoOriginal);
72
+ if (tagsRemovidos > 0) {
73
+ // Opcional: loguear cuántos bloques privados se removieron
74
+ }
75
+ // Usar textoFiltrado en lugar de textoOriginal
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Qué NO cubre este sistema
81
+
82
+ - **Código fuente con credenciales**: usar `escaneo-secretos.js` (hook PreToolUse)
83
+ - **Variables de entorno**: usar `escaneo-secretos.js` con patrones de `.env`
84
+ - **Archivos binarios o imágenes con datos sensibles**: no hay soporte de tags en binarios
85
+ - **Datos sensibles en rutas de archivos**: usar la regla `cloud-infra.md` para secretos en IaC
86
+
87
+ ---
88
+
89
+ ## Limite de seguridad (ReDoS prevention)
90
+
91
+ El módulo tiene un límite de `MAX_TAGS = 100` tags por texto procesado. Si un
92
+ texto supera ese límite, los tags restantes quedan sin procesar (no se filtran).
93
+
94
+ Este límite previene ataques de denegación de servicio via texto con miles de
95
+ tags anidados o mal formados. Para textos legítimos el límite no debería alcanzarse.
96
+
97
+ ---
98
+
99
+ ## Reglas obligatorias
100
+
101
+ 1. **Nunca depender solo de tags para seguridad de secretos reales.** Los tags
102
+ son una capa de conveniencia para aprendizajes; las credenciales de producción
103
+ van en variables de entorno o gestores de secretos.
104
+
105
+ 2. **Tags anidados no están soportados.** `<private><secreto>x</secreto></private>`
106
+ puede comportarse de forma inesperada. Usar un solo nivel de tag.
107
+
108
+ 3. **Tags malformados se ignoran silenciosamente.** `<private>texto sin cierre`
109
+ no se filtra. Verificar que el tag de cierre existe si el contenido es crítico.
110
+
111
+ 4. **El filtrado es case-sensitive en los tags.** `<PRIVATE>` no se filtra.
112
+ Siempre usar minúsculas: `<private>`, `<secreto>`, `<privado>`.
113
+
114
+ ---
115
+
116
+ ## Gotchas / Errores comunes no obvios
117
+
118
+ - **Confiar en tags `<private>` para proteger credenciales reales de producción**: el filtrado se aplica solo en puntos específicos del pipeline de memoria (APRENDIZAJES.md, session-store, inyección de contexto) y no sustituye la gestión de secretos. Causa: los tags son una capa de conveniencia para aprendizajes, no un control de seguridad — un `DATABASE_URL` envuelto en `<secreto>` sigue estando en memoria del proceso y en logs intermedios. Solución: credenciales de producción van en variables de entorno o gestores de secretos (Vault, AWS Secrets Manager); los tags solo marcan contenido transitorio de sesión que no debe persistirse en aprendizajes.
119
+ - **Asumir que el filtrado es automático**: escribir a APRENDIZAJES.md sin invocar `filtrarPrivacidad()` explícitamente deja tags sin procesar en el archivo persistido. Causa: el módulo `hooks/lib/privacy-filter.js` expone la función pero no intercepta escrituras — cada hook debe llamarla explícitamente antes de `fs.writeFileSync` o equivalente. Solución: antes de persistir cualquier texto que pueda contener tags, invocar `const { textoFiltrado } = filtrarPrivacidad(textoOriginal)` y usar `textoFiltrado`; revisar que los hooks listados en la tabla "Donde aplica el filtrado" invocan la función.
120
+ - **Anidar tags esperando filtrado recursivo**: escribir `<private>contexto <secreto>token</secreto> mas contexto</private>` puede comportarse de forma inesperada, dejando el contenido anidado sin filtrar o rompiendo la estructura. Causa: los tags anidados no están soportados en el parser actual; procesar recursivamente expone el riesgo de parsing ambiguo. Solución: usar un solo nivel de tag por bloque; si hace falta marcar varios tipos de sensibilidad, separar en bloques independientes consecutivos.
121
+ - **Usar mayúsculas en los tags**: `<PRIVATE>contenido</PRIVATE>` no se filtra y el contenido se persiste en claro. Causa: el filtrado es case-sensitive por diseño (evita costo de regex case-insensitive sobre textos largos). Solución: siempre minúsculas `<private>`, `<secreto>`, `<privado>`; si el tag debe aparecer en un contexto de plantilla en inglés que exige mayúsculas, cambiar el contexto, no el tag.
122
+ - **Dejar tags malformados sin cierre**: `<private>texto sin cierre` se ignora silenciosamente y el contenido queda visible en el archivo persistido. Causa: el parser exige tag de cierre; contenido con apertura sin cierre se trata como texto literal, no como bloque privado. Solución: verificar siempre el tag de cierre antes de escribir contenido crítico; si se genera texto programáticamente, validar balance de tags antes de enviar a `filtrarPrivacidad()`.
123
+
124
+ ---
125
+
126
+ ## Anti-patrones
127
+
128
+ ```
129
+ # MAL: usar tags para ocultar credenciales reales de producción
130
+ DATABASE_URL=<secreto>postgresql://prod:realpassword@host/db</secreto>
131
+
132
+ # MAL: tag anidado
133
+ <private>contexto <secreto>token</secreto> mas contexto</private>
134
+
135
+ # MAL: confiar en el filtrado si el hook no lo invoca explícitamente
136
+ # (el filtrado NO es automático, requiere llamada explícita a filtrarPrivacidad())
137
+
138
+ # BIEN: marcar información de sesión que no debe aprenderse
139
+ Durante la sesión use <private>el token temporal X para la API de staging</private>
140
+ El patrón que aprendí fue: siempre validar el schema antes de persistir.
141
+ ```