@saulwade/swl-ses 2.6.0 → 2.6.1

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 (207) hide show
  1. package/CLAUDE.md +197 -197
  2. package/README.md +600 -600
  3. package/agentes/_intent-spec.md +73 -73
  4. package/agentes/_propose-step.md +90 -90
  5. package/agentes/accesibilidad-wcag-swl.md +690 -690
  6. package/agentes/arquitecto-swl.md +267 -267
  7. package/agentes/auto-evolucion-swl.md +932 -932
  8. package/agentes/backend-csharp-swl.md +420 -420
  9. package/agentes/backend-go-swl.md +390 -390
  10. package/agentes/backend-java-swl.md +281 -281
  11. package/agentes/backend-rust-swl.md +364 -364
  12. package/agentes/backend-workers-swl.md +482 -482
  13. package/agentes/cloud-infra-swl.md +509 -509
  14. package/agentes/consolidador-swl.md +541 -541
  15. package/agentes/depurador-swl.md +352 -352
  16. package/agentes/devops-ci-swl.md +400 -400
  17. package/agentes/disenador-ui-swl.md +569 -569
  18. package/agentes/documentador-swl.md +345 -345
  19. package/agentes/frontend-angular-swl.md +621 -621
  20. package/agentes/frontend-css-swl.md +716 -716
  21. package/agentes/frontend-react-swl.md +692 -692
  22. package/agentes/frontend-swl.md +496 -496
  23. package/agentes/frontend-tailwind-swl.md +826 -826
  24. package/agentes/investigador-swl.md +432 -432
  25. package/agentes/investigador-ux-swl.md +505 -505
  26. package/agentes/migrador-swl.md +442 -442
  27. package/agentes/mobile-android-swl.md +511 -511
  28. package/agentes/mobile-cross-swl.md +541 -541
  29. package/agentes/mobile-ios-swl.md +502 -502
  30. package/agentes/mobile-testing-swl.md +302 -302
  31. package/agentes/nemesis-auditor-swl.md +285 -285
  32. package/agentes/observabilidad-swl.md +438 -438
  33. package/agentes/pagos-swl.md +310 -310
  34. package/agentes/perfilador-usuario-swl.md +321 -321
  35. package/agentes/planificador-swl.md +399 -399
  36. package/agentes/producto-prd-swl.md +589 -589
  37. package/agentes/red-team-swl.md +218 -218
  38. package/agentes/release-manager-swl.md +590 -590
  39. package/agentes/rendimiento-swl.md +713 -713
  40. package/agentes/revisor-angular-swl.md +278 -278
  41. package/agentes/revisor-csharp-swl.md +264 -264
  42. package/agentes/revisor-go-swl.md +259 -259
  43. package/agentes/revisor-java-swl.md +257 -257
  44. package/agentes/revisor-kotlin-swl.md +273 -273
  45. package/agentes/revisor-nextjs-swl.md +281 -281
  46. package/agentes/revisor-php-swl.md +271 -271
  47. package/agentes/revisor-react-swl.md +278 -278
  48. package/agentes/revisor-rust-swl.md +346 -346
  49. package/agentes/revisor-seguridad-swl.md +399 -399
  50. package/agentes/revisor-swift-swl.md +268 -268
  51. package/agentes/revisor-typescript-swl.md +346 -346
  52. package/agentes/tdd-qa-swl.md +393 -393
  53. package/comandos/swl/actualizar.md +174 -174
  54. package/comandos/swl/adoptar-proyecto.md +265 -265
  55. package/comandos/swl/aprender.md +836 -836
  56. package/comandos/swl/aprobar-plan.md +146 -146
  57. package/comandos/swl/auditar-deps.md +134 -134
  58. package/comandos/swl/autoresearch.md +264 -264
  59. package/comandos/swl/ayuda.md +224 -224
  60. package/comandos/swl/brainstorm.md +51 -51
  61. package/comandos/swl/briefing.md +119 -119
  62. package/comandos/swl/checkpoint.md +325 -325
  63. package/comandos/swl/claudemd.md +234 -234
  64. package/comandos/swl/compactar.md +310 -310
  65. package/comandos/swl/configurar-ci.md +235 -235
  66. package/comandos/swl/contexto.md +110 -110
  67. package/comandos/swl/contribuir.md +233 -233
  68. package/comandos/swl/crear-skill.md +292 -292
  69. package/comandos/swl/cron.md +194 -194
  70. package/comandos/swl/discutir-fase.md +169 -169
  71. package/comandos/swl/ejecutar-fase.md +233 -233
  72. package/comandos/swl/evaluar-skill.md +520 -520
  73. package/comandos/swl/evolucion-continua.md +73 -73
  74. package/comandos/swl/evolucionar.md +267 -267
  75. package/comandos/swl/exportar-vault.md +583 -583
  76. package/comandos/swl/fix.md +118 -118
  77. package/comandos/swl/gateway.md +158 -158
  78. package/comandos/swl/inbox.md +116 -116
  79. package/comandos/swl/instalar.md +220 -220
  80. package/comandos/swl/instintos.md +86 -86
  81. package/comandos/swl/mapear-codebase.md +312 -312
  82. package/comandos/swl/mcp-status.md +175 -175
  83. package/comandos/swl/modelo.md +100 -100
  84. package/comandos/swl/nemesis.md +433 -433
  85. package/comandos/swl/notificaciones.md +299 -299
  86. package/comandos/swl/nuevo-proyecto.md +251 -251
  87. package/comandos/swl/planear-fase.md +263 -263
  88. package/comandos/swl/plugins.md +256 -256
  89. package/comandos/swl/predecir.md +169 -169
  90. package/comandos/swl/reflect-skills.md +125 -125
  91. package/comandos/swl/release.md +450 -450
  92. package/comandos/swl/revisar-impacto.md +201 -201
  93. package/comandos/swl/revisar.md +330 -330
  94. package/comandos/swl/seguridad.md +189 -189
  95. package/comandos/swl/sesiones.md +200 -200
  96. package/comandos/swl/skill-search.md +113 -113
  97. package/comandos/swl/status.md +345 -345
  98. package/comandos/swl/verificar.md +817 -817
  99. package/comandos/swl/wiki.md +620 -620
  100. package/gateway/cron/jobs.example.json +12 -12
  101. package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
  102. package/habilidades/backend-async-postgres-testing/SKILL.md +2 -1
  103. package/habilidades/changelog-generator/SKILL.md +174 -174
  104. package/habilidades/compactacion-contexto/SKILL.md +2 -1
  105. package/habilidades/contenedores-docker/SKILL.md +4 -2
  106. package/habilidades/doubt-driven-review/SKILL.md +207 -207
  107. package/habilidades/drift-detection/SKILL.md +1 -1
  108. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  109. package/habilidades/extractor-de-aprendizajes/SKILL.md +8 -2
  110. package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
  111. package/habilidades/harness-claude-code/SKILL.md +314 -314
  112. package/habilidades/instalar-sistema/SKILL.md +227 -227
  113. package/habilidades/planear-fase/SKILL.md +358 -358
  114. package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
  115. package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
  116. package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -147
  117. package/habilidades/release-semver/SKILL.md +2 -2
  118. package/habilidades/tdd-workflow/SKILL.md +749 -749
  119. package/hooks/agente-lifecycle.js +1 -1
  120. package/hooks/audit-trail.js +1 -1
  121. package/hooks/auto-consolidacion.js +1 -1
  122. package/hooks/captura-acciones-post.js +1 -1
  123. package/hooks/captura-acciones-session.js +1 -1
  124. package/hooks/captura-feedback-usuario.js +1 -1
  125. package/hooks/contexto-iteracion.js +1 -1
  126. package/hooks/contexto-subagente.js +68 -68
  127. package/hooks/degradacion-instintos.js +1 -1
  128. package/hooks/grafo-contexto.js +1 -1
  129. package/hooks/guardrail-modelo.js +1 -1
  130. package/hooks/inbox-aviso.js +1 -1
  131. package/hooks/inyeccion-contexto.js +1 -1
  132. package/hooks/lib/agent-matcher.js +1 -1
  133. package/hooks/lib/agent-routing.js +1 -1
  134. package/hooks/lib/captura-acciones.js +1 -1
  135. package/hooks/lib/etapa-metricas.js +1 -1
  136. package/hooks/lib/evolution-tracker.js +1 -1
  137. package/hooks/lib/gateway-notify.js +193 -193
  138. package/hooks/lib/mcp-health.js +1 -1
  139. package/hooks/lib/notificacion-formato.js +58 -0
  140. package/hooks/lib/nudge-tracker.js +1 -1
  141. package/hooks/lib/otlp-exporter.js +1 -1
  142. package/hooks/lib/propose-step.js +1 -1
  143. package/hooks/lib/raiz-proyecto.js +127 -102
  144. package/hooks/lib/run-log.js +1 -1
  145. package/hooks/lib/singleton-guard.js +20 -13
  146. package/hooks/lib/telegram-cliente.js +11 -3
  147. package/hooks/notificacion-telegram.js +13 -3
  148. package/hooks/preservar-estado-pre-compact.js +1 -1
  149. package/hooks/registro-turnos.js +1 -1
  150. package/hooks/resumen-sesion.js +1 -1
  151. package/hooks/risk-scoring.js +1 -1
  152. package/hooks/session-briefing.js +1 -1
  153. package/hooks/spec-gate.js +1 -1
  154. package/hooks/sugerir-regenerar-inventario.js +1 -1
  155. package/hooks/tdd-gate.js +1 -1
  156. package/hooks/telemetria-agentes.js +1 -1
  157. package/hooks/telemetria-skill-routing.js +1 -1
  158. package/hooks/tracking-costos.js +1 -1
  159. package/hooks/validar-formato-post-subagente.js +1 -1
  160. package/hooks/validar-intent-spec.js +1 -1
  161. package/hooks/validar-planning-paths.js +1 -1
  162. package/llms.txt +29 -29
  163. package/manifiestos/canonical-hashes.json +5588 -5257
  164. package/manifiestos/hooks-config.json +469 -469
  165. package/manifiestos/invariantes-criticos.json +30 -30
  166. package/manifiestos/modulos.json +1429 -1428
  167. package/manifiestos/skills-lock.json +1275 -1275
  168. package/package.json +94 -94
  169. package/plugin.json +369 -369
  170. package/scripts/auditar-clases-conocidas.js +134 -134
  171. package/scripts/bootstrap-instintos.js +85 -14
  172. package/scripts/canario-hooks.js +166 -166
  173. package/scripts/cli/autonomia.js +23 -23
  174. package/scripts/cli/benchmark-memoria.js +37 -37
  175. package/scripts/cli/ciclo-autonomo.js +73 -73
  176. package/scripts/cli/ciclo-fase-b.js +102 -102
  177. package/scripts/cli/guardrail-metrics.js +39 -39
  178. package/scripts/cli/memoria-search.js +69 -69
  179. package/scripts/cli/nudge-accionar.js +39 -39
  180. package/scripts/cli/run-eval.js +38 -38
  181. package/scripts/doctor.js +26 -3
  182. package/scripts/evidencia-valor.js +101 -101
  183. package/scripts/field-report.js +16 -16
  184. package/scripts/instalador.js +13 -0
  185. package/scripts/lib/activar-hooks-proyecto.js +116 -116
  186. package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
  187. package/scripts/lib/ciclo-autonomo/config.js +165 -165
  188. package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
  189. package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
  190. package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
  191. package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
  192. package/scripts/lib/ciclo-autonomo/index.js +301 -301
  193. package/scripts/lib/ciclo-autonomo/lock.js +124 -124
  194. package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
  195. package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
  196. package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
  197. package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
  198. package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -535
  199. package/scripts/lib/evidencia-valor.js +228 -228
  200. package/scripts/lib/expandir-targets.js +71 -71
  201. package/scripts/lib/limpiar-basura-global.js +161 -0
  202. package/scripts/lib/toml-merge.js +204 -204
  203. package/scripts/mcp-server/auth.js +105 -105
  204. package/scripts/mcp-server/cache.js +106 -106
  205. package/scripts/tui/pantallas/install-wizard.js +403 -403
  206. package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
  207. package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
