@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,441 @@
1
+ # Accesibilidad A11y — Ejemplos Completos y Checklist
2
+
3
+ Referencia extendida con todos los ejemplos de código y checklist detallado.
4
+
5
+ ---
6
+
7
+ ## Elementos Semánticos HTML5
8
+
9
+ ```html
10
+ <!-- MAL: divs para todo, sin semántica -->
11
+ <div class="header">
12
+ <div class="nav">...</div>
13
+ </div>
14
+ <div class="content">
15
+ <div class="article">...</div>
16
+ <div class="sidebar">...</div>
17
+ </div>
18
+ <div class="footer">...</div>
19
+
20
+ <!-- BIEN: elementos semánticos correctos -->
21
+ <header>
22
+ <nav aria-label="Navegación principal">...</nav>
23
+ </header>
24
+ <main>
25
+ <article>...</article>
26
+ <aside aria-label="Información complementaria">...</aside>
27
+ </main>
28
+ <footer>...</footer>
29
+ ```
30
+
31
+ ## Landmarks y Skip Link
32
+
33
+ ```html
34
+ <!-- Cada página DEBE tener exactamente un <main> -->
35
+ <main id="contenido-principal">
36
+ <!-- Contenido primario -->
37
+ </main>
38
+
39
+ <!-- Skip link OBLIGATORIO — primer elemento enfocable -->
40
+ <a href="#contenido-principal" class="skip-link">
41
+ Saltar al contenido principal
42
+ </a>
43
+
44
+ <!-- CSS para el skip link -->
45
+ <style>
46
+ .skip-link {
47
+ position: absolute;
48
+ top: -40px;
49
+ left: 0;
50
+ background: #005fcc;
51
+ color: white;
52
+ padding: 8px;
53
+ z-index: 100;
54
+ transition: top 0.2s;
55
+ }
56
+ .skip-link:focus {
57
+ top: 0; /* Visible solo al enfocar con teclado */
58
+ }
59
+ </style>
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Atributos ARIA — Ejemplos Extendidos
65
+
66
+ ### aria-label vs aria-labelledby vs aria-describedby
67
+
68
+ ```html
69
+ <!-- aria-label: cuando no hay texto visible -->
70
+ <button aria-label="Cerrar diálogo de confirmación">
71
+ <svg aria-hidden="true"><!-- ícono X --></svg>
72
+ </button>
73
+
74
+ <!-- aria-labelledby: referenciar texto existente en el DOM -->
75
+ <h2 id="titulo-modal">Confirmar eliminación</h2>
76
+ <dialog aria-labelledby="titulo-modal">
77
+ <!-- El título del diálogo describe el modal -->
78
+ </dialog>
79
+
80
+ <!-- aria-describedby: información adicional (no el nombre) -->
81
+ <input
82
+ id="email"
83
+ type="email"
84
+ aria-describedby="email-hint email-error"
85
+ />
86
+ <span id="email-hint">Usa tu correo corporativo @empresa.com.mx</span>
87
+ <span id="email-error" role="alert" aria-live="polite"></span>
88
+ ```
89
+
90
+ ### Estados y propiedades ARIA comunes
91
+
92
+ ```html
93
+ <!-- Menú expandible -->
94
+ <button
95
+ aria-expanded="false"
96
+ aria-controls="menu-opciones"
97
+ id="btn-menu"
98
+ >
99
+ Opciones
100
+ </button>
101
+ <ul id="menu-opciones" aria-labelledby="btn-menu" hidden>
102
+ <li><a href="/perfil">Mi perfil</a></li>
103
+ <li><a href="/salir">Cerrar sesión</a></li>
104
+ </ul>
105
+
106
+ <!-- Pestañas (tabs) -->
107
+ <div role="tablist" aria-label="Secciones del expediente">
108
+ <button
109
+ role="tab"
110
+ aria-selected="true"
111
+ aria-controls="panel-datos"
112
+ id="tab-datos"
113
+ >Datos generales</button>
114
+ <button
115
+ role="tab"
116
+ aria-selected="false"
117
+ aria-controls="panel-documentos"
118
+ id="tab-docs"
119
+ tabindex="-1"
120
+ >Documentos</button>
121
+ </div>
122
+ <div role="tabpanel" id="panel-datos" aria-labelledby="tab-datos">...</div>
123
+ <div role="tabpanel" id="panel-documentos" aria-labelledby="tab-docs" hidden>...</div>
124
+
125
+ <!-- Notificaciones en vivo -->
126
+ <div aria-live="polite" aria-atomic="true" class="sr-only" id="notificacion">
127
+ <!-- El lector anuncia cambios en este div automáticamente -->
128
+ </div>
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Contraste de Color — Ejemplos CSS
134
+
135
+ ```css
136
+ /* MAL: contraste insuficiente */
137
+ .texto-secundario {
138
+ color: #999999; /* sobre #ffffff = ratio 2.85:1 — FALLA */
139
+ background: #ffffff;
140
+ }
141
+
142
+ /* BIEN: contraste suficiente */
143
+ .texto-secundario {
144
+ color: #767676; /* sobre #ffffff = ratio 4.54:1 — PASA AA */
145
+ background: #ffffff;
146
+ }
147
+
148
+ /* MAL: información solo por color (daltonismo) */
149
+ .error { color: red; }
150
+ .exito { color: green; }
151
+
152
+ /* BIEN: color + ícono/texto descriptivo */
153
+ .error {
154
+ color: #d32f2f;
155
+ background: #fdecea;
156
+ border-left: 4px solid #d32f2f;
157
+ }
158
+ .error::before {
159
+ content: "✗ Error: "; /* texto descriptivo adicional */
160
+ }
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Navegación por Teclado — Ejemplos Completos
166
+
167
+ ### Orden de foco
168
+
169
+ ```html
170
+ <!-- MAL: tabindex positivos crean orden artificial y frágil -->
171
+ <input tabindex="3" name="apellido" />
172
+ <input tabindex="1" name="nombre" />
173
+ <input tabindex="2" name="email" />
174
+
175
+ <!-- BIEN: orden natural del DOM + tabindex="0" solo si necesario -->
176
+ <input name="nombre" />
177
+ <input name="apellido" />
178
+ <input name="email" />
179
+
180
+ <!-- tabindex="-1": enfocable por JavaScript, no por teclado -->
181
+ <div id="mensaje-error" tabindex="-1">Error al guardar</div>
182
+ <script>
183
+ document.getElementById('mensaje-error').focus();
184
+ </script>
185
+ ```
186
+
187
+ ### Gestión de foco en modales
188
+
189
+ ```javascript
190
+ // Trampa de foco — OBLIGATORIA en diálogos modales
191
+ function trapFocus(modal) {
192
+ const focusables = modal.querySelectorAll(
193
+ 'a[href], button:not([disabled]), input:not([disabled]), ' +
194
+ 'select:not([disabled]), textarea:not([disabled]), [tabindex="0"]'
195
+ );
196
+ const first = focusables[0];
197
+ const last = focusables[focusables.length - 1];
198
+
199
+ modal.addEventListener('keydown', (e) => {
200
+ if (e.key !== 'Tab') return;
201
+ if (e.shiftKey) {
202
+ if (document.activeElement === first) {
203
+ e.preventDefault();
204
+ last.focus();
205
+ }
206
+ } else {
207
+ if (document.activeElement === last) {
208
+ e.preventDefault();
209
+ first.focus();
210
+ }
211
+ }
212
+ });
213
+
214
+ first.focus();
215
+ }
216
+
217
+ let triggerAnterior;
218
+ function abrirModal(modal, trigger) {
219
+ triggerAnterior = trigger;
220
+ modal.removeAttribute('hidden');
221
+ trapFocus(modal);
222
+ }
223
+
224
+ function cerrarModal(modal) {
225
+ modal.setAttribute('hidden', '');
226
+ triggerAnterior?.focus();
227
+ }
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Formularios Accesibles — Ejemplos Completos
233
+
234
+ ### Mensajes de error accesibles
235
+
236
+ ```html
237
+ <!-- BIEN: error asociado al input + role="alert" -->
238
+ <div>
239
+ <label for="correo">Correo electrónico</label>
240
+ <input
241
+ type="email"
242
+ id="correo"
243
+ name="correo"
244
+ aria-invalid="true"
245
+ aria-describedby="correo-error"
246
+ aria-required="true"
247
+ />
248
+ <span id="correo-error" role="alert">
249
+ El formato del correo no es válido. Ejemplo: usuario@empresa.com.mx
250
+ </span>
251
+ </div>
252
+ ```
253
+
254
+ ### Grupos de controles relacionados
255
+
256
+ ```html
257
+ <fieldset>
258
+ <legend>Tipo de contrato</legend>
259
+ <label>
260
+ <input type="radio" name="contrato" value="base" /> Base
261
+ </label>
262
+ <label>
263
+ <input type="radio" name="contrato" value="confianza" /> Confianza
264
+ </label>
265
+ <label>
266
+ <input type="radio" name="contrato" value="honorarios" /> Honorarios
267
+ </label>
268
+ </fieldset>
269
+ ```
270
+
271
+ ---
272
+
273
+ ## Tablas Accesibles
274
+
275
+ ```html
276
+ <!-- BIEN: tabla de datos completa -->
277
+ <table>
278
+ <caption>
279
+ Nómina quincenal — Enero 2026
280
+ <details>
281
+ <summary>Descripción de la tabla</summary>
282
+ Lista de empleados con su sueldo bruto para la quincena del 1 al 15 de enero.
283
+ </details>
284
+ </caption>
285
+ <thead>
286
+ <tr>
287
+ <th scope="col">Nombre</th>
288
+ <th scope="col">Apellido</th>
289
+ <th scope="col">Sueldo bruto</th>
290
+ </tr>
291
+ </thead>
292
+ <tbody>
293
+ <tr>
294
+ <td>Juan</td>
295
+ <td>Pérez</td>
296
+ <td>$50,000.00</td>
297
+ </tr>
298
+ </tbody>
299
+ </table>
300
+
301
+ <!-- Tablas complejas con headers múltiples -->
302
+ <table>
303
+ <tr>
304
+ <th id="nombre" scope="col">Nombre</th>
305
+ <th id="q1" scope="col">Q1</th>
306
+ <th id="q2" scope="col">Q2</th>
307
+ </tr>
308
+ <tr>
309
+ <td headers="nombre">Saúl</td>
310
+ <td headers="nombre q1">$10,000</td>
311
+ <td headers="nombre q2">$12,000</td>
312
+ </tr>
313
+ </table>
314
+ ```
315
+
316
+ ---
317
+
318
+ ## Imágenes y Multimedia
319
+
320
+ ```html
321
+ <!-- BIEN: alt descriptivo para imágenes informativas -->
322
+ <img
323
+ src="grafica-ventas.png"
324
+ alt="Gráfica de barras: ventas Q1=$500K, Q2=$750K, Q3=$600K, Q4=$900K"
325
+ />
326
+
327
+ <!-- BIEN: alt vacío para imágenes decorativas -->
328
+ <img src="separador-decorativo.png" alt="" role="presentation" />
329
+
330
+ <!-- BIEN: SVG accesible -->
331
+ <svg role="img" aria-labelledby="svg-titulo svg-desc">
332
+ <title id="svg-titulo">Tendencia de crecimiento</title>
333
+ <desc id="svg-desc">Línea ascendente del 20% al 80% entre 2024 y 2026</desc>
334
+ </svg>
335
+
336
+ <!-- Video con subtítulos y audiodescripción -->
337
+ <video controls>
338
+ <source src="tutorial.mp4" type="video/mp4" />
339
+ <track kind="subtitles" src="subtitulos-es.vtt" srclang="es" label="Español" default />
340
+ <track kind="descriptions" src="audiodesc-es.vtt" srclang="es" label="Audiodescripción" />
341
+ <p>Tu navegador no soporta video. <a href="tutorial.mp4">Descargar tutorial</a></p>
342
+ </video>
343
+ ```
344
+
345
+ ---
346
+
347
+ ## Lectores de Pantalla — Clase sr-only
348
+
349
+ ```css
350
+ .sr-only {
351
+ position: absolute;
352
+ width: 1px;
353
+ height: 1px;
354
+ padding: 0;
355
+ margin: -1px;
356
+ overflow: hidden;
357
+ clip: rect(0, 0, 0, 0);
358
+ white-space: nowrap;
359
+ border: 0;
360
+ }
361
+
362
+ .sr-only-focusable:focus {
363
+ position: static;
364
+ width: auto;
365
+ height: auto;
366
+ overflow: visible;
367
+ clip: auto;
368
+ white-space: normal;
369
+ }
370
+ ```
371
+
372
+ ```html
373
+ <button>
374
+ Eliminar
375
+ <span class="sr-only">expediente de Juan Pérez López</span>
376
+ </button>
377
+
378
+ <a href="/descargar/reporte.pdf">
379
+ <svg aria-hidden="true"><!-- ícono PDF --></svg>
380
+ <span class="sr-only">Descargar reporte de nómina en formato PDF</span>
381
+ </a>
382
+ ```
383
+
384
+ ---
385
+
386
+ ## Checklist WCAG 2.1 AA Completo
387
+
388
+ ### Perceptible
389
+ - [ ] Toda imagen tiene `alt` descriptivo o `alt=""` si es decorativa
390
+ - [ ] Videos tienen subtítulos en español
391
+ - [ ] No se transmite información solo por color
392
+ - [ ] Contraste de texto normal >= 4.5:1
393
+ - [ ] Contraste de texto grande >= 3:1
394
+ - [ ] Contraste de UI (botones, inputs) >= 3:1
395
+ - [ ] El contenido no desaparece al hacer zoom al 200%
396
+
397
+ ### Operable
398
+ - [ ] Todo lo clickeable es accesible por teclado (Tab, Enter, Escape, flechas)
399
+ - [ ] El foco es siempre visible
400
+ - [ ] No hay trampas de teclado (excepto modales intencionales)
401
+ - [ ] Hay skip link al contenido principal
402
+ - [ ] Los modales atrapan foco y regresan al trigger al cerrar
403
+ - [ ] No hay contenido que destelle más de 3 veces por segundo
404
+
405
+ ### Comprensible
406
+ - [ ] El idioma del documento está declarado (`<html lang="es">`)
407
+ - [ ] Los mensajes de error son descriptivos (no solo "Error")
408
+ - [ ] Los labels están asociados a sus inputs
409
+ - [ ] Los campos requeridos están marcados con `aria-required="true"`
410
+ - [ ] Los errores de validación se anuncian con `role="alert"` o `aria-live`
411
+
412
+ ### Robusto
413
+ - [ ] El HTML valida sin errores críticos
414
+ - [ ] Los elementos interactivos tienen nombres accesibles
415
+ - [ ] Los estados (expandido, seleccionado, inválido) se comunican via ARIA
416
+ - [ ] La página funciona con JS deshabilitado en funciones críticas
417
+
418
+ ---
419
+
420
+ ## Herramientas de Prueba
421
+
422
+ ```bash
423
+ # axe-core en CLI
424
+ npm install -g @axe-core/cli
425
+ axe https://miapp.com --tags wcag2a,wcag2aa
426
+
427
+ # Lighthouse (accesibilidad)
428
+ lighthouse https://miapp.com --only-categories=accessibility
429
+
430
+ # Pa11y
431
+ npm install -g pa11y
432
+ pa11y https://miapp.com --standard WCAG2AA
433
+ ```
434
+
435
+ ### Pruebas manuales obligatorias
436
+
437
+ 1. **Solo teclado**: navega toda la página sin ratón. Tab, Shift+Tab, Enter, Escape, flechas.
438
+ 2. **NVDA + Firefox** o **VoiceOver + Safari**: escucha la página como lo haría un usuario ciego.
439
+ 3. **Zoom 200%**: verifica que el layout no se rompe.
440
+ 4. **Windows High Contrast Mode**: verifica visibilidad de controles.
441
+ 5. **Desactivar CSS**: verifica que el orden del DOM sea lógico.
@@ -0,0 +1,218 @@
1
+ ---
2
+ name: agent-browser
3
+ description: >
4
+ Herramienta de scraping web que permite al agente controlar un navegador Chrome
5
+ real para extraer contenido de páginas dinámicas, detrás de login, con JavaScript
6
+ pesado o con lazy loading. Usa 82% menos tokens que Playwright MCP y permite
7
+ 5-6x más páginas por sesión. Parte del stack de investigador-swl como fallback
8
+ cuando WebFetch devuelve contenido incompleto. También alimenta directamente
9
+ el wiki de proyecto (raw/) con fuentes verificadas.
10
+ user-invocable: false
11
+ version: "1.0.0"
12
+ herramientasPermitidas: [Read, Bash, WebFetch]
13
+ evolved: false
14
+ fuente: "Vercel Labs agent-browser — 26K+ GitHub stars (2026-04)"
15
+ evolvable: true # default para skill estandar
16
+ exclusiones:
17
+ - "No cargar para scraping de páginas estáticas simples — usar WebFetch directamente, es más rápido y sin overhead."
18
+ - "No cargar para descarga de PDFs desde URLs directas — usar WebFetch o Read tool según el caso."
19
+ - "No cargar para automatización de UI (formularios, clicks, flujos de usuario) — para automatización cargar `playwright-testing` o equivalente."
20
+ - "No cargar para integración de OCR sobre imágenes — agent-browser no tiene capacidad de reconocimiento de texto en imágenes."
21
+ ---
22
+ # Skill: agent-browser
23
+
24
+ Proporciona al agente capacidad de scraping web mediante un navegador Chrome real
25
+ controlado desde CLI. Diseñado para ser el fallback de WebFetch cuando el contenido
26
+ requiere JavaScript, interacción o autenticación.
27
+
28
+ ## Cuándo NO cargar
29
+
30
+ - La página es estática (HTML simple sin JS): usar `WebFetch` — es más rápido y sin overhead.
31
+ - Se descarga un PDF desde una URL directa: usar `WebFetch` con la URL del PDF.
32
+ - La tarea es automatización de UI (formularios, flujos, clicks programáticos): cargar `playwright-testing`.
33
+ - La tarea requiere OCR sobre capturas de pantalla: agent-browser no reconoce texto en imágenes.
34
+
35
+ ## Cuándo usar este skill vs WebFetch
36
+
37
+ | Situación | Usar |
38
+ |-----------|------|
39
+ | Página estática (HTML simple) | `WebFetch` — más rápido y sin overhead |
40
+ | Página con JS dinámico (React, Vue, Angular) | `agent-browser` |
41
+ | Contenido detrás de login o paywall | `agent-browser` |
42
+ | Lazy loading / infinite scroll | `agent-browser` |
43
+ | WebFetch devuelve HTML vacío o parcial | `agent-browser` como fallback |
44
+ | Research intensivo (5+ páginas seguidas) | `agent-browser` — 82% menos tokens |
45
+ | PDF descargable desde URL | `WebFetch` con la URL directa del PDF |
46
+
47
+ **Regla de decisión rápida**: si `WebFetch` devuelve menos de 500 palabras de contenido
48
+ real en una página que visualmente tiene más contenido, usar `agent-browser`.
49
+
50
+ ## Paso 0 — Verificar disponibilidad
51
+
52
+ ```bash
53
+ agent-browser --version 2>/dev/null || echo "NOT_INSTALLED"
54
+ ```
55
+
56
+ Si devuelve `NOT_INSTALLED`:
57
+
58
+ ### Instalación (una vez por máquina)
59
+
60
+ ```bash
61
+ # Instalar CLI global
62
+ npm install -g agent-browser
63
+
64
+ # Descargar Chrome dedicado (requiere ~300MB de espacio)
65
+ agent-browser install
66
+ ```
67
+
68
+ Verificar instalación:
69
+ ```bash
70
+ agent-browser --version
71
+ # Esperado: agent-browser/X.Y.Z
72
+ ```
73
+
74
+ Si npm no está disponible, reportar al usuario:
75
+ ```
76
+ ⚠ agent-browser requiere npm (Node.js). Si no tienes Node instalado:
77
+ Windows: winget install OpenJS.NodeJS.LTS
78
+ macOS: brew install node
79
+ Linux: apt install nodejs npm
80
+
81
+ Alternativa inmediata: usa WebFetch con la URL y acepta que el contenido
82
+ puede estar incompleto en páginas dinámicas.
83
+ ```
84
+
85
+ ## Paso 1 — Scraping básico
86
+
87
+ ### Extraer texto de un artículo
88
+
89
+ ```bash
90
+ # Abrir la página en el navegador controlado
91
+ agent-browser open https://url-del-articulo.com
92
+
93
+ # Extraer el texto del contenido principal
94
+ agent-browser get text "article"
95
+
96
+ # Alternativa si "article" no funciona (selector más amplio)
97
+ agent-browser get text "main"
98
+ agent-browser get text "body"
99
+ ```
100
+
101
+ ### Guardar directamente a un archivo
102
+
103
+ ```bash
104
+ agent-browser open https://url.com
105
+ agent-browser get text "article" > .planning/knowledge/raw/$(date +%Y%m%d)-nombre-fuente.md
106
+ ```
107
+
108
+ ### Páginas con navegación requerida
109
+
110
+ ```bash
111
+ # Abrir y esperar a que cargue
112
+ agent-browser open https://url.com
113
+ agent-browser wait 2000 # esperar 2 segundos para JS
114
+
115
+ # Hacer scroll para cargar contenido lazy
116
+ agent-browser scroll down 3
117
+
118
+ # Extraer después del scroll
119
+ agent-browser get text "main"
120
+ ```
121
+
122
+ ## Paso 2 — Patrones de uso frecuentes
123
+
124
+ ### Patrón A: Investigación de documentación técnica
125
+
126
+ ```bash
127
+ # Para cada URL en la lista de investigación:
128
+ for URL in "https://docs.fastapi.tiangolo.com/async/" "https://docs.python.org/3/library/asyncio.html"; do
129
+ agent-browser open "$URL"
130
+ FILENAME=$(echo "$URL" | sed 's|https://||' | sed 's|[/.]|-|g' | cut -c1-60)
131
+ agent-browser get text "main" > ".planning/knowledge/raw/${FILENAME}.md"
132
+ echo "✓ Guardado: $FILENAME.md"
133
+ done
134
+ ```
135
+
136
+ ### Patrón B: Scraping de página con login (manual)
137
+
138
+ ```bash
139
+ # 1. Abrir en modo visible (el usuario puede hacer login manual)
140
+ agent-browser open https://sitio-con-login.com --headed
141
+
142
+ # 2. El agente espera a que el usuario complete el login
143
+ # (Pausar y pedir confirmación al usuario antes de continuar)
144
+
145
+ # 3. Navegar a la página deseada
146
+ agent-browser navigate https://sitio-con-login.com/docs/pagina-privada
147
+
148
+ # 4. Extraer contenido
149
+ agent-browser get text "article"
150
+ ```
151
+
152
+ ### Patrón C: Comparar múltiples páginas (benchmark de librerías)
153
+
154
+ ```bash
155
+ LIBBRERIAS=("fastapi" "flask" "django")
156
+ for LIB in "${LIBBRERIAS[@]}"; do
157
+ agent-browser open "https://pypi.org/project/${LIB}/"
158
+ agent-browser get text ".package-description" > ".planning/knowledge/raw/${LIB}-pypi.md"
159
+ done
160
+ ```
161
+
162
+ ## Paso 3 — Integración con el wiki de proyecto
163
+
164
+ Después de scrapear fuentes, ingerir al wiki:
165
+
166
+ ```bash
167
+ # 1. Scrapear y guardar en raw/
168
+ agent-browser open https://url.com
169
+ agent-browser get text "article" > .planning/knowledge/raw/$(date +%Y%m%d)-fuente.md
170
+
171
+ # 2. Decirle al agente que ingiera en el wiki
172
+ # (El agente lee raw/, extrae knowledge, actualiza wiki/)
173
+ ```
174
+
175
+ Luego ejecutar `/swl:wiki ingest .planning/knowledge/raw/YYYY-MM-DD-fuente.md`
176
+ para integrar la fuente al wiki del proyecto.
177
+
178
+ ## Paso 4 — Limitaciones y workarounds
179
+
180
+ | Limitación | Workaround |
181
+ |-----------|------------|
182
+ | Páginas con captcha | No automatizable — usar WebFetch o copiar manualmente |
183
+ | Sitios que bloquean headless browsers | Agregar `--headed` para abrir Chrome visible |
184
+ | Contenido en iframes | `agent-browser get text "iframe"` o navegar directamente al src del iframe |
185
+ | PDFs embebidos | Descargar el PDF con su URL directa y leer con Read tool |
186
+ | Imágenes con texto (OCR) | agent-browser no tiene OCR — capturar con `agent-browser screenshot` y procesar aparte |
187
+
188
+ ## Eficiencia de tokens
189
+
190
+ agent-browser usa **82% menos tokens que Playwright MCP** porque:
191
+ - No transmite el árbol DOM completo entre el navegador y el agente
192
+ - Solo extrae el selector solicitado, no toda la página
193
+ - No requiere que el agente genere código de automatización
194
+
195
+ **Implicación práctica**: Con Playwright MCP, una sesión de investigación de 10 páginas
196
+ puede consumir 50K tokens solo en overhead de scraping. Con agent-browser: ~9K tokens.
197
+
198
+ ## Señales de que agent-browser completó correctamente
199
+
200
+ ✓ Output tiene >200 palabras de contenido real (no solo tags HTML)
201
+ ✓ El contenido incluye el texto principal del artículo/documentación
202
+ ✓ No hay mensajes de error como "ERR_CONNECTION_REFUSED" o "Navigation timeout"
203
+
204
+ ## Señales de problema
205
+
206
+ - Output vacío o <50 palabras → la página puede tener captcha o bloqueo activo
207
+ - Mensaje "Navigation timeout" → la URL no carga; verificar la URL
208
+ - Contenido solo de navegación (menús, headers) → el selector es incorrecto; probar "body" o "main"
209
+
210
+ ## Gotchas / Errores comunes no obvios
211
+
212
+ **`agent-browser get text "article"` devuelve vacío aunque la página tenga contenido visible**: el selector CSS apunta a un elemento que no existe en el DOM real de la página. Causa: la página puede usar `<main>`, `<section>`, o un div con clase en lugar de `<article>` semántico. Fix: intentar selectores alternativos en orden: `"article"` → `"main"` → `".content"` → `"body"`. Si ninguno funciona, usar `agent-browser get text "body"` para capturar todo y filtrar manualmente.
213
+
214
+ **`agent-browser open` completa sin error pero el contenido todavía está cargando cuando se llama `get text`**: algunas SPAs cargan el contenido principal de forma asíncrona después del evento DOMContentLoaded. Causa: `open` espera el evento de carga inicial, no la hidratación completa de React/Vue/Angular. Fix: agregar `agent-browser wait 2000` entre `open` y `get text` para dar tiempo al JS de renderizar el contenido. Para páginas con lazy loading, combinar con `agent-browser scroll down 3` antes de extraer.
215
+
216
+ **Usar `agent-browser` en un loop con 10+ URLs causa que el proceso Chrome se quede sin memoria y falle silenciosamente**: el Chrome controlado no libera memoria entre páginas del mismo proceso. Causa: cada `open` reutiliza el mismo proceso Chrome sin reiniciarlo. Fix: para loops de investigación intensiva (>10 URLs), dividir en sub-lotes y reiniciar `agent-browser` entre grupos, o procesar en secuencia con pausa de 500ms entre páginas.
217
+
218
+ **`agent-browser navigate` a una página de login redirecciona a la URL original sin error**: si el sitio detecta el browser headless y redirecciona al login, el agente no recibe señal de fallo — simplemente extrae el contenido del formulario de login en lugar de la página deseada. Causa: sites como LinkedIn, Cloudflare-protected pages bloquean headless browsers. Fix: verificar que el output extraído contiene el contenido esperado (>200 palabras reales), no un formulario. Usar `--headed` para hacer el login visible y manual cuando el sitio requiere autenticación humana.