@@ -1,116 +1,116 @@
1
- ---
2
- name: swl:inbox
3
- description: Lee y procesa comandos entrantes del gateway multi-plataforma (Telegram, Discord, Webhook). Muestra mensajes pendientes encolados por el CommandRelay y permite ejecutarlos, descartarlos o diferirlos. Es el consumer del relay bidireccional que conecta canales externos con Claude Code.
4
- allowed_tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
5
- ---
6
-
7
- # /swl:inbox — Consumo de comandos entrantes del gateway
8
-
9
- Cuando el gateway SWL está configurado con `relay.enabled: true` (ver `/swl:gateway`), los mensajes que envías al bot de Telegram (o cualquier otro adaptador con relay habilitado) se encolan en `.planning/inbox/cmd-*.json`. Este comando es el consumer: lee la cola, te muestra los mensajes pendientes y te pregunta qué hacer con cada uno.
10
-
11
- ## Cuándo usar este comando
12
-
13
- - Al inicio de una sesión, si esperas instrucciones enviadas desde tu móvil
14
- - Cuando el hook `notificacion-sesion-stop` te envió una notificación desde otro sitio y respondiste desde el celular
15
- - En lugar de pedirle a alguien que controle tu máquina para avanzar una tarea mientras estás fuera
16
-
17
- ## Cuándo NO usar
18
-
19
- - Para notificaciones de salida (SWL → Telegram) → eso lo hace automáticamente `notificacion-sesion-stop.js`
20
- - Para automatizar respuestas en tmux (Linux/macOS) → usar `scripts/inbox-tmux-inject.js` como daemon opt-in
21
- - Para buscar en el historial de mensajes recibidos → revisar `.planning/inbox/audit.jsonl` directamente
22
-
23
- ## Flujo
24
-
25
- ### Paso 1 — Listar pendientes
26
-
27
- Ejecutar en Bash:
28
-
29
- ```bash
30
- node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); const items = r.listarPendientes({ limit: 20 }); console.log(JSON.stringify(items, null, 2));"
31
- ```
32
-
33
- O directamente leer el directorio:
34
-
35
- ```bash
36
- ls -la .planning/inbox/cmd-*.json 2>/dev/null
37
- ```
38
-
39
- ### Paso 2 — Clasificar cada comando pendiente
40
-
41
- Por cada comando en la cola, decidir:
42
-
43
- | Tipo de contenido | Acción |
44
- |-------------------|--------|
45
- | Instrucción de trabajo clara ("arregla el bug X", "ejecuta pruebas") | Procesar como prompt del usuario. Ejecutar la tarea siguiendo el flujo normal SWL. |
46
- | Slash command (`/swl:status salud`, `/swl:status metricas`, etc.) | Invocar ese comando directamente. |
47
- | Pregunta/consulta ("¿cómo va X?", "estado del release") | Responder con la información solicitada. Enviar respuesta al gateway si aplica. |
48
- | Feedback/corrección ("no uses Y", "prefiero Z") | Escribir a `.planning/evolution/feedback-queue.jsonl` con tipo correspondiente y marcar como procesado. |
49
- | Contenido ambiguo o sospechoso | Marcar como descartado con razón registrada. |
50
-
51
- ### Paso 3 — Procesar y marcar
52
-
53
- Para cada comando procesado, marcarlo como `processed` escribiendo el resultado:
54
-
55
- ```bash
56
- node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); r.marcarProcesado('<cmd-id>', { accion: 'ejecutado', resumen: '<breve resumen>' });"
57
- ```
58
-
59
- ### Paso 4 — Notificar de vuelta al usuario (opcional)
60
-
61
- Si el comando merece respuesta al canal origen (Telegram, Discord), encolar un
62
- `gateway_notification` con el subcomando del CLI (resuelve cross-scope; ver
63
- `docs/invocacion-cli-cross-scope.md`):
64
-
65
- ```bash
66
- swl-ses gateway-notify \
67
- --texto="✅ Comando procesado: <resumen>" \
68
- --to=telegram \
69
- --reply-to="<chatId>"
70
- # fallback: npx -y @saulwade/swl-ses@latest gateway-notify --texto="..." --to=telegram --reply-to="<chatId>"
71
- ```
72
-
73
- ### Paso 5 — Auditar
74
-
75
- Todas las acciones del relay quedan en `.planning/inbox/audit.jsonl`. Si hay actividad inesperada (rechazos por rate limit, usuarios no autorizados), revisar el audit log para detectar abuso o misconfiguraciones.
76
-
77
- ## Seguridad
78
-
79
- - El relay NUNCA ejecuta comandos automáticamente. Todo pasa por este comando con juicio humano.
80
- - Solo usuarios listados en `platforms.<nombre>.allowedUsers` pueden enviar comandos.
81
- - Textos > 4000 chars se rechazan.
82
- - Patrones de payload injection (`<script>`, `.env`, `id_rsa`) se rechazan silenciosamente.
83
- - Rate limit: 10 msg/min por usuario por defecto (configurable en `relay.rateLimit.maxPerMinute`).
84
- - Dedup por hash en ventana de 30s.
85
-
86
- ## Modo avanzado: inyección directa a tmux (Linux/macOS)
87
-
88
- Si tu sesión de Claude Code corre dentro de `tmux`, puedes usar el daemon opt-in:
89
-
90
- ```bash
91
- # Correr en una terminal separada
92
- npx -y @saulwade/swl-ses@latest inbox-tmux-inject --session=claude --poll=2
93
- ```
94
-
95
- Ese daemon monitorea `.planning/inbox/` y usa `tmux send-keys` para inyectar el comando a la sesión Claude. No funciona en Windows (no hay tmux).
96
-
97
- ## Configuración
98
-
99
- Ver `manifiestos/gateway-config.json`:
100
-
101
- ```json
102
- {
103
- "enabled": true,
104
- "adapters": { "telegram": { "enabled": true, "token": "..." } },
105
- "relay": {
106
- "enabled": true,
107
- "platforms": {
108
- "telegram": {
109
- "enabled": true,
110
- "allowedUsers": ["123456789"]
111
- }
112
- },
113
- "rateLimit": { "maxPerMinute": 10 }
114
- }
115
- }
116
- ```
1
+ ---
2
+ name: swl:inbox
3
+ description: Lee y procesa comandos entrantes del gateway multi-plataforma (Telegram, Discord, Webhook). Muestra mensajes pendientes encolados por el CommandRelay y permite ejecutarlos, descartarlos o diferirlos. Es el consumer del relay bidireccional que conecta canales externos con Claude Code.
4
+ allowed_tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
5
+ ---
6
+
7
+ # /swl:inbox — Consumo de comandos entrantes del gateway
8
+
9
+ Cuando el gateway SWL está configurado con `relay.enabled: true` (ver `/swl:gateway`), los mensajes que envías al bot de Telegram (o cualquier otro adaptador con relay habilitado) se encolan en `.planning/inbox/cmd-*.json`. Este comando es el consumer: lee la cola, te muestra los mensajes pendientes y te pregunta qué hacer con cada uno.
10
+
11
+ ## Cuándo usar este comando
12
+
13
+ - Al inicio de una sesión, si esperas instrucciones enviadas desde tu móvil
14
+ - Cuando el hook `notificacion-sesion-stop` te envió una notificación desde otro sitio y respondiste desde el celular
15
+ - En lugar de pedirle a alguien que controle tu máquina para avanzar una tarea mientras estás fuera
16
+
17
+ ## Cuándo NO usar
18
+
19
+ - Para notificaciones de salida (SWL → Telegram) → eso lo hace automáticamente `notificacion-sesion-stop.js`
20
+ - Para automatizar respuestas en tmux (Linux/macOS) → usar `scripts/inbox-tmux-inject.js` como daemon opt-in
21
+ - Para buscar en el historial de mensajes recibidos → revisar `.planning/inbox/audit.jsonl` directamente
22
+
23
+ ## Flujo
24
+
25
+ ### Paso 1 — Listar pendientes
26
+
27
+ Ejecutar en Bash:
28
+
29
+ ```bash
30
+ node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); const items = r.listarPendientes({ limit: 20 }); console.log(JSON.stringify(items, null, 2));"
31
+ ```
32
+
33
+ O directamente leer el directorio:
34
+
35
+ ```bash
36
+ ls -la .planning/inbox/cmd-*.json 2>/dev/null
37
+ ```
38
+
39
+ ### Paso 2 — Clasificar cada comando pendiente
40
+
41
+ Por cada comando en la cola, decidir:
42
+
43
+ | Tipo de contenido | Acción |
44
+ |-------------------|--------|
45
+ | Instrucción de trabajo clara ("arregla el bug X", "ejecuta pruebas") | Procesar como prompt del usuario. Ejecutar la tarea siguiendo el flujo normal SWL. |
46
+ | Slash command (`/swl:status salud`, `/swl:status metricas`, etc.) | Invocar ese comando directamente. |
47
+ | Pregunta/consulta ("¿cómo va X?", "estado del release") | Responder con la información solicitada. Enviar respuesta al gateway si aplica. |
48
+ | Feedback/corrección ("no uses Y", "prefiero Z") | Escribir a `.planning/evolution/feedback-queue.jsonl` con tipo correspondiente y marcar como procesado. |
49
+ | Contenido ambiguo o sospechoso | Marcar como descartado con razón registrada. |
50
+
51
+ ### Paso 3 — Procesar y marcar
52
+
53
+ Para cada comando procesado, marcarlo como `processed` escribiendo el resultado:
54
+
55
+ ```bash
56
+ node -e "const R = require('./gateway/command-relay'); const fs = require('fs'); const cfg = JSON.parse(fs.readFileSync('manifiestos/gateway-config.json','utf8')); const r = new R(process.cwd(), cfg); r.marcarProcesado('<cmd-id>', { accion: 'ejecutado', resumen: '<breve resumen>' });"
57
+ ```
58
+
59
+ ### Paso 4 — Notificar de vuelta al usuario (opcional)
60
+
61
+ Si el comando merece respuesta al canal origen (Telegram, Discord), encolar un
62
+ `gateway_notification` con el subcomando del CLI (resuelve cross-scope; ver
63
+ `docs/invocacion-cli-cross-scope.md`):
64
+
65
+ ```bash
66
+ swl-ses gateway-notify \
67
+ --texto="✅ Comando procesado: <resumen>" \
68
+ --to=telegram \
69
+ --reply-to="<chatId>"
70
+ # fallback: npx -y @saulwade/swl-ses@latest gateway-notify --texto="..." --to=telegram --reply-to="<chatId>"
71
+ ```
72
+
73
+ ### Paso 5 — Auditar
74
+
75
+ Todas las acciones del relay quedan en `.planning/inbox/audit.jsonl`. Si hay actividad inesperada (rechazos por rate limit, usuarios no autorizados), revisar el audit log para detectar abuso o misconfiguraciones.
76
+
77
+ ## Seguridad
78
+
79
+ - El relay NUNCA ejecuta comandos automáticamente. Todo pasa por este comando con juicio humano.
80
+ - Solo usuarios listados en `platforms.<nombre>.allowedUsers` pueden enviar comandos.
81
+ - Textos > 4000 chars se rechazan.
82
+ - Patrones de payload injection (`<script>`, `.env`, `id_rsa`) se rechazan silenciosamente.
83
+ - Rate limit: 10 msg/min por usuario por defecto (configurable en `relay.rateLimit.maxPerMinute`).
84
+ - Dedup por hash en ventana de 30s.
85
+
86
+ ## Modo avanzado: inyección directa a tmux (Linux/macOS)
87
+
88
+ Si tu sesión de Claude Code corre dentro de `tmux`, puedes usar el daemon opt-in:
89
+
90
+ ```bash
91
+ # Correr en una terminal separada
92
+ npx -y @saulwade/swl-ses@latest inbox-tmux-inject --session=claude --poll=2
93
+ ```
94
+
95
+ Ese daemon monitorea `.planning/inbox/` y usa `tmux send-keys` para inyectar el comando a la sesión Claude. No funciona en Windows (no hay tmux).
96
+
97
+ ## Configuración
98
+
99
+ Ver `manifiestos/gateway-config.json`:
100
+
101
+ ```json
102
+ {
103
+ "enabled": true,
104
+ "adapters": { "telegram": { "enabled": true, "token": "..." } },
105
+ "relay": {
106
+ "enabled": true,
107
+ "platforms": {
108
+ "telegram": {
109
+ "enabled": true,
110
+ "allowedUsers": ["123456789"]
111
+ }
112
+ },
113
+ "rateLimit": { "maxPerMinute": 10 }
114
+ }
115
+ }
116
+ ```