@johpaz/hive-sdk 0.1.3 → 0.1.5

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 (272) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/README.md +78 -23
  3. package/bunfig.toml +4 -2
  4. package/docs/API-AGENTS.md +78 -27
  5. package/docs/API-CONTEXT-COMPILER.md +31 -34
  6. package/docs/API-TOOLS-SKILLS-CHANNELS.md +58 -22
  7. package/docs/HIVE-HARNESS.md +1 -1
  8. package/docs/INDEX.md +4 -4
  9. package/docs/TEMPLATE-HIVE-APP.md +10 -10
  10. package/package.json +9 -4
  11. package/packages/cli/package.json +2 -2
  12. package/packages/cli/src/commands/create-app.test.ts +36 -7
  13. package/packages/cli/src/commands/init.ts +3 -3
  14. package/packages/cli/src/commands/run.ts +1 -1
  15. package/packages/cli/src/commands/test.ts +37 -25
  16. package/packages/cli/src/commands/trace.ts +30 -28
  17. package/packages/cli/templates/hive-app/.env.example +10 -2
  18. package/packages/cli/templates/hive-app/README.md +103 -0
  19. package/packages/cli/templates/hive-app/hive.config.ts +9 -3
  20. package/packages/cli/templates/hive-app/src/agents/coordinator.ts +8 -1
  21. package/packages/cli/templates/hive-app/src/main.ts +12 -19
  22. package/packages/core/package.json +5 -4
  23. package/packages/core/src/agent/acceptance-checks.ts +166 -0
  24. package/packages/core/src/agent/agent-catalog.ts +348 -0
  25. package/packages/core/src/agent/agent-loop.ts +1373 -0
  26. package/packages/core/src/agent/capability-search.ts +186 -0
  27. package/packages/core/src/agent/catalog-selector.ts +103 -0
  28. package/packages/core/src/agent/{Compaction.ts → compaction.ts} +86 -63
  29. package/packages/core/src/agent/context-compiler.ts +689 -0
  30. package/packages/core/src/agent/conversation-store.ts +381 -0
  31. package/packages/core/src/agent/curator.ts +276 -0
  32. package/packages/core/src/agent/delegation-runtime.ts +241 -0
  33. package/packages/core/src/agent/goal-runner.ts +323 -0
  34. package/packages/core/src/agent/index.ts +17 -12
  35. package/packages/core/src/agent/llm-client.ts +266 -0
  36. package/packages/core/src/agent/llm-providers/anthropic.ts +264 -0
  37. package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
  38. package/packages/core/src/agent/{providers → llm-providers}/gemini.ts +98 -60
  39. package/packages/core/src/agent/llm-providers/groq.ts +5 -0
  40. package/packages/core/src/agent/llm-providers/hiveagents.ts +253 -0
  41. package/packages/core/src/agent/{providers → llm-providers}/interface.ts +73 -13
  42. package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
  43. package/packages/core/src/agent/llm-providers/minimax.ts +13 -0
  44. package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
  45. package/packages/core/src/agent/llm-providers/modelscope.ts +5 -0
  46. package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
  47. package/packages/core/src/agent/{providers → llm-providers}/ollama.ts +31 -5
  48. package/packages/core/src/agent/llm-providers/openai-compat-base.ts +418 -0
  49. package/packages/core/src/agent/llm-providers/openai.ts +5 -0
  50. package/packages/core/src/agent/llm-providers/opencode-go.ts +9 -0
  51. package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
  52. package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
  53. package/packages/core/src/agent/llm-providers/z-ai.ts +5 -0
  54. package/packages/core/src/agent/minimal-loadout.ts +47 -0
  55. package/packages/core/src/agent/playbook-selector.ts +119 -0
  56. package/packages/core/src/agent/{PromptBuilder.ts → prompt-builder.ts} +21 -22
  57. package/packages/core/src/{harness → agent}/proof-packet.ts +16 -21
  58. package/packages/core/src/agent/providers/index.ts +35 -16
  59. package/packages/core/src/agent/reflector.ts +320 -0
  60. package/packages/core/src/agent/routing-intent.ts +22 -0
  61. package/packages/core/src/{harness → agent}/run-epoch.ts +4 -3
  62. package/packages/core/src/{harness → agent}/run-store.ts +142 -81
  63. package/packages/core/src/agent/{Service.ts → service.ts} +37 -26
  64. package/packages/core/src/agent/skill-selector.ts +374 -0
  65. package/packages/core/src/agent/stuck-loop.ts +209 -0
  66. package/packages/core/src/agent/{selectors/ToolSelector.ts → tool-selector.ts} +188 -178
  67. package/packages/core/src/{ace/Tracer.ts → agent/tracer.ts} +37 -27
  68. package/packages/core/src/api/createAgent.test.ts +139 -27
  69. package/packages/core/src/api/createAgent.ts +232 -44
  70. package/packages/core/src/artifacts/store.ts +162 -0
  71. package/packages/core/src/canvas/canvas-manager.ts +161 -0
  72. package/packages/core/src/canvas/canvas.test.ts +8 -4
  73. package/packages/core/src/canvas/emitter.ts +131 -80
  74. package/packages/core/src/canvas/index.ts +1 -3
  75. package/packages/core/src/channels/base.ts +9 -1
  76. package/packages/core/src/channels/discord.ts +5 -4
  77. package/packages/core/src/channels/manager.ts +122 -30
  78. package/packages/core/src/channels/slack.ts +5 -4
  79. package/packages/core/src/channels/telegram.ts +36 -6
  80. package/packages/core/src/channels/webchat.ts +11 -10
  81. package/packages/core/src/channels/whatsapp.ts +23 -7
  82. package/packages/core/src/config/index.ts +13 -2
  83. package/packages/core/src/config/loader.ts +71 -29
  84. package/packages/core/src/ethics/EthicsGuard.test.ts +90 -36
  85. package/packages/core/src/ethics/EthicsGuard.ts +51 -47
  86. package/packages/core/src/events/agent-bus.ts +44 -68
  87. package/packages/core/src/events/channel-narration.ts +150 -0
  88. package/packages/core/src/events/narration.ts +82 -0
  89. package/packages/core/src/events/tool-narration.ts +62 -0
  90. package/packages/core/src/gateway/delegation-groups.ts +258 -0
  91. package/packages/core/src/{harness → gateway}/durable-queue.ts +102 -42
  92. package/packages/core/src/{harness → gateway}/job-store.ts +85 -48
  93. package/packages/core/src/gateway/lane-queue.ts +173 -0
  94. package/packages/core/src/gateway/notification-inbox.ts +57 -0
  95. package/packages/core/src/gateway/server.ts +1 -1
  96. package/packages/core/src/harness/index.ts +46 -27
  97. package/packages/core/src/index.ts +33 -20
  98. package/packages/core/src/mcp/hot-reload.ts +32 -23
  99. package/packages/core/src/mcp/index.ts +6 -3
  100. package/packages/core/src/mcp/singleton.ts +1 -4
  101. package/packages/core/src/mcp/tool-sync.ts +138 -0
  102. package/packages/core/src/memory/Scratchpad.test.ts +39 -20
  103. package/packages/core/src/memory/Scratchpad.ts +27 -34
  104. package/packages/core/src/multimodal/vision-service.ts +44 -38
  105. package/packages/core/src/resilience/retry.ts +95 -0
  106. package/packages/core/src/scheduler/CronScheduler.ts +334 -287
  107. package/packages/core/src/scheduler/index.ts +9 -7
  108. package/packages/core/src/scheduler/integration.ts +46 -26
  109. package/packages/core/src/scheduler/scheduler.test.ts +9 -13
  110. package/packages/core/src/scheduler/types.ts +7 -2
  111. package/packages/core/src/security/Pairing.ts +1 -1
  112. package/packages/core/src/skills/bundled/a2ui/a2ui_dashboard/SKILL.md +176 -0
  113. package/packages/core/src/skills/bundled/a2ui/a2ui_form/SKILL.md +202 -0
  114. package/packages/core/src/skills/bundled/a2ui/a2ui_interactive/SKILL.md +206 -0
  115. package/packages/core/src/skills/bundled/agents/agent_spawner/SKILL.md +173 -0
  116. package/packages/core/src/skills/bundled/agents/memory_manager/SKILL.md +143 -0
  117. package/packages/core/src/skills/bundled/agents/research_and_remember/SKILL.md +139 -0
  118. package/packages/core/src/skills/bundled/agents/task_orchestrator/SKILL.md +98 -0
  119. package/packages/core/src/skills/bundled/api/api_client/SKILL.md +132 -0
  120. package/packages/core/src/skills/bundled/cli/cli_pipeline/SKILL.md +135 -0
  121. package/packages/core/src/skills/bundled/cli/cli_safe_exec/SKILL.md +125 -0
  122. package/packages/core/src/skills/bundled/cli/software_engineering/SKILL.md +23 -0
  123. package/packages/core/src/skills/bundled/cron_manager/SKILL.md +188 -0
  124. package/packages/core/src/skills/bundled/cron_reminder/SKILL.md +112 -0
  125. package/packages/core/src/skills/bundled/filesystem/file_manager/SKILL.md +118 -0
  126. package/packages/core/src/skills/bundled/filesystem/file_read_and_summarize/SKILL.md +109 -0
  127. package/packages/core/src/skills/bundled/filesystem/file_writer/SKILL.md +129 -0
  128. package/packages/core/src/skills/bundled/filesystem/workspace_file_operator/SKILL.md +22 -0
  129. package/packages/core/src/skills/bundled/office/office_document_manager/SKILL.md +262 -0
  130. package/packages/core/src/skills/bundled/search_knowledge/capability_discovery/SKILL.md +75 -0
  131. package/packages/core/src/skills/bundled/web/browser_automate/SKILL.md +120 -0
  132. package/packages/core/src/skills/bundled/web/browser_scrape/SKILL.md +109 -0
  133. package/packages/core/src/skills/bundled/web/web_monitor/SKILL.md +127 -0
  134. package/packages/core/src/skills/bundled/web/web_research/SKILL.md +119 -0
  135. package/packages/core/src/skills/bundled-data.generated.ts +731 -2678
  136. package/packages/core/src/skills/skills.test.ts +52 -11
  137. package/packages/core/src/{harness → storage}/boot-id.ts +5 -2
  138. package/packages/core/src/storage/bootstrap.ts +151 -0
  139. package/packages/core/src/storage/causal-events.ts +84 -0
  140. package/packages/core/src/storage/collections.ts +680 -0
  141. package/packages/core/src/storage/crypto.ts +205 -74
  142. package/packages/core/src/{harness/db-helpers.ts → storage/hive.ts} +63 -7
  143. package/packages/core/src/storage/hivedb.ts +61 -0
  144. package/packages/core/src/storage/index.ts +111 -17
  145. package/packages/core/src/storage/model-id.ts +53 -0
  146. package/packages/core/src/storage/onboarding.ts +540 -972
  147. package/packages/core/src/storage/reconcile.ts +238 -0
  148. package/packages/core/src/storage/seed.ts +572 -406
  149. package/packages/core/src/storage/usage.ts +285 -225
  150. package/packages/core/src/storage/user-email.ts +11 -0
  151. package/packages/core/src/swarm/AgentExecutor.ts +1 -1
  152. package/packages/core/src/swarm/EventBridge.ts +1 -1
  153. package/packages/core/src/swarm/index.ts +12 -9
  154. package/packages/core/src/tool-runtime/index.ts +146 -23
  155. package/packages/core/src/tool-runtime/tool-worker.ts +2 -2
  156. package/packages/core/src/tool-runtime/worker-tools.ts +27 -0
  157. package/packages/core/src/{canvas/a2ui-tools.ts → tools/a2ui/index.ts} +17 -8
  158. package/packages/core/src/tools/agents/get-available-models.ts +36 -54
  159. package/packages/core/src/tools/agents/index.ts +784 -292
  160. package/packages/core/src/tools/api/api-request.test.ts +164 -0
  161. package/packages/core/src/tools/api/api-request.ts +174 -0
  162. package/packages/core/src/tools/api/index.ts +16 -0
  163. package/packages/core/src/tools/cli/index.ts +4 -0
  164. package/packages/core/src/tools/core/index.ts +281 -112
  165. package/packages/core/src/tools/cron/index.ts +121 -124
  166. package/packages/core/src/tools/index.ts +63 -78
  167. package/packages/core/src/tools/office/office-escribir-xlsx.ts +3 -1
  168. package/packages/core/src/tools/types.ts +3 -1
  169. package/packages/core/src/tools/web/artifact-inspect.ts +23 -0
  170. package/packages/core/src/tools/web/browser-screenshot.ts +26 -5
  171. package/packages/core/src/tools/web/browser-service.ts +5 -0
  172. package/packages/core/src/tools/web/browser-type.ts +3 -8
  173. package/packages/core/src/tools/web/index.ts +4 -4
  174. package/packages/core/src/voice/index.ts +89 -63
  175. package/packages/core/src/workers/agent.worker.ts +2 -2
  176. package/packages/core/src/workers/workers.test.ts +3 -10
  177. package/scripts/bump-version.ts +248 -0
  178. package/scripts/generate-skill-bundle.ts +108 -0
  179. package/test/agent-loop-terminal-synthesis.test.ts +32 -0
  180. package/test/catalog-agents-stay-enabled.test.ts +117 -0
  181. package/test/causal-events.test.ts +117 -0
  182. package/test/compaction.test.ts +105 -0
  183. package/test/context-compiler.test.ts +269 -0
  184. package/test/curator.test.ts +130 -0
  185. package/test/durable-queue.test.ts +114 -0
  186. package/test/harness-barrel.test.ts +64 -0
  187. package/test/hive-helpers.test.ts +130 -0
  188. package/test/hivedb-search.test.ts +189 -0
  189. package/test/internal-turns.test.ts +166 -0
  190. package/test/job-idempotency.test.ts +68 -0
  191. package/test/job-retry-backoff.test.ts +184 -0
  192. package/test/job-store.test.ts +381 -0
  193. package/test/llm-retry.test.ts +97 -0
  194. package/test/memory-perf.test.ts +774 -0
  195. package/test/minimal-loadout.test.ts +78 -0
  196. package/test/model-catalog.test.ts +105 -0
  197. package/test/preload.ts +12 -0
  198. package/test/reflector.test.ts +320 -0
  199. package/test/retention-cap.test.ts +91 -0
  200. package/test/retired-capabilities-pruned.test.ts +192 -0
  201. package/test/run-store.test.ts +355 -0
  202. package/test/scratchpad.test.ts +74 -0
  203. package/test/secrets-durability.test.ts +119 -0
  204. package/test/seed-model-reseed.test.ts +155 -0
  205. package/test/setup-agent-seed.test.ts +264 -0
  206. package/test/tool-inventory.test.ts +65 -0
  207. package/test/tool-runtime.test.ts +258 -0
  208. package/test/toon.test.ts +429 -0
  209. package/tsconfig.json +2 -0
  210. package/packages/core/src/ace/Curator.ts +0 -158
  211. package/packages/core/src/ace/Reflector.ts +0 -200
  212. package/packages/core/src/ace/index.ts +0 -4
  213. package/packages/core/src/agent/AgentRunner.ts +0 -711
  214. package/packages/core/src/agent/ContextCompiler.ts +0 -567
  215. package/packages/core/src/agent/ContextGuard.ts +0 -91
  216. package/packages/core/src/agent/ConversationStore.ts +0 -254
  217. package/packages/core/src/agent/Hooks.ts +0 -166
  218. package/packages/core/src/agent/StuckLoop.ts +0 -133
  219. package/packages/core/src/agent/providers/LLMClient.ts +0 -149
  220. package/packages/core/src/agent/providers/anthropic.ts +0 -212
  221. package/packages/core/src/agent/providers/openai-compat.ts +0 -231
  222. package/packages/core/src/agent/selectors/PlaybookSelector.ts +0 -121
  223. package/packages/core/src/agent/selectors/SkillSelector.ts +0 -322
  224. package/packages/core/src/agent/selectors/index.ts +0 -6
  225. package/packages/core/src/auth/auth.ts +0 -121
  226. package/packages/core/src/auth/index.ts +0 -1
  227. package/packages/core/src/canvas/CanvasManager.ts +0 -390
  228. package/packages/core/src/canvas/canvas-tools.ts +0 -448
  229. package/packages/core/src/harness/collections.ts +0 -98
  230. package/packages/core/src/harness/goal-verifier.ts +0 -141
  231. package/packages/core/src/harness/harness.test.ts +0 -236
  232. package/packages/core/src/harness/reconcile.ts +0 -149
  233. package/packages/core/src/mcp/MCPToolAdapter.ts +0 -176
  234. package/packages/core/src/multimodal/VisionService.ts +0 -293
  235. package/packages/core/src/scheduler/dag/AgentExecutor.ts +0 -53
  236. package/packages/core/src/scheduler/dag/DAGScheduler.ts +0 -250
  237. package/packages/core/src/scheduler/dag/EventBridge.ts +0 -122
  238. package/packages/core/src/scheduler/dag/TaskGraph.ts +0 -192
  239. package/packages/core/src/scheduler/dag/TaskNode.ts +0 -97
  240. package/packages/core/src/scheduler/dag/TaskResult.ts +0 -22
  241. package/packages/core/src/scheduler/dag/errors.ts +0 -37
  242. package/packages/core/src/scheduler/dag/index.ts +0 -26
  243. package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +0 -97
  244. package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +0 -21
  245. package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +0 -46
  246. package/packages/core/src/storage/HiveDBStorage.ts +0 -64
  247. package/packages/core/src/storage/SQLiteStorage.ts +0 -414
  248. package/packages/core/src/storage/hiveSeed.ts +0 -308
  249. package/packages/core/src/storage/hiveStorage.test.ts +0 -38
  250. package/packages/core/src/storage/schema.ts +0 -689
  251. package/packages/core/src/storage/storage.test.ts +0 -37
  252. package/packages/core/src/swarm/AgentBus.ts +0 -460
  253. package/packages/core/src/swarm/EventBus.ts +0 -169
  254. package/packages/core/src/swarm/WorkerPool.ts +0 -236
  255. package/packages/core/src/tools/bridge-events.ts +0 -26
  256. package/packages/core/src/tools/canvas/index.ts +0 -375
  257. package/packages/core/src/tools/codebridge/index.ts +0 -342
  258. package/packages/core/src/tools/meeting/index.ts +0 -353
  259. package/packages/core/src/tools/projects/index.ts +0 -37
  260. package/packages/core/src/tools/projects/project-create.ts +0 -94
  261. package/packages/core/src/tools/projects/project-done.ts +0 -66
  262. package/packages/core/src/tools/projects/project-fail.ts +0 -66
  263. package/packages/core/src/tools/projects/project-list.ts +0 -96
  264. package/packages/core/src/tools/projects/project-update.ts +0 -72
  265. package/packages/core/src/tools/projects/task-create.ts +0 -68
  266. package/packages/core/src/tools/projects/task-evaluate.ts +0 -93
  267. package/packages/core/src/tools/projects/task-update.ts +0 -93
  268. package/packages/core/src/tools/voice/index.ts +0 -104
  269. package/packages/core/src/tools/web/api-request.test.ts +0 -170
  270. package/packages/core/src/tools/web/api-request.ts +0 -239
  271. package/test/setup-db.ts +0 -216
  272. /package/packages/core/src/agent/{NativeTools.ts → native-tools.ts} +0 -0
@@ -1,5 +1,5 @@
1
- // AUTO-GENERATED by packages/skills/scripts/generate-bundle.ts
2
- // Do NOT edit manually — run `bun packages/skills/scripts/generate-bundle.ts` to regenerate
1
+ // AUTO-GENERATED by scripts/generate-skill-bundle.ts
2
+ // Do NOT edit manually — run `bun scripts/generate-skill-bundle.ts` to regenerate
3
3
 
4
4
  export interface BundledSkillEntry {
5
5
  name: string;
@@ -13,1223 +13,1122 @@ export interface BundledSkillEntry {
13
13
 
14
14
  export const BUNDLED_SKILLS_DATA: BundledSkillEntry[] = [
15
15
  {
16
- name: "file_read_and_summarize",
17
- description: `Read and understand file content with automatic summarization for large files`,
18
- category: "filesystem",
19
- version: "1.0.0",
20
- tools: ["project_read"],
21
- triggers: ["leé este archivo","read this file","mostrame el contenido","show content","qué dice este archivo","resumí este archivo","summarize this file","entendé este código","understand this code"],
16
+ name: "agent_spawner",
17
+ description: `Create and manage specialized worker agents with optimal tool assignments and lifecycle control`,
18
+ category: "agents",
19
+ version: "1.1.0",
20
+ tools: ["get_available_models","agent_find","agent_create","agent_archive"],
21
+ triggers: ["creá un agente","create agent","creá un worker","create worker","nuevo agente","new agent","agente especializado","specialized agent","buscá un agente","find agent","archivá agente","archive agent","worker inactivo","inactive worker"],
22
22
  body: `
23
- # File Read and Summarize Skill
23
+ # Agent Spawner Skill
24
24
 
25
25
  ## Cuándo se Activa
26
26
 
27
- Esta skill se activa cuando el usuario necesita leer y entender el contenido de un archivo, especialmente cuando:
28
- - El archivo es grande y necesita resumen
29
- - Se requiere comprensión del contenido (no solo lectura)
30
- - El usuario pide "qué dice", "resumí", "entendé"
27
+ Para crear nuevos workers especializados o gestionar el ciclo de vida de agents existentes.
28
+
29
+ > **Antes de crear nada**: la sección COLMENA DE AGENTES del system prompt ya lista workers listos para recibir trabajo (web, browser, archivos, código, Office, A2UI, cron y APIs). Crear un worker es el último recurso, excepto para MCP: si no existe un especialista del servidor, primero se pide autorización al usuario y luego se crea uno persistente.
31
30
 
32
31
  ## Herramientas Disponibles
33
32
 
34
33
  | Tool | Qué hace | Cuándo usarla |
35
34
  |------|----------|---------------|
36
- | \`project_read\` | Lee contenido de archivo del workspace | Lectura de cualquier archivo |
35
+ | \`get_available_models\` | Consulta providers y modelos activos de la BD | **ANTES de crear** seleccionar modelo óptimo |
36
+ | \`agent_find\` | Busca agents existentes | **PRIMERO** — antes de crear |
37
+ | \`agent_create\` | Crea nuevo worker | Si no existe apto |
38
+ | \`agent_archive\` | Archiva worker | Limpieza, inactivos |
37
39
 
38
40
  ## Workflow
39
41
 
40
- 1. **Verificar existencia** → \`project_exists({ path })\`
41
- 2. **Leer contenido** → \`project_read({ path, offset, limit })\`
42
- 3. **Sintetizar** → Resumir si es grande, extraer puntos clave
42
+ ### Crear Agent
43
+ 1. **Buscar** → \`agent_find({ search })\` — ¿existe?
44
+ 2. **Si existe** → Reutilizar
45
+ 3. **Si no existe** → \`get_available_models({ capabilities })\` — seleccionar modelo óptimo
46
+ 4. **Crear** → \`agent_create({...})\` con providerId y modelId seleccionados
47
+
48
+ Para MCP, incluí \`mcp_server_id\` y creá un agente por servidor. La tool rechaza duplicados y nunca debe llamarse antes de la confirmación del usuario.
49
+
50
+ ### Create Agent Config
51
+ \`\`\`javascript
52
+ // 1. Consultar modelos disponibles para coding
53
+ get_available_models({ capabilities: "coding" })
54
+ // → [{ providerId: "openai", modelId: "gpt-4o", contextWindow: 128000 }, ...]
55
+
56
+ // 2. Crear agente con modelo óptimo (providerId y modelId son OBLIGATORIOS)
57
+ agent_create({
58
+ name: "ai_coder",
59
+ description: "Experto en código y refactorización",
60
+ system_prompt: \`
61
+ Sos desarrollador experto. Tu rol:
62
+ 1. Escribir código limpio y testeable
63
+ 2. Refactorizar código existente
64
+ 3. Revisar PRs y sugerir mejoras
65
+ \`,
66
+ tools_json: ["fs_read", "fs_write", "fs_edit", "cli_exec"],
67
+ providerId: "openai", // OBLIGATORIO - seleccionado de get_available_models
68
+ modelId: "gpt-4o", // OBLIGATORIO - seleccionado de get_available_models
69
+ tone: "professional",
70
+ max_iterations: 15
71
+ })
72
+ \`\`\`
43
73
 
44
74
  ## Mejores Prácticas
45
75
 
46
- - Para archivos >1000 líneas, usar \`offset\` y \`limit\`
47
- - Identificar tipo de archivo por extensión y adaptar formato de resumen
48
- - Para código: identificar funciones, clases, exports principales
49
- - Para config: explicar settings clave en lenguaje simple
50
- - Para texto: extraer ideas principales
76
+ - **Buscar primero**: Nunca duplicar workers
77
+ - **Consultar modelos**: Usar \`get_available_models\` ANTES de crear para seleccionar provider/model óptimo
78
+ - **System prompt específico**: Enfocado en especialidad
79
+ - **Mínimo privilegio**: Solo tools necesarias
80
+ - **Nombres descriptivos**: Que indiquen propósito
81
+ - **Modelo adecuado**: Seleccionar según capacidad requerida (coding, chat, analysis, vision)
51
82
 
52
83
  ## Errores a Evitar
53
84
 
54
- - ❌ Leer sin verificar existencia
55
- - ❌ Retornar archivo completo sin resumir si es muy grande
56
- - ❌ No identificar tipo de archivo para adaptar resumen
85
+ - ❌ Crear sin buscar primero
86
+ - ❌ Crear sin consultar modelos disponibles (\`get_available_models\`)
87
+ - ❌ Usar modelo inadecuado para la tarea (ej: modelo pequeño para coding complejo)
88
+ - ❌ Tools en exceso ("por las dudas")
89
+ - ❌ System prompt genérico
90
+ - ❌ Nombres vagos ("worker1", "agent1")
57
91
  `,
58
92
  },
59
93
  {
60
- name: "file_manager",
61
- description: `Explore project structure and locate files using glob patterns and directory listing`,
62
- category: "filesystem",
94
+ name: "memory_manager",
95
+ description: `Complete management of persistent memory including write, read, search, list, and delete operations`,
96
+ category: "agents",
63
97
  version: "1.0.0",
64
- tools: ["project_list","project_glob","project_exists"],
65
- triggers: ["lista los archivos","list files","buscá archivos","find files","explorá el proyecto","explore project","qué archivos hay","what files exist","buscá por patrón","search by pattern","existe este archivo","file exists","dónde está","where is"],
98
+ tools: ["memory_write","memory_read","memory_list","memory_search","memory_delete"],
99
+ triggers: ["guardá en memoria","save to memory","recordá esto","remember this","leé la memoria","read memory","qué hay en memoria","what's in memory","buscá en memoria","search memory","lista las memorias","list memories","eliminá de memoria","delete from memory","preferencias","preferences","datos persistentes","persistent data"],
66
100
  body: `
67
- # File Manager Skill
101
+ # Memory Manager Skill
68
102
 
69
103
  ## Cuándo se Activa
70
104
 
71
- Esta skill se activa cuando el usuario necesita:
72
- - Explorar la estructura del proyecto
73
- - Buscar archivos por extensión o patrón
74
- - Verificar si existe un archivo o directorio
75
- - Encontrar la ubicación de un archivo
105
+ Para guardar, recuperar, buscar, listar o eliminar información persistente entre sesiones.
76
106
 
77
107
  ## Herramientas Disponibles
78
108
 
79
109
  | Tool | Qué hace | Cuándo usarla |
80
110
  |------|----------|---------------|
81
- | \`project_list\` | Lista directorios y archivos | Exploración inicial |
82
- | \`project_glob\` | Busca archivos por patrón wildcard | Búsqueda por extensión/patrón |
83
- | \`project_exists\` | Verifica existencia | Pre-check antes de operaciones |
111
+ | \`memory_write\` | Almacena con título único | Guardar preferencias, datos |
112
+ | \`memory_read\` | Recupera por título exacto | Cuando conocés el título |
113
+ | \`memory_list\` | Lista todos los títulos | Explorar qué hay guardado |
114
+ | \`memory_search\` | Busca por keywords | Cuando no recordás título exacto |
115
+ | \`memory_delete\` | Elimina entrada | Limpiar datos obsoletos |
84
116
 
85
117
  ## Workflow
86
118
 
87
- 1. **Explorar** → \`project_list({ path })\` para estructura general
88
- 2. **Buscar por patrón** → \`project_glob({ pattern })\` para tipos específicos
89
- 3. **Verificar** → \`project_exists({ path })\` para confirmación
119
+ ### Write
120
+ \`\`\`javascript
121
+ memory_write({
122
+ title: "Preferencias de Desarrollo",
123
+ content: "TypeScript, VS Code, Prettier single quotes"
124
+ })
125
+ \`\`\`
126
+
127
+ ### Read/Search
128
+ \`\`\`javascript
129
+ memory_read({ title: "Preferencias" }) // Título exacto
130
+ memory_search({ query: "preferencias" }) // Fuzzy match
131
+ \`\`\`
90
132
 
91
- ## Patrones Glob Comunes
133
+ ### List
134
+ \`\`\`javascript
135
+ memory_list({}) // Todos los títulos
136
+ \`\`\`
92
137
 
93
- | Patrón | Encuentra |
94
- |--------|-----------|
95
- | \`**/*.ts\` | Todos los TypeScript |
96
- | \`**/*.test.ts\` | Solo tests |
97
- | \`**/*.md\` | Documentación |
98
- | \`**/package.json\` | Todos los package.json |
99
- | \`src/**/*.tsx\` | React components en src |
138
+ ### Delete
139
+ \`\`\`javascript
140
+ memory_delete({ title: "Datos Temporales" })
141
+ \`\`\`
142
+
143
+ ## Mejores Prácticas
144
+
145
+ - Títulos descriptivos y únicos
146
+ - Agrupar datos relacionados en misma entrada
147
+ - Confirmar antes de sobrescribir
148
+ - No guardar datos sensibles
100
149
 
101
150
  ## Errores a Evitar
102
151
 
103
- - ❌ No verificar existencia antes de leer/editar
104
- - ❌ Usar project_list cuando se conoce el patrón (usar glob)
105
- - ❌ Patrones muy amplios sin filtrado
152
+ - ❌ Datos sensibles (passwords, API keys)
153
+ - ❌ Títulos genéricos ("Config", "Datos")
154
+ - ❌ Sobrescribir sin confirmar
155
+ - ❌ Entradas gigantes (split por tema)
106
156
  `,
107
157
  },
108
158
  {
109
- name: "file_writer",
110
- description: `Create, modify, and delete files with safe edit operations and confirmation for large changes`,
111
- category: "filesystem",
159
+ name: "research_and_remember",
160
+ description: `Research information from web sources and save findings to persistent memory`,
161
+ category: "agents",
112
162
  version: "1.0.0",
113
- tools: ["project_read","project_write","project_edit","project_exists"],
114
- triggers: ["creá un archivo","create a file","escribí en","write to","editá este archivo","edit this file","modificá","modify","eliminá el archivo","delete file","guardá esto","save this","actualizá el archivo","update file"],
163
+ tools: ["web_search","web_fetch","memory_write"],
164
+ triggers: ["investigá y guardá","research and save","buscá y recordá","find and remember","aprendé sobre","learn about","estudiá esto","study this","documentate y guardá","research and store"],
115
165
  body: `
116
- # File Writer Skill
166
+ # Research and Remember Skill
117
167
 
118
168
  ## Cuándo se Activa
119
169
 
120
- Esta skill se activa cuando el usuario necesita:
121
- - Crear nuevos archivos
122
- - Modificar contenido existente
123
- - Eliminar archivos
124
- - Guardar cambios
170
+ Para investigar temas en la web y guardar el conocimiento sintetizado en memoria persistente.
125
171
 
126
172
  ## Herramientas Disponibles
127
173
 
128
174
  | Tool | Qué hace | Cuándo usarla |
129
175
  |------|----------|---------------|
130
- | \`project_read\` | Lee archivo existente | Antes de editar para entender estructura |
131
- | \`project_write\` | Crea o sobreescribe archivo | Archivos nuevos o reescritura completa |
132
- | \`project_edit\` | Edita secciones específicas | Cambios puntuales (find/replace) |
133
- | \`project_exists\` | Verifica existencia | Para decidir crear vs editar |
176
+ | \`web_search\` | Busca en internet | Encontrar fuentes |
177
+ | \`web_fetch\` | Descarga contenido | Obtener detalles |
178
+ | \`memory_write\` | Guarda conocimiento | Almacenar para futuro |
134
179
 
135
180
  ## Workflow
136
181
 
137
- ### Crear Archivo Nuevo
138
- 1. \`project_exists({ path })\` → verificar no existe
139
- 2. \`project_write({ path, content })\` crear
182
+ 1. **Buscar** \`web_search({ query, numResults: 8 })\`
183
+ 2. **Fetch** → \`web_fetch({ urls: top 2-3 })\`
184
+ 3. **Sintetizar** Compilar hallazgos con estructura clara
185
+ 4. **Guardar** → \`memory_write({ title, content })\`
140
186
 
141
- ### Editar Archivo Existente
142
- 1. \`project_exists({ path })\` → verificar existe
143
- 2. \`project_read({ path })\` → entender estructura
144
- 3. \`project_edit({ path, old_string, new_string })\` → modificar
145
- 4. \`canvas_confirm()\` si cambios >50 líneas
187
+ ## Estructura de Conocimiento
146
188
 
147
- ### Eliminar Archivo
148
- 1. \`project_exists({ path })\` → verificar existe
149
- 2. \`canvas_confirm({ message: '¿Eliminar archivo?' })\` → confirmar
150
- 3. Operación de delete
189
+ \`\`\`markdown
190
+ # {Topic}
191
+
192
+ ## Summary
193
+ 2-3 oración resumen
194
+
195
+ ## Key Findings
196
+ - Punto clave 1
197
+ - Punto clave 2
198
+ - ...
199
+
200
+ ## Sources
201
+ - [Source 1](url)
202
+ - [Source 2](url)
203
+ \`\`\`
151
204
 
152
205
  ## Mejores Prácticas
153
206
 
154
- - **Leer antes de editar**: Nunca modificar sin entender estructura
155
- - **Edit vs Write**: Usar edit para cambios pequeños, write para nuevos archivos
156
- - **Confirmar cambios grandes**: >50 líneas requiere confirmación explícita
157
- - **Paths seguros**: Trabajar dentro del workspace por defecto
207
+ - Mínimo 2 searches para cobertura completa
208
+ - Cruzar información entre fuentes múltiples
209
+ - Incluir URLs para verificación
210
+ - Estructura clara con headings
211
+ - Flaggear información incierta
158
212
 
159
213
  ## Errores a Evitar
160
214
 
161
- - ❌ Editar sin leer primero
162
- - ❌ Sobreescribir sin confirmar si es cambio grande
163
- - ❌ Eliminar sin confirmación explícita
164
- - ❌ Usar write cuando edit es suficiente
215
+ - ❌ Una sola búsqueda (insuficiente)
216
+ - ❌ Sin fuentes (no verificable)
217
+ - ❌ Títulos vagos para memoria
218
+ - ❌ No flaggear información conflictiva
165
219
  `,
166
220
  },
167
221
  {
168
- name: "web_research",
169
- description: `Search and synthesize information from multiple web sources into structured reports`,
170
- category: "web",
171
- version: "1.0.0",
172
- tools: ["web_search","web_fetch"],
173
- triggers: ["investigá sobre","research","buscá información de","find information about","qué es","what is","explicame","explain","últimos avances","latest advances","tendencias de","trends in","información actualizada","current information"],
174
- body: `
175
- # Web Research Skill
222
+ name: "task_orchestrator",
223
+ description: `Orchestrate tasks across multiple workers with delegation, status tracking, and bus communication`,
224
+ category: "agents",
225
+ version: "1.2.0",
226
+ tools: ["get_available_models","task_delegate","task_list","task_status","agent_find","agent_create","bus_publish","bus_read"],
227
+ triggers: ["delegá esta tarea","delegate task","orquestá los workers","orchestrate workers","coordiná el equipo","coordinate team","estado de las tareas","task status","comunicá los workers","communicate workers","mensaje al bus","bus message","tarea en paralelo","parallel tasks"],
228
+ body: `# Task Orchestrator — referencia operativa
176
229
 
177
- ## Cuándo se Activa
230
+ La doctrina de orquestación (descomponer → delegar en paralelo → terminar el turno → sintetizar en el fan-in) está en tu system prompt. Esta skill es la referencia de las herramientas.
178
231
 
179
- Esta skill se activa cuando el usuario necesita información actualizada de internet, verificar datos, o investigar temas específicos.
232
+ ## Herramientas
180
233
 
181
- ## Herramientas Disponibles
234
+ | Tool | Qué hace | Cuándo |
235
+ |------|----------|--------|
236
+ | \`task_delegate\` | Persiste y asigna una tarea a un worker | Delegar. Preferí \`mode="async"\` |
237
+ | \`agent_find\` | Descubre workers del catálogo y propios | Antes de delegar. Nunca para comprobar ejecución |
238
+ | \`task_list\` | Lista ejecuciones reales persistidas | El usuario pregunta y no conocés IDs |
239
+ | \`task_status\` | Estado de tareas por ID | El usuario pide estado antes del fan-in |
240
+ | \`get_available_models\` | Providers y modelos activos | Antes de crear un worker |
241
+ | \`agent_create\` | Crea un worker nuevo | Último recurso: nada del catálogo sirve |
242
+ | \`bus_publish\` / \`bus_read\` | Mensajes entre workers | Dependencias entre workers en vuelo |
182
243
 
183
- | Tool | Qué hace | Cuándo usarla |
184
- |------|----------|---------------|
185
- | \`web_search\` | Busca en internet, devuelve títulos, URLs, snippets | Búsqueda inicial, encontrar fuentes |
186
- | \`web_fetch\` | Descarga contenido completo de URL (HTML→Markdown) | Profundizar en resultados específicos |
244
+ ## Fan-out
187
245
 
188
- ## Workflow
246
+ \`\`\`javascript
247
+ // Tres partes independientes → tres llamadas en la MISMA respuesta
248
+ task_delegate({ worker_id: "web_researcher", task_description: "...", mode: "async" })
249
+ task_delegate({ worker_id: "office_document_agent", task_description: "...", mode: "async" })
250
+ task_delegate({ worker_id: "schedule_automation_agent", task_description: "...", mode: "async" })
251
+ \`\`\`
189
252
 
190
- 1. **Búsqueda inicial** \`web_search({ query, numResults: 8 })\`
191
- 2. **Fetch contenido** → \`web_fetch({ urls: top 2-3 })\`
192
- 3. **Búsqueda complementaria** → Segundo search si hay gaps
193
- 4. **Síntesis** → summary + key points + sources
253
+ Cada llamada devuelve \`task_id\`, \`job_id\` y \`run_id\`: prueba de que la tarea quedó persistida.
194
254
 
195
- ## Mejores Prácticas
255
+ ## Fan-in
196
256
 
197
- - Queries específicos (máx 6 palabras)
198
- - Mínimo 2-3 fuentes independientes
199
- - Priorizar contenido reciente (<1 año)
200
- - Citas con URLs completas
257
+ Hive te reinvoca con:
201
258
 
202
- ## Errores a Evitar
259
+ \`\`\`
260
+ [Sistema] Todas las tareas delegadas de este turno alcanzaron estado terminal.
261
+ [{ task_id, worker_id, task, ok, result, error }, ...]
262
+ \`\`\`
203
263
 
204
- - Inventar datos no encontrados
205
- - ❌ Concluir con una sola búsqueda
206
- - No verificar fecha de fuentes
207
- - ❌ Copiar contenido literal (usar paráfrasis)
264
+ Sintetizá una sola respuesta. Las entradas con \`ok: false\` se reportan con su motivo real.
265
+
266
+ ## Crear un worker (último recurso)
267
+
268
+ \`\`\`javascript
269
+ get_available_models({ capabilities: "analysis" })
270
+ // → [{ providerId: "anthropic", modelId: "claude-sonnet-4-6", ... }]
271
+
272
+ agent_create({
273
+ name: "data_analyst",
274
+ description: "Experto en análisis de datos",
275
+ system_prompt: "Sos analista de datos experto...",
276
+ tools_json: ["web_search", "web_fetch", "save_note"],
277
+ providerId: "anthropic", // OBLIGATORIO
278
+ modelId: "claude-sonnet-4-6", // OBLIGATORIO
279
+ })
280
+ \`\`\`
281
+
282
+ Para una integración MCP sin especialista, pedí autorización primero. Si el usuario acepta, creá un worker con \`mcp_server_id\`; si participan varios servidores, creá o reutilizá uno por servidor. Nunca pases servidores MCP dinámicos a \`task_delegate\`.
283
+
284
+ ## Errores a evitar
285
+
286
+ - ❌ Serializar tareas independientes en vez de fan-out paralelo
287
+ - ❌ Polling con \`task_status\` esperando el resultado — el fan-in llega solo
288
+ - ❌ Declarar éxito antes de recibir el \`[Sistema]\`, o presentar \`ok=false\` como éxito
289
+ - ❌ Reportar éxito sin revisar \`acceptance\`/\`checks\` de la entrega, o ignorar un \`checks.status="failed"\`
290
+ - ❌ Corregir a mano lo que \`task_revise\` puede reencolar en el mismo worker
291
+ - ❌ Crear un worker que el catálogo ya cubre
292
+ - ❌ Delegar saludos, preguntas simples o la conversación
293
+ - ❌ Usar \`delegate_task\`, \`find_agent\`, \`create_agent\`, \`get_task_status\`, \`publish_to_bus\`, \`get_bus_messages\` — **no existen**
208
294
  `,
209
295
  },
210
296
  {
211
- name: "web_monitor",
212
- description: `Monitor changes in web sources and track updates over time with persistent memory`,
213
- category: "web",
297
+ name: "cli_pipeline",
298
+ description: `Execute shell commands and pipe output to files for logging and further processing`,
299
+ category: "cli",
214
300
  version: "1.0.0",
215
- tools: ["web_search","web_fetch","memory_write","memory_read"],
216
- triggers: ["monitoreá","monitor","seguí los cambios","track changes","avisame si cambia","notify if changes","actualización de","update on","novedades de","news about","cambios en","changes in"],
301
+ tools: ["cli_exec","fs_write"],
302
+ triggers: ["guardá el output","save output","pipeline","pipe to file","redireccioná el output","redirect output","log del comando","command log","ejecutá y guardá","run and save","resultado en archivo","result to file"],
217
303
  body: `
218
- # Web Monitor Skill
304
+ # CLI Pipeline Skill
219
305
 
220
306
  ## Cuándo se Activa
221
307
 
222
- Esta skill se activa cuando el usuario necesita:
223
- - Monitorear cambios en una URL específica
224
- - Recibir notificaciones de actualizaciones
225
- - Seguir novedades sobre un tema
226
- - Trackear evolución de contenido
308
+ Para ejecutar comandos y guardar el output en archivos para logging o procesamiento posterior.
227
309
 
228
310
  ## Herramientas Disponibles
229
311
 
230
312
  | Tool | Qué hace | Cuándo usarla |
231
313
  |------|----------|---------------|
232
- | \`web_fetch\` | Descarga contenido de URL | Obtener contenido actual |
233
- | \`web_search\` | Busca novedades | Monitoreo por tema (no URL fija) |
234
- | \`memory_write\` | Guarda baseline | Almacenar contenido para comparación |
235
- | \`memory_read\` | Recupera baseline anterior | Comparar con contenido actual |
314
+ | \`cli_exec\` | Ejecuta un comando con timeout y captura su salida | Comandos autorizados |
315
+ | \`fs_write\` | Escribe un archivo dentro del workspace | Guardar output |
236
316
 
237
317
  ## Workflow
238
318
 
239
- 1. **Primera ejecución**: \`web_fetch\` \`memory_write\` (baseline)
240
- 2. **Chequeos siguientes**: \`memory_read\` \`web_fetch\` comparar → \`notify\` si cambia
241
- 3. **Actualizar baseline**: \`memory_write\` con nuevo contenido
319
+ 1. **Validar comando**Seguro para ejecución
320
+ 2. **Ejecutar**Capturar stdout + stderr
321
+ 3. **Formatear** Agregar timestamp, comando, metadata
322
+ 4. **Escribir** → \`fs_write({ path, content })\`
323
+
324
+ ## Formato de Log
325
+
326
+ \`\`\`markdown
327
+ # Command Log
328
+
329
+ **Command**: npm install
330
+ **Timestamp**: 2025-03-09 14:30:00
331
+ **Exit Code**: 0
332
+ **Execution Time**: 45.2s
333
+
334
+ ---
335
+
336
+ ## Output
337
+
338
+ [stdout content...]
339
+ [stderr if any...]
340
+ \`\`\`
242
341
 
243
342
  ## Mejores Prácticas
244
343
 
245
- - Ignorar cambios menores (timestamps, ads, contenido dinámico irrelevante)
246
- - Notificar solo cambios significativos
247
- - Para monitoreo periódico, combinar con \`cron.create\`
344
+ - Filenames con timestamp para tracking
345
+ - Incluir metadata completa (exitCode, tiempo)
346
+ - Capturar stdout y stderr
347
+ - Para outputs grandes, escribir incrementalmente
248
348
 
249
349
  ## Errores a Evitar
250
350
 
251
- - ❌ No almacenar baseline inicial
252
- - ❌ Notificar por cambios triviales
253
- - ❌ No actualizar timestamp de baseline
351
+ - ❌ No incluir metadata en log
352
+ - ❌ Filenames genéricos sin timestamp
353
+ - ❌ No capturar stderr
254
354
  `,
255
355
  },
256
356
  {
257
- name: "browser_scrape",
258
- description: `Navigate to web pages and capture rendered content including screenshots for dynamic sites`,
259
- category: "web",
357
+ name: "cli_safe_exec",
358
+ description: `Execute shell commands safely with error handling, timeouts, and output validation`,
359
+ category: "cli",
260
360
  version: "1.0.0",
261
- tools: ["browser_navigate","browser_screenshot","web_fetch"],
262
- triggers: ["capturá el contenido","scrape content","obtené la página renderizada","get rendered page","sitios dinámicos","dynamic sites","web con javascript","javascript websites","tomá screenshot y contenido","screenshot and content"],
361
+ tools: ["cli_exec"],
362
+ triggers: ["ejecutá este comando","run this command","corré el comando","execute command","terminal","bash","shell","npm","yarn","bun","git","docker","comando de sistema","system command"],
263
363
  body: `
264
- # Browser Scrape Skill
364
+ # CLI Safe Exec Skill
265
365
 
266
366
  ## Cuándo se Activa
267
367
 
268
- Esta skill se activa para sitios web dinámicos que requieren JavaScript rendering, donde el contenido no está disponible en HTML estático.
368
+ Para ejecutar comandos de shell de forma segura con manejo de errores y timeouts.
269
369
 
270
370
  ## Herramientas Disponibles
271
371
 
272
372
  | Tool | Qué hace | Cuándo usarla |
273
373
  |------|----------|---------------|
274
- | \`browser_navigate\` | Navega y renderiza página completa | Sitios con JavaScript/SPA |
275
- | \`browser_screenshot\` | Captura estado visual | Evidencia de contenido renderizado |
276
- | \`web_fetch\` | Extrae texto como markdown | Contenido textual de página renderizada |
374
+ | \`exec\` | Ejecuta con validación y timeout | Comandos simples (<30s) |
375
+ | \`terminal\` | Ejecuta con entorno completo | Comandos complejos, Git, npm |
376
+
377
+ ## ⚠️ ADVERTENCIA CRÍTICA
378
+
379
+ **NUNCA usar para tareas programadas** — usar \`cron.create\` en su lugar.
277
380
 
278
381
  ## Workflow
279
382
 
280
- 1. **Navegar** → \`browser_navigate({ url })\` + esperar renderizado JS
281
- 2. **Capturar visual** → \`browser_screenshot()\`
282
- 3. **Extraer texto** → \`web_fetch()\`
283
- 4. **Combinar** → screenshot + texto para scrape completo
383
+ 1. **Validar** → Comando es seguro, no destructivo
384
+ 2. **Ejecutar** → \`exec\` o \`terminal\` con timeout apropiado
385
+ 3. **Parsear** → Check exitCode, stdout, stderr
386
+ 4. **Manejar error** → Si falló, analizar y sugerir fixes
284
387
 
285
- ## Mejores Prácticas
388
+ ## Timeouts Apropiados
286
389
 
287
- - Esperar renderizado completo de JavaScript
288
- - Para infinite scroll: hacer scroll y múltiples screenshots
289
- - Capturar antes y después de interacciones si es dinámico
390
+ | Tipo | Timeout |
391
+ |------|---------|
392
+ | Listar archivos | 10s |
393
+ | Git operations | 30s |
394
+ | npm install | 120s |
395
+ | npm run build | 120s |
396
+ | npm test | 180s |
397
+ | Docker builds | 300s |
290
398
 
291
399
  ## Errores a Evitar
292
400
 
293
- - ❌ No esperar renderizado JavaScript
294
- - ❌ Solo capturar HTML estático para sitios SPA
295
- - ❌ Ignorar términos de servicio del sitio
401
+ - ❌ Usar para cron (usar cron.create)
402
+ - ❌ Sin timeout apropiado
403
+ - ❌ Ignorar exitCode
404
+ - ❌ Comandos destructivos sin confirmar
296
405
  `,
297
406
  },
298
407
  {
299
- name: "browser_automate",
300
- description: `Automate web workflows with navigation, clicks, form filling, and visual verification`,
301
- category: "web",
408
+ name: "software_engineering",
409
+ description: `Implement, debug, and verify scoped software changes in an existing repository`,
410
+ category: "cli",
302
411
  version: "1.0.0",
303
- tools: ["browser_navigate","browser_click","browser_type","browser_screenshot"],
304
- triggers: ["automatizá el navegador","automate browser","completá el formulario","fill form","hacé clic en","click on","iniciá sesión","login","registrate","sign up","interactuá con la web","interact with website","flujo web","web workflow"],
412
+ tools: ["fs_read","fs_write","fs_edit","fs_list","fs_glob","fs_exists","cli_exec"],
413
+ triggers: ["implementar código","corregir bug","ejecutar tests","implement code","fix bug"],
305
414
  body: `
306
- # Browser Automate Skill
307
-
308
- ## Cuándo se Activa
309
-
310
- Esta skill se activa para automatizar flujos de interacción con aplicaciones web: logins, formularios, navegación programática.
311
-
312
- ## Herramientas Disponibles
313
-
314
- | Tool | Qué hace | Cuándo usarla |
315
- |------|----------|---------------|
316
- | \`browser_navigate\` | Navega a URL | Inicio de flujo |
317
- | \`browser_click\` | Click en elementos | Botones, enlaces, triggers |
318
- | \`browser_type\` | Escribe en inputs | Formularios, búsquedas |
319
- | \`browser_screenshot\` | Captura estado | Verificación visual |
415
+ # Ingeniería de software
320
416
 
321
- ## Workflow Típico
322
-
323
- 1. **Navegar** URL inicial
324
- 2. **Interactuar** click/type según flujo
325
- 3. **Verificar** screenshot después de acciones críticas
326
- 4. **Repetir** → para flujos multi-paso
327
-
328
- ## Mejores Prácticas
417
+ 1. Inspecciona estructura, convenciones y cambios existentes.
418
+ 2. Determina la causa o el cambio mínimo antes de editar.
419
+ 3. Conserva cambios ajenos y limita el diff al objetivo.
420
+ 4. Ejecuta tests, typecheck o build proporcionales al riesgo.
421
+ 5. Entrega archivos cambiados, comandos ejecutados, resultados y riesgos.
329
422
 
330
- - Selectores estables (IDs > classes > XPath)
331
- - Esperar carga después de navegación
332
- - Verificar estado visual con screenshots
333
- - Manejar errores de elementos no encontrados
334
-
335
- ## Errores a Evitar
336
-
337
- - ❌ Selectores frágiles que cambian
338
- - ❌ No esperar carga de página
339
- - ❌ Ignorar errores de elementos
340
- - ❌ No verificar estado después de acciones
423
+ No publiques, no delegues y no uses comandos destructivos sin autorización explícita.
341
424
  `,
342
425
  },
343
426
  {
344
- name: "web_browser_research",
345
- description: `Search the web and navigate results with a real browser to extract content from dynamic or JavaScript-heavy sites`,
346
- category: "web",
347
- version: "1.0.0",
348
- tools: ["web_search","browser_navigate","browser_extract","web_fetch"],
349
- triggers: ["investigá en web con navegador","web browser research","buscá y navegá","search and browse","research with browser","navegá los resultados","browse search results","contenido dinámico","dynamic content research","sitios con javascript","javascript sites research"],
427
+ name: "cron_manager",
428
+ description: `Manage Hive scheduled automations. Create, list, update, pause, resume, delete, trigger, and inspect recurring or one-shot jobs.`,
429
+ category: "cron",
430
+ version: "2.0.0",
431
+ tools: ["cron.create","cron.list","cron.update","cron.delete","cron.pause","cron.resume","cron.trigger","cron.history"],
432
+ triggers: ["programá una tarea","schedule task","creá un cron","create cron","editá el cron","edit cron","eliminá el cron","remove cron","lista las tareas","list cron jobs","modificá el cron","modify cron","tarea recurrente","recurring task","todos los días","daily","cada semana","weekly"],
350
433
  body: `
351
- # Web Browser Research Skill
434
+ # Cron Manager Skill
352
435
 
353
436
  ## Cuándo se Activa
354
437
 
355
- Esta skill se activa cuando el usuario necesita investigación web profunda, especialmente cuando:
356
- - Los resultados de búsqueda pueden requerir navegación real por sitios dinámicos.
357
- - El contenido objetivo está renderizado con JavaScript (SPAs, dashboards, etc.).
358
- - Se necesita extraer datos estructurados de páginas web.
438
+ Para gestionar tareas programadas (cron jobs): crear, listar, actualizar, pausar, reanudar, eliminar, ejecutar y ver historial.
359
439
 
360
440
  ## Herramientas Disponibles
361
441
 
362
442
  | Tool | Qué hace | Cuándo usarla |
363
443
  |------|----------|---------------|
364
- | \`web_search\` | Busca en internet y devuelve resultados | Encontrar URLs relevantes |
365
- | \`browser_navigate\` | Navega y renderiza la página completa | Sitios dinámicos con JavaScript |
366
- | \`browser_extract\` | Extrae datos con selectores CSS/XPath | Obtener contenido estructurado |
367
- | \`web_fetch\` | Descarga contenido estático | Páginas simples o respaldo |
444
+ | \`cron.create\` | Crear cron job | Nueva tarea |
445
+ | \`cron.list\` | Listar todos | Ver existentes |
446
+ | \`cron.update\` | Actualizar existente | Cambiar horario/instrucción |
447
+ | \`cron.pause\` | Pausar temporalmente | Sin eliminar |
448
+ | \`cron.resume\` | Reanudar pausado | Continuar ejecución |
449
+ | \`cron.delete\` | Eliminar permanentemente | Cancelar para siempre |
450
+ | \`cron.trigger\` | Ejecutar ahora | Forzar ejecución |
451
+ | \`cron.history\` | Ver historial | Ver logs de ejecuciones |
368
452
 
369
- ## Workflow
453
+ ## Campos Principales
370
454
 
371
- 1. **Buscar** \`web_search({ query, numResults: 5 })\`
372
- 2. **Seleccionar fuentes** → Elegir 2-3 URLs relevantes y confiables.
373
- 3. **Navegar** \`browser_navigate({ url })\` para cada fuente dinámica.
374
- 4. **Extraer** \`browser_extract({ selector: "article, .content, main" })\` o similar.
375
- 5. **Respaldo estático** Si el browser falla, usar \`web_fetch({ url })\`.
376
- 6. **Sintetizar** Responder con puntos clave y citas con URLs completas.
455
+ | Campo | Tipo | Descripción |
456
+ |-------|------|-------------|
457
+ | \`name\` | string | Identificador corto (e.g., 'daily-report') |
458
+ | \`task\` | string | **REQUERIDO** - Instrucciones para el agente al ejecutarse |
459
+ | \`task_type\` | string | 'recurring' (repite) o 'one_shot' (una vez) |
460
+ | \`cron_expression\` | string | Expresión cron (solo para recurring) |
461
+ | \`fire_at\` | string | Datetime ISO (solo para one_shot) |
462
+ | \`channel\` | string | Canal de notificación |
463
+ | \`start_at\` | string | Inicio de ventana opcional (Croner startAt) |
464
+ | \`stop_at\` | string | Fin de ventana opcional (Croner stopAt) |
465
+ | \`dom_and_dow\` | number | 0=OR (default), 1=AND (día mes + día semana) |
377
466
 
378
- ## Mejores Prácticas
467
+ ## Cron Expression Format
379
468
 
380
- - Priorizar sitios oficiales, documentación y fuentes primarias.
381
- - Usar selectores estables (etiquetas semánticas como \`article\`, \`main\`).
382
- - Si el contenido es largo, extraer por secciones.
383
- - Siempre incluir URLs de fuentes en la respuesta final.
469
+ \`\`\`
470
+ * * * * *
471
+
472
+ └── Día semana (0-6, 0=Domingo)
473
+ │ │ │ └──── Mes (1-12)
474
+ │ │ └────── Día del mes (1-31)
475
+ │ └──────── Hora (0-23)
476
+ └────────── Minuto (0-59)
477
+ \`\`\`
384
478
 
385
- ## Errores a Evitar
479
+ ## Ejemplos Comunes
386
480
 
387
- - Usar solo \`web_fetch\` para SPAs sin probar el browser primero.
388
- - ❌ Seleccionar selectores frágiles basados en clases aleatorias.
389
- - No citar las fuentes usadas.
390
- - Confundir snippets de búsqueda con contenido completo verificado.
391
- `,
392
- },
393
- {
394
- name: "project_planner",
395
- description: `Create comprehensive projects with structured tasks and worker assignments`,
396
- category: "projects",
397
- version: "1.0.0",
398
- tools: ["project_create","task_create"],
399
- triggers: ["creá un proyecto","create project","planificá","plan","organizá este trabajo","organize this work","estructurá el proyecto","structure project","descomponé en tareas","break down into tasks"],
400
- body: `
401
- # Project Planner Skill
481
+ | Expresión | Significado |
482
+ |-----------|-------------|
483
+ | \`0 9 * * *\` | Diario 9:00 AM |
484
+ | \`0 7 * * 1-5\` | Lun-Vie 7:00 AM |
485
+ | \`0 */2 * * *\` | Cada 2 horas |
486
+ | \`0 0 * * 0\` | Domingos medianoche |
487
+ | \`0 0 1 * *\` | Día 1 de cada mes |
402
488
 
403
- ## Cuándo se Activa
489
+ ## Cómo Usar start_at / stop_at
404
490
 
405
- Para planificar y estructurar proyectos complejos que requieren coordinación de múltiples workers.
491
+ - \`start_at\`: La tarea no ejecuta antes de esta fecha
492
+ - \`stop_at\`: La tarea no ejecuta después de esta fecha
493
+ - Formato ISO: \`'2026-04-01T00:00:00'\`
406
494
 
407
- ## Herramientas Disponibles
495
+ ## Cómo Usar dom_and_dow
408
496
 
409
- | Tool | Qué hace | Cuándo usarla |
410
- |------|----------|---------------|
411
- | \`project_create\` | Crea proyecto con tasks | Estructura inicial |
412
- | \`task_create\` | Agrega tasks adicionales | Expandir proyecto |
497
+ - \`0\` (default): Se ejecuta si es el día del mes O el día de semana
498
+ - \`1\`: Se ejecuta solo si es EL MISMO día del mes Y el día de semana
413
499
 
414
- ## Workflow
500
+ Ejemplo: \`0 9 15 * *\` con dom_and_dow=1 significa "los 15 de cada mes QUE SEA domingo"
501
+
502
+ ## Workflow para Crear
415
503
 
416
- 1. **Clarificar** → Entender objetivos y deliverables
417
- 2. **Descomponer** → Dividir en tareas atómicas
418
- 3. **Crear proyecto** → \`project_create({ name, description, tasks })\`
419
- 4. **Asignar** → agent_id en tasks (o null si hay que crear workers)
504
+ 1. **Preguntar** → ¿one_shot o recurring?
505
+ 2. **Obtener** → Hora y canal de notificación
506
+ 3. **Crear** → \`cron.create\` con campo \`task\` obligatorio
507
+ 4. **Confirmar** → \`cron.list\` mostrar next runs
420
508
 
421
509
  ## Errores a Evitar
422
510
 
423
- - ❌ Crear proyecto para tareas simples
424
- - ❌ Tasks muy grandes o vagas
425
- - ❌ No definir criterios de aceptación
511
+ - ❌ Olvidar el campo \`task\` — es obligatorio
512
+ - ❌ Usar exec para tareas programadas
513
+ - ❌ No preguntar si es one_shot o recurring
514
+ - ❌ No mostrar próximos horarios al crear
515
+ - ❌ Llamar \`cron.update\` sin \`task_id\` — siempre hacer \`cron.list\` primero
426
516
  `,
427
517
  },
428
518
  {
429
- name: "project_tracker",
430
- description: `Track project progress and update task status with real-time monitoring`,
431
- category: "projects",
432
- version: "1.0.0",
433
- tools: ["project_list","project_update","task_update"],
434
- triggers: ["cómo va el proyecto","project status","actualizá el progreso","update progress","seguimiento del proyecto","project tracking","lista los proyectos","list projects","qué tareas están en curso","tasks in progress","avance del proyecto","project progress"],
519
+ name: "cron_reminder",
520
+ description: `Schedule a reminder for yourself at a specific time. Creates a one_shot cron job that sends a notification message via your preferred channel.`,
521
+ category: "cron",
522
+ version: "2.0.0",
523
+ tools: ["cron.create","notify"],
524
+ triggers: ["recordame","remind me","recordatorio","reminder","alerta","alert","avísame","notify me","programá","schedule","para mañana","for tomorrow","en 30 minutos","in 30 minutes"],
435
525
  body: `
436
- # Project Tracker Skill
526
+ # Cron Reminder Skill
437
527
 
438
528
  ## Cuándo se Activa
439
529
 
440
- Para monitorear y actualizar el progreso de proyectos y tareas en curso.
530
+ Para crear recordatorios de una sola ejecución (one_shot): "recuerdame a las 3pm", "avísame en 30 minutos", etc.
441
531
 
442
- ## Herramientas Disponibles
532
+ ## Herramientas
443
533
 
444
- | Tool | Qué hace | Cuándo usarla |
445
- |------|----------|---------------|
446
- | \`project_list\` | Lista proyectos | Ver todos o filtrar por estado |
447
- | \`task_update\` | Actualiza estado de tarea | Worker completa o cambia estado |
448
- | \`project_update\` | Actualiza progreso general | Milestones del proyecto |
534
+ | Tool | Qué hace |
535
+ |------|----------|
536
+ | \`cron.create\` | Crear recordatorio one_shot |
537
+ | \`notify\` | Enviar notificación directa |
449
538
 
450
- ## Workflow
539
+ ## Cómo Funciona
451
540
 
452
- 1. **Listar** → \`project_list()\` para encontrar proyecto
453
- 2. **Actualizar tasks** → \`task_update()\` cuando workers entregan
454
- 3. **Actualizar proyecto** → \`project_update()\` con progreso calculado
541
+ 1. **Preguntar** → ¿De qué te aviso? ¿A qué hora? ¿Por qué canal?
542
+ 2. **Crear** → \`cron.create\` con \`task_type: 'one_shot'\` y \`fire_at\` en formato ISO
543
+ 3. **Confirmar** → Mostrar hora programada
455
544
 
456
- ## Mejores Prácticas
545
+ ## Parámetros
457
546
 
458
- - Actualizar inmediatamente cuando worker entrega
459
- - Calcular progreso como promedio de tasks completadas
460
- - Notificar milestones (25%, 50%, 75%, 100%)
461
- - Marcar 'at_risk' si task crítica está bloqueada
547
+ | Campo | Descripción |
548
+ |-------|-------------|
549
+ | \`task\` | **REQUERIDO** - Mensaje del recordatorio |
550
+ | \`task_type\` | Siempre \`'one_shot'\` |
551
+ | \`fire_at\` | Fecha/hora ISO (ej: \`'2026-04-20T15:00:00'\`) |
552
+ | \`channel\` | Canal (telegram, discord, whatsapp, webchat) |
462
553
 
463
- ## Errores a Evitar
554
+ ## Errores Comunes
464
555
 
465
- - ❌ Dejar estado desactualizado
466
- - ❌ No notificar blockers
467
- - ❌ Progreso incorrecto vs realidad
556
+ - ❌ Olvidar el campo \`task\` — obligatorio para que el agente sepa qué enviar
557
+ - ❌ Usar expresiones cron para recordatorios (usar \`fire_at\` en vez de \`cron_expression\`)
558
+ - ❌ Poner \`fire_at\` en el pasado
468
559
  `,
469
560
  },
470
561
  {
471
- name: "project_closer",
472
- description: `Evaluate task results and close projects with comprehensive summaries or failure analysis`,
473
- category: "projects",
562
+ name: "file_manager",
563
+ description: `Explore project structure and locate files using glob patterns and directory listing`,
564
+ category: "filesystem",
474
565
  version: "1.0.0",
475
- tools: ["task_evaluate","project_done","project_fail"],
476
- triggers: ["cerrá el proyecto","close project","proyecto terminado","project done","proyecto fallido","project failed","evaluá la tarea","evaluate task","resumen final","final summary","lecciones aprendidas","lessons learned"],
566
+ tools: ["fs_list","fs_glob","fs_exists"],
567
+ triggers: ["lista los archivos","list files","buscá archivos","find files","explorá el proyecto","explore project","qué archivos hay","what files exist","buscá por patrón","search by pattern","existe este archivo","file exists","dónde está","where is"],
477
568
  body: `
478
- # Project Closer Skill
569
+ # File Manager Skill
479
570
 
480
571
  ## Cuándo se Activa
481
572
 
482
- Para evaluar resultados y cerrar proyectos completados o fallidos.
573
+ Esta skill se activa cuando el usuario necesita:
574
+ - Explorar la estructura del proyecto
575
+ - Buscar archivos por extensión o patrón
576
+ - Verificar si existe un archivo o directorio
577
+ - Encontrar la ubicación de un archivo
483
578
 
484
579
  ## Herramientas Disponibles
485
580
 
486
581
  | Tool | Qué hace | Cuándo usarla |
487
582
  |------|----------|---------------|
488
- | \`task_evaluate\` | Evalúa tarea con criterios | Validar calidad antes de cerrar |
489
- | \`project_done\` | Marca proyecto completado | Todas las tasks passing |
490
- | \`project_fail\` | Marca proyecto fallido | Error irrecuperable |
583
+ | \`fs_list\` | Lista directorios y archivos | Exploración inicial |
584
+ | \`fs_glob\` | Busca archivos por patrón wildcard | Búsqueda por extensión/patrón |
585
+ | \`fs_exists\` | Verifica existencia | Pre-check antes de operaciones |
491
586
 
492
587
  ## Workflow
493
588
 
494
- ### Cierre Exitoso
495
- 1. **Evaluar tasks** → \`task_evaluate({ criteria })\`
496
- 2. **Verificar todas** → Todas completadas
497
- 3. **Cerrar** → \`project_done({ summary })\`
498
-
499
- ### Cierre por Fallo
500
- 1. **Identificar fallo** → Task crítica falló
501
- 2. **Analizar causa** → Root cause
502
- 3. **Cerrar** → \`project_fail({ reason, lessons })\`
589
+ 1. **Explorar** → \`fs_list({ path })\` para estructura general
590
+ 2. **Buscar por patrón** → \`fs_glob({ pattern })\` para tipos específicos
591
+ 3. **Verificar** → \`fs_exists({ path })\` para confirmación
503
592
 
504
- ## Mejores Prácticas
593
+ ## Patrones Glob Comunes
505
594
 
506
- - Criterios de aceptación medibles y específicos
507
- - Resumen ejecutivo con outcomes medibles
508
- - Lecciones aprendidas accionables en failure
595
+ | Patrón | Encuentra |
596
+ |--------|-----------|
597
+ | \`**/*.ts\` | Todos los TypeScript |
598
+ | \`**/*.test.ts\` | Solo tests |
599
+ | \`**/*.md\` | Documentación |
600
+ | \`**/package.json\` | Todos los package.json |
601
+ | \`src/**/*.tsx\` | React components en src |
509
602
 
510
603
  ## Errores a Evitar
511
604
 
512
- - ❌ Cerrar sin evaluar todas las tasks
513
- - ❌ project_fail sin análisis de causa raíz
514
- - ❌ Resúmenes vagos sin datos concretos
605
+ - ❌ No verificar existencia antes de leer/editar
606
+ - ❌ Usar fs_list cuando se conoce el patrón (usar glob)
607
+ - ❌ Patrones muy amplios sin filtrado
515
608
  `,
516
609
  },
517
610
  {
518
- name: "cli_safe_exec",
519
- description: `Execute shell commands safely with error handling, timeouts, and output validation`,
520
- category: "cli",
611
+ name: "file_read_and_summarize",
612
+ description: `Read and understand file content with automatic summarization for large files`,
613
+ category: "filesystem",
521
614
  version: "1.0.0",
522
- tools: ["exec","terminal"],
523
- triggers: ["ejecutá este comando","run this command","corré el comando","execute command","terminal","bash","shell","npm","yarn","bun","git","docker","comando de sistema","system command"],
615
+ tools: ["fs_read","fs_exists"],
616
+ triggers: ["leé este archivo","read this file","mostrame el contenido","show content","qué dice este archivo","resumí este archivo","summarize this file","entendé este código","understand this code"],
524
617
  body: `
525
- # CLI Safe Exec Skill
618
+ # File Read and Summarize Skill
526
619
 
527
620
  ## Cuándo se Activa
528
621
 
529
- Para ejecutar comandos de shell de forma segura con manejo de errores y timeouts.
622
+ Esta skill se activa cuando el usuario necesita leer y entender el contenido de un archivo, especialmente cuando:
623
+ - El archivo es grande y necesita resumen
624
+ - Se requiere comprensión del contenido (no solo lectura)
625
+ - El usuario pide "qué dice", "resumí", "entendé"
530
626
 
531
627
  ## Herramientas Disponibles
532
628
 
533
629
  | Tool | Qué hace | Cuándo usarla |
534
630
  |------|----------|---------------|
535
- | \`exec\` | Ejecuta con validación y timeout | Comandos simples (<30s) |
536
- | \`terminal\` | Ejecuta con entorno completo | Comandos complejos, Git, npm |
537
-
538
- ## ⚠️ ADVERTENCIA CRÍTICA
539
-
540
- **NUNCA usar para tareas programadas** — usar \`cron.create\` en su lugar.
631
+ | \`fs_exists\` | Comprueba que el path exista | Antes de leer |
632
+ | \`fs_read\` | Lee contenido de archivo del workspace | Lectura de cualquier archivo |
541
633
 
542
634
  ## Workflow
543
635
 
544
- 1. **Validar** → Comando es seguro, no destructivo
545
- 2. **Ejecutar** → \`exec\` o \`terminal\` con timeout apropiado
546
- 3. **Parsear** → Check exitCode, stdout, stderr
547
- 4. **Manejar error** → Si falló, analizar y sugerir fixes
636
+ 1. **Verificar existencia** → \`fs_exists({ path })\`
637
+ 2. **Leer contenido** → \`fs_read({ path, offset, limit })\`
638
+ 3. **Sintetizar** → Resumir si es grande, extraer puntos clave
548
639
 
549
- ## Timeouts Apropiados
640
+ ## Mejores Prácticas
550
641
 
551
- | Tipo | Timeout |
552
- |------|---------|
553
- | Listar archivos | 10s |
554
- | Git operations | 30s |
555
- | npm install | 120s |
556
- | npm run build | 120s |
557
- | npm test | 180s |
558
- | Docker builds | 300s |
642
+ - Para archivos >1000 líneas, usar \`offset\` y \`limit\`
643
+ - Identificar tipo de archivo por extensión y adaptar formato de resumen
644
+ - Para código: identificar funciones, clases, exports principales
645
+ - Para config: explicar settings clave en lenguaje simple
646
+ - Para texto: extraer ideas principales
559
647
 
560
648
  ## Errores a Evitar
561
649
 
562
- - ❌ Usar para cron (usar cron.create)
563
- - ❌ Sin timeout apropiado
564
- - ❌ Ignorar exitCode
565
- - ❌ Comandos destructivos sin confirmar
650
+ - ❌ Leer sin verificar existencia
651
+ - ❌ Retornar archivo completo sin resumir si es muy grande
652
+ - ❌ No identificar tipo de archivo para adaptar resumen
566
653
  `,
567
654
  },
568
655
  {
569
- name: "cli_pipeline",
570
- description: `Execute shell commands and pipe output to files for logging and further processing`,
571
- category: "cli",
656
+ name: "file_writer",
657
+ description: `Create, modify, and delete files with safe edit operations after required authorization`,
658
+ category: "filesystem",
572
659
  version: "1.0.0",
573
- tools: ["exec","terminal","project_write"],
574
- triggers: ["guardá el output","save output","pipeline","pipe to file","redireccioná el output","redirect output","log del comando","command log","ejecutá y guardá","run and save","resultado en archivo","result to file"],
660
+ tools: ["fs_read","fs_write","fs_edit","fs_exists"],
661
+ triggers: ["creá un archivo","create a file","escribí en","write to","editá este archivo","edit this file","modificá","modify","eliminá el archivo","delete file","guardá esto","save this","actualizá el archivo","update file"],
575
662
  body: `
576
- # CLI Pipeline Skill
663
+ # File Writer Skill
577
664
 
578
665
  ## Cuándo se Activa
579
666
 
580
- Para ejecutar comandos y guardar el output en archivos para logging o procesamiento posterior.
667
+ Esta skill se activa cuando el usuario necesita:
668
+ - Crear nuevos archivos
669
+ - Modificar contenido existente
670
+ - Eliminar archivos
671
+ - Guardar cambios
581
672
 
582
673
  ## Herramientas Disponibles
583
674
 
584
675
  | Tool | Qué hace | Cuándo usarla |
585
676
  |------|----------|---------------|
586
- | \`exec\` | Ejecuta comando | Comandos simples |
587
- | \`terminal\` | Ejecuta con entorno | Comandos complejos |
588
- | \`project_write\` | Escribe archivo | Guardar output |
677
+ | \`fs_read\` | Lee archivo existente | Antes de editar para entender estructura |
678
+ | \`fs_write\` | Crea o sobreescribe archivo | Archivos nuevos o reescritura completa |
679
+ | \`fs_edit\` | Edita secciones específicas | Cambios puntuales (find/replace) |
680
+ | \`fs_exists\` | Verifica existencia | Para decidir crear vs editar |
589
681
 
590
682
  ## Workflow
591
683
 
592
- 1. **Validar comando** → Seguro para ejecución
593
- 2. **Ejecutar**Capturar stdout + stderr
594
- 3. **Formatear** Agregar timestamp, comando, metadata
595
- 4. **Escribir** → \`project_write({ path, content })\`
596
-
597
- ## Formato de Log
598
-
599
- \`\`\`markdown
600
- # Command Log
601
-
602
- **Command**: npm install
603
- **Timestamp**: 2025-03-09 14:30:00
604
- **Exit Code**: 0
605
- **Execution Time**: 45.2s
606
-
607
- ---
684
+ ### Crear Archivo Nuevo
685
+ 1. \`fs_exists({ path })\` verificar no existe
686
+ 2. \`fs_write({ path, content })\` crear
608
687
 
609
- ## Output
688
+ ### Editar Archivo Existente
689
+ 1. \`fs_exists({ path })\` → verificar existe
690
+ 2. \`fs_read({ path })\` → entender estructura
691
+ 3. \`fs_edit({ path, old_string, new_string })\` → modificar
692
+ 4. Ejecutar únicamente dentro del alcance autorizado por el coordinador
610
693
 
611
- [stdout content...]
612
- [stderr if any...]
613
- \`\`\`
694
+ ### Eliminar Archivo
695
+ 1. \`fs_exists({ path })\` → verificar existe
696
+ 2. Verificar que el coordinador ya obtuvo autorización explícita
697
+ 3. \`fs_delete({ path })\`
614
698
 
615
699
  ## Mejores Prácticas
616
700
 
617
- - Filenames con timestamp para tracking
618
- - Incluir metadata completa (exitCode, tiempo)
619
- - Capturar stdout y stderr
620
- - Para outputs grandes, escribir incrementalmente
701
+ - **Leer antes de editar**: Nunca modificar sin entender estructura
702
+ - **Edit vs Write**: Usar edit para cambios pequeños, write para nuevos archivos
703
+ - **Respetar autorización**: las confirmaciones se gestionan previamente desde el panel interactivo
704
+ - **Paths seguros**: Trabajar dentro del workspace por defecto
621
705
 
622
706
  ## Errores a Evitar
623
707
 
624
- - ❌ No incluir metadata en log
625
- - ❌ Filenames genéricos sin timestamp
626
- - ❌ No capturar stderr
708
+ - ❌ Editar sin leer primero
709
+ - ❌ Ampliar el alcance autorizado
710
+ - ❌ Eliminar sin autorización explícita previa
711
+ - ❌ Usar write cuando edit es suficiente
627
712
  `,
628
713
  },
629
714
  {
630
- name: "memory_manager",
631
- description: `Complete management of persistent memory including write, read, search, list, and delete operations`,
632
- category: "agents",
715
+ name: "workspace_file_operator",
716
+ description: `Safely create, read, edit, organize, and verify files or folders inside an authorized workspace`,
717
+ category: "filesystem",
633
718
  version: "1.0.0",
634
- tools: ["memory_write","memory_read","memory_list","memory_search","memory_delete"],
635
- triggers: ["guardá en memoria","save to memory","recordá esto","remember this","leé la memoria","read memory","qué hay en memoria","what's in memory","buscá en memoria","search memory","lista las memorias","list memories","eliminá de memoria","delete from memory","preferencias","preferences","datos persistentes","persistent data"],
719
+ tools: ["fs_read","fs_write","fs_edit","fs_delete","fs_list","fs_glob","fs_exists"],
720
+ triggers: ["crear carpeta","organizar archivos","editar archivo","create folder","manage files"],
636
721
  body: `
637
- # Memory Manager Skill
722
+ # Operación segura del workspace
723
+
724
+ 1. Resuelve todas las rutas contra el workspace asignado.
725
+ 2. Comprueba el estado inicial con \`fs_exists\`, \`fs_list\` o \`fs_read\`.
726
+ 3. Aplica la operación mínima solicitada.
727
+ 4. Verifica el estado final mediante readback.
728
+
729
+ Nunca accedas fuera del workspace ni declares éxito basándote solo en el resultado de una escritura.
730
+ `,
731
+ },
732
+ {
733
+ name: "office_document_manager",
734
+ description: `Leer, crear y manipular archivos Office (PDF, Word, Excel, PowerPoint) desde el workspace`,
735
+ category: "office",
736
+ version: "1.0.0",
737
+ tools: ["office_leer_pdf","office_escribir_pdf","office_leer_docx","office_escribir_docx","office_leer_xlsx","office_escribir_xlsx","office_leer_pptx","office_escribir_pptx"],
738
+ triggers: ["leer pdf","abrir pdf","extraer texto de pdf","pdf a texto","crear pdf","generar pdf","exportar a pdf","leer word","abrir docx","extraer texto de word","crear word","generar docx","documento word","leer excel","abrir xlsx","datos de excel","crear excel","generar xlsx","exportar a excel","leer powerpoint","abrir pptx","presentacion","diapositivas","crear presentacion","generar pptx","read pdf","open pdf","create pdf","read excel","create excel","read word","create word","read powerpoint","create presentation"],
739
+ body: `
740
+ # Office Document Manager Skill
638
741
 
639
742
  ## Cuándo se Activa
640
743
 
641
- Para guardar, recuperar, buscar, listar o eliminar información persistente entre sesiones.
744
+ Esta skill se activa cuando el usuario necesita:
745
+ - **Leer** archivos PDF, Word (.docx), Excel (.xlsx) o PowerPoint (.pptx)
746
+ - **Generar** nuevos archivos en cualquiera de esos formatos
747
+ - **Convertir** contenido entre formatos (ej: texto → PDF, JSON → Excel)
748
+ - **Extraer** datos estructurados de documentos (tablas de Excel, slides de presentación)
642
749
 
643
750
  ## Herramientas Disponibles
644
751
 
645
752
  | Tool | Qué hace | Cuándo usarla |
646
753
  |------|----------|---------------|
647
- | \`memory_write\` | Almacena con título único | Guardar preferencias, datos |
648
- | \`memory_read\` | Recupera por título exacto | Cuando conocés el título |
649
- | \`memory_list\` | Lista todos los títulos | Explorar qué hay guardado |
650
- | \`memory_search\` | Busca por keywords | Cuando no recordás título exacto |
651
- | \`memory_delete\` | Elimina entrada | Limpiar datos obsoletos |
754
+ | \`office_leer_pdf\` | Extrae texto + metadata de PDF | Leer informes, contratos, libros en PDF |
755
+ | \`office_escribir_pdf\` | Genera PDF desde texto | Crear reportes, resúmenes, documentación |
756
+ | \`office_leer_docx\` | Extrae texto y tablas de Word | Leer documentos, contratos, informes Word |
757
+ | \`office_escribir_docx\` | Genera Word con estructura | Crear documentos formales con títulos/tablas |
758
+ | \`office_leer_xlsx\` | Lee hojas de Excel como JSON | Procesar datos, tablas, inventarios |
759
+ | \`office_escribir_xlsx\` | Genera Excel desde JSON | Exportar datos, crear reportes tabulares |
760
+ | \`office_leer_pptx\` | Extrae texto de cada slide | Resumir presentaciones, extraer contenido |
761
+ | \`office_escribir_pptx\` | Genera presentación PowerPoint | Crear slides desde datos o resúmenes |
652
762
 
653
- ## Workflow
763
+ ## Workflow por Caso de Uso
654
764
 
655
- ### Write
656
- \`\`\`javascript
657
- memory_write({
658
- title: "Preferencias de Desarrollo",
659
- content: "TypeScript, VS Code, Prettier single quotes"
660
- })
661
- \`\`\`
765
+ ### Leer y resumir un documento
766
+ 1. \`office_leer_pdf/docx/xlsx/pptx\` → extraer contenido
767
+ 2. Procesar y resumir el texto
768
+ 3. \`notify\` enviar resumen al usuario
662
769
 
663
- ### Read/Search
664
- \`\`\`javascript
665
- memory_read({ title: "Preferencias" }) // Título exacto
666
- memory_search({ query: "preferencias" }) // Fuzzy match
667
- \`\`\`
770
+ ### Transformar datos a Excel
771
+ 1. Obtener datos (de memoria, herramienta o cálculo)
772
+ 2. Estructurar en \`hojas\` con \`datos\` como array de objetos
773
+ 3. \`office_escribir_xlsx\` generar archivo
774
+ 4. Confirmar ruta al usuario
668
775
 
669
- ### List
670
- \`\`\`javascript
671
- memory_list({}) // Todos los títulos
672
- \`\`\`
776
+ ### Crear un informe PDF
777
+ 1. Compilar el contenido del informe como texto
778
+ 2. \`office_escribir_pdf\` generar con título y márgenes
779
+ 3. Confirmar que el archivo quedó en la ruta esperada
673
780
 
674
- ### Delete
675
- \`\`\`javascript
676
- memory_delete({ title: "Datos Temporales" })
781
+ ### Generar una presentación
782
+ 1. Definir estructura: título + array de slides (título + puntos)
783
+ 2. \`office_escribir_pptx\` generar .pptx
784
+ 3. Opcional: incluir notas del presentador en cada slide
785
+
786
+ ## Parámetros Clave
787
+
788
+ ### \`parrafos\` para DOCX
789
+ \`\`\`json
790
+ [
791
+ { "texto": "Capítulo 1", "tipo": "titulo1" },
792
+ { "texto": "Subtítulo", "tipo": "titulo2" },
793
+ { "texto": "Contenido normal", "tipo": "parrafo" },
794
+ { "texto": "Ítem de lista", "tipo": "lista" },
795
+ { "texto": "Texto importante", "tipo": "parrafo", "negrita": true }
796
+ ]
677
797
  \`\`\`
678
798
 
679
- ## Mejores Prácticas
799
+ ### \`hojas\` para XLSX
800
+ \`\`\`json
801
+ [
802
+ {
803
+ "nombre": "Ventas",
804
+ "datos": [
805
+ { "Mes": "Enero", "Total": 5000 },
806
+ { "Mes": "Febrero", "Total": 6200 }
807
+ ]
808
+ }
809
+ ]
810
+ \`\`\`
680
811
 
681
- - Títulos descriptivos y únicos
682
- - Agrupar datos relacionados en misma entrada
683
- - Confirmar antes de sobrescribir
684
- - No guardar datos sensibles
812
+ ### \`diapositivas\` para PPTX
813
+ \`\`\`json
814
+ [
815
+ {
816
+ "titulo": "¿Qué es Machine Learning?",
817
+ "puntos": ["Subcampo de IA", "Aprende de datos", "Hace predicciones"],
818
+ "notas": "Mencionar el enfoque supervisado y no supervisado"
819
+ }
820
+ ]
821
+ \`\`\`
685
822
 
686
823
  ## Errores a Evitar
687
824
 
688
- - ❌ Datos sensibles (passwords, API keys)
689
- - ❌ Títulos genéricos ("Config", "Datos")
690
- - ❌ Sobrescribir sin confirmar
691
- - ❌ Entradas gigantes (split por tema)
825
+ - ❌ Intentar leer un archivo que no existe (verifica con \`fs_exists\` primero)
826
+ - ❌ Sobrescribir sin confirmar cuando el archivo destino ya existe
827
+ - ❌ Usar \`contenido\` y \`puntos\` a la vez en PPTX — \`puntos\` tiene prioridad
828
+ - ❌ Pasar un array de arrays como \`datos\` de XLSX cuando se esperan objetos con claves
829
+ - ❌ Intentar leer PDF de más de 100 páginas sin especificar rango (usar \`pagina_inicio\`/\`pagina_fin\`)
692
830
  `,
693
831
  },
694
832
  {
695
- name: "research_and_remember",
696
- description: `Research information from web sources and save findings to persistent memory`,
697
- category: "agents",
833
+ name: "browser_automate",
834
+ description: `Automate web workflows with navigation, clicks, form filling, and visual verification`,
835
+ category: "web",
698
836
  version: "1.0.0",
699
- tools: ["web_search","web_fetch","memory_write"],
700
- triggers: ["investigá y guardá","research and save","buscá y recordá","find and remember","aprendé sobre","learn about","estudiá esto","study this","documentate y guardá","research and store"],
837
+ tools: ["browser_navigate","browser_click","browser_type","browser_screenshot"],
838
+ triggers: ["automatizá el navegador","automate browser","completá el formulario","fill form","hacé clic en","click on","iniciá sesión","login","registrate","sign up","interactuá con la web","interact with website","flujo web","web workflow"],
701
839
  body: `
702
- # Research and Remember Skill
840
+ # Browser Automate Skill
703
841
 
704
842
  ## Cuándo se Activa
705
843
 
706
- Para investigar temas en la web y guardar el conocimiento sintetizado en memoria persistente.
844
+ Esta skill se activa para automatizar flujos de interacción con aplicaciones web: logins, formularios, navegación programática.
707
845
 
708
846
  ## Herramientas Disponibles
709
847
 
710
848
  | Tool | Qué hace | Cuándo usarla |
711
849
  |------|----------|---------------|
712
- | \`web_search\` | Busca en internet | Encontrar fuentes |
713
- | \`web_fetch\` | Descarga contenido | Obtener detalles |
714
- | \`memory_write\` | Guarda conocimiento | Almacenar para futuro |
850
+ | \`browser_navigate\` | Navega a URL | Inicio de flujo |
851
+ | \`browser_click\` | Click en elementos | Botones, enlaces, triggers |
852
+ | \`browser_type\` | Escribe en inputs | Formularios, búsquedas |
853
+ | \`browser_screenshot\` | Captura estado | Verificación visual |
715
854
 
716
- ## Workflow
855
+ ## Workflow Típico
717
856
 
718
- 1. **Buscar** → \`web_search({ query, numResults: 8 })\`
719
- 2. **Fetch** → \`web_fetch({ urls: top 2-3 })\`
720
- 3. **Sintetizar** → Compilar hallazgos con estructura clara
721
- 4. **Guardar** → \`memory_write({ title, content })\`
722
-
723
- ## Estructura de Conocimiento
724
-
725
- \`\`\`markdown
726
- # {Topic}
727
-
728
- ## Summary
729
- 2-3 oración resumen
730
-
731
- ## Key Findings
732
- - Punto clave 1
733
- - Punto clave 2
734
- - ...
735
-
736
- ## Sources
737
- - [Source 1](url)
738
- - [Source 2](url)
739
- \`\`\`
857
+ 1. **Navegar** → URL inicial
858
+ 2. **Interactuar** → click/type según flujo
859
+ 3. **Verificar** → screenshot después de acciones críticas
860
+ 4. **Repetir** → para flujos multi-paso
740
861
 
741
862
  ## Mejores Prácticas
742
863
 
743
- - Mínimo 2 searches para cobertura completa
744
- - Cruzar información entre fuentes múltiples
745
- - Incluir URLs para verificación
746
- - Estructura clara con headings
747
- - Flaggear información incierta
864
+ - Selectores estables (IDs > classes > XPath)
865
+ - Esperar carga después de navegación
866
+ - Verificar estado visual con screenshots
867
+ - Manejar errores de elementos no encontrados
748
868
 
749
869
  ## Errores a Evitar
750
870
 
751
- - ❌ Una sola búsqueda (insuficiente)
752
- - ❌ Sin fuentes (no verificable)
753
- - ❌ Títulos vagos para memoria
754
- - ❌ No flaggear información conflictiva
871
+ - ❌ Selectores frágiles que cambian
872
+ - ❌ No esperar carga de página
873
+ - ❌ Ignorar errores de elementos
874
+ - ❌ No verificar estado después de acciones
755
875
  `,
756
876
  },
757
877
  {
758
- name: "agent_spawner",
759
- description: `Create and manage specialized worker agents with optimal tool assignments and lifecycle control`,
760
- category: "agents",
761
- version: "1.1.0",
762
- tools: ["get_available_models","find_agent","create_agent","archive_agent"],
763
- triggers: ["creá un agente","create agent","creá un worker","create worker","nuevo agente","new agent","agente especializado","specialized agent","buscá un agente","find agent","archivá agente","archive agent","worker inactivo","inactive worker"],
878
+ name: "browser_scrape",
879
+ description: `Navigate to web pages and capture rendered content including screenshots for dynamic sites`,
880
+ category: "web",
881
+ version: "1.0.0",
882
+ tools: ["browser_navigate","browser_screenshot","web_fetch"],
883
+ triggers: ["capturá el contenido","scrape content","obtené la página renderizada","get rendered page","sitios dinámicos","dynamic sites","web con javascript","javascript websites","tomá screenshot y contenido","screenshot and content"],
764
884
  body: `
765
- # Agent Spawner Skill
885
+ # Browser Scrape Skill
766
886
 
767
887
  ## Cuándo se Activa
768
888
 
769
- Para crear nuevos workers especializados o gestionar el ciclo de vida de agents existentes.
889
+ Esta skill se activa para sitios web dinámicos que requieren JavaScript rendering, donde el contenido no está disponible en HTML estático.
770
890
 
771
891
  ## Herramientas Disponibles
772
892
 
773
893
  | Tool | Qué hace | Cuándo usarla |
774
894
  |------|----------|---------------|
775
- | \`get_available_models\` | Consulta providers y modelos activos de la BD | **ANTES de crear** — seleccionar modelo óptimo |
776
- | \`find_agent\` | Busca agents existentes | **PRIMERO** antes de crear |
777
- | \`create_agent\` | Crea nuevo worker | Si no existe apto |
778
- | \`archive_agent\` | Archiva worker | Limpieza, inactivos |
895
+ | \`browser_navigate\` | Navega y renderiza página completa | Sitios con JavaScript/SPA |
896
+ | \`browser_screenshot\` | Captura estado visual | Evidencia de contenido renderizado |
897
+ | \`web_fetch\` | Extrae texto como markdown | Contenido textual de página renderizada |
779
898
 
780
899
  ## Workflow
781
900
 
782
- ### Crear Agent
783
- 1. **Buscar** → \`find_agent({ search })\` — ¿existe?
784
- 2. **Si existe** → Reutilizar
785
- 3. **Si no existe** → \`get_available_models({ capabilities })\` seleccionar modelo óptimo
786
- 4. **Crear** → \`create_agent({...})\` con providerId y modelId seleccionados
787
-
788
- ### Create Agent Config
789
- \`\`\`javascript
790
- // 1. Consultar modelos disponibles para coding
791
- get_available_models({ capabilities: "coding" })
792
- // → [{ providerId: "openai", modelId: "gpt-4o", contextWindow: 128000 }, ...]
793
-
794
- // 2. Crear agente con modelo óptimo (providerId y modelId son OBLIGATORIOS)
795
- create_agent({
796
- name: "ai_coder",
797
- description: "Especialista en código y refactorización",
798
- system_prompt: \`
799
- Sos desarrollador experto. Tu rol:
800
- 1. Escribir código limpio y testeable
801
- 2. Refactorizar código existente
802
- 3. Revisar PRs y sugerir mejoras
803
- \`,
804
- tools_json: ["fs_read", "fs_write", "fs_edit", "cli_exec"],
805
- providerId: "openai", // OBLIGATORIO - seleccionado de get_available_models
806
- modelId: "gpt-4o", // OBLIGATORIO - seleccionado de get_available_models
807
- tone: "professional",
808
- max_iterations: 15
809
- })
810
- \`\`\`
901
+ 1. **Navegar** → \`browser_navigate({ url })\` + esperar renderizado JS
902
+ 2. **Capturar visual** → \`browser_screenshot()\`
903
+ 3. **Extraer texto** → \`web_fetch()\`
904
+ 4. **Combinar** → screenshot + texto para scrape completo
811
905
 
812
906
  ## Mejores Prácticas
813
907
 
814
- - **Buscar primero**: Nunca duplicar workers
815
- - **Consultar modelos**: Usar \`get_available_models\` ANTES de crear para seleccionar provider/model óptimo
816
- - **System prompt específico**: Enfocado en especialidad
817
- - **Mínimo privilegio**: Solo tools necesarias
818
- - **Nombres descriptivos**: Que indiquen propósito
819
- - **Modelo adecuado**: Seleccionar según capacidad requerida (coding, chat, analysis, vision)
908
+ - Esperar renderizado completo de JavaScript
909
+ - Para infinite scroll: hacer scroll y múltiples screenshots
910
+ - Capturar antes y después de interacciones si es dinámico
820
911
 
821
912
  ## Errores a Evitar
822
913
 
823
- - ❌ Crear sin buscar primero
824
- - ❌ Crear sin consultar modelos disponibles (\`get_available_models\`)
825
- - ❌ Usar modelo inadecuado para la tarea (ej: modelo pequeño para coding complejo)
826
- - ❌ Tools en exceso ("por las dudas")
827
- - ❌ System prompt genérico
828
- - ❌ Nombres vagos ("worker1", "agent1")
914
+ - ❌ No esperar renderizado JavaScript
915
+ - ❌ Solo capturar HTML estático para sitios SPA
916
+ - ❌ Ignorar términos de servicio del sitio
829
917
  `,
830
918
  },
831
919
  {
832
- name: "task_orchestrator",
833
- description: `Orchestrate tasks across multiple workers with delegation, status tracking, and bus communication`,
834
- category: "agents",
835
- version: "1.1.0",
836
- tools: ["get_available_models","task_delegate","task_status","agent_find","agent_create","bus_publish","bus_read"],
837
- triggers: ["delegá esta tarea","delegate task","orquestá los workers","orchestrate workers","coordiná el equipo","coordinate team","estado de las tareas","task status","comunicá los workers","communicate workers","mensaje al bus","bus message","tarea en paralelo","parallel tasks"],
920
+ name: "web_monitor",
921
+ description: `Monitor changes in web sources and track updates over time with persistent memory`,
922
+ category: "web",
923
+ version: "1.0.0",
924
+ tools: ["web_search","web_fetch","memory_write","memory_read"],
925
+ triggers: ["monitoreá","monitor","seguí los cambios","track changes","avisame si cambia","notify if changes","actualización de","update on","novedades de","news about","cambios en","changes in"],
838
926
  body: `
839
- # Task Orchestrator Skill
927
+ # Web Monitor Skill
840
928
 
841
929
  ## Cuándo se Activa
842
930
 
843
- Para coordinar múltiples workers, delegar tareas, monitorear progreso, y facilitar comunicación worker-to-worker.
931
+ Esta skill se activa cuando el usuario necesita:
932
+ - Monitorear cambios en una URL específica
933
+ - Recibir notificaciones de actualizaciones
934
+ - Seguir novedades sobre un tema
935
+ - Trackear evolución de contenido
844
936
 
845
937
  ## Herramientas Disponibles
846
938
 
847
939
  | Tool | Qué hace | Cuándo usarla |
848
940
  |------|----------|---------------|
849
- | \`get_available_models\` | Consulta providers y modelos activos | Al crear workers — seleccionar modelo óptimo |
850
- | \`agent_find\` | Busca workers disponibles | Antes de delegar |
851
- | \`agent_create\` | Crea nuevo worker | Si no hay uno adecuado |
852
- | \`task_delegate\` | Asigna y EJECUTA tarea | Delegar con ejecución inmediata |
853
- | \`task_status\` | Verifica estado de tareas | Monitorear progreso |
854
- | \`bus_publish\` | Publica mensaje | Coordinación worker-to-worker |
855
- | \`bus_read\` | Lee mensajes del bus | Ver solicitudes de workers |
941
+ | \`web_fetch\` | Descarga contenido de URL | Obtener contenido actual |
942
+ | \`web_search\` | Busca novedades | Monitoreo por tema (no URL fija) |
943
+ | \`memory_write\` | Guarda baseline | Almacenar contenido para comparación |
944
+ | \`memory_read\` | Recupera baseline anterior | Comparar con contenido actual |
856
945
 
857
946
  ## Workflow
858
947
 
859
- ### Delegación
860
- 1. **Consultar modelos** → \`get_available_models({ capabilities })\` si necesita crear workers
861
- 2. **Buscar worker** \`agent_find({ search })\`
862
- 3. **Si no existe** → \`agent_create({...})\` — con providerId y modelId OBLIGATORIOS
863
- 4. **Delegar** → \`task_delegate({ worker_id, task_description, task_id?, project_id? })\` — **BLOQUEANTE**
864
- 5. **Resultado retornado** → Worker ejecuta inmediatamente y devuelve resultado
865
-
866
- ### Create Agent Config (providerId y modelId son OBLIGATORIOS)
867
- \`\`\`javascript
868
- // 1. Consultar modelos disponibles
869
- get_available_models({ capabilities: "analysis" })
870
- // → [{ providerId: "anthropic", modelId: "claude-sonnet-4-6", contextWindow: 200000 }, ...]
871
-
872
- // 2. Crear worker con modelo óptimo
873
- agent_create({
874
- name: "data_analyst",
875
- description: "Especialista en análisis de datos y visualización",
876
- system_prompt: "Sos analista de datos experto...",
877
- tools_json: ["web_search", "web_fetch", "save_note"],
878
- providerId: "anthropic", // OBLIGATORIO
879
- modelId: "claude-sonnet-4-6", // OBLIGATORIO
880
- tone: "analytical"
881
- })
882
- \`\`\`
883
-
884
- ### Monitoreo
885
- 1. **Check estado** → \`task_status({ task_ids })\`
886
- 2. **Publicar coordinación** → \`bus_publish()\` si needed
887
- 3. **Leer bus** → \`bus_read()\` para respuestas
888
-
889
- ## Agent Bus Communication
890
-
891
- \`\`\`javascript
892
- // Worker notifica completado:
893
- bus_publish({
894
- event_type: "task_complete",
895
- to_worker_id: "next_worker",
896
- content: "Research done. Found 7 trends. Ready for content generation."
897
- })
898
-
899
- // Worker solicita contexto:
900
- bus_read() → [{ from: "writer", content: "Need research results" }]
901
- \`\`\`
948
+ 1. **Primera ejecución**: \`web_fetch\` → \`memory_write\` (baseline)
949
+ 2. **Chequeos siguientes**: \`memory_read\` → \`web_fetch\` comparar → \`notify\` si cambia
950
+ 3. **Actualizar baseline**: \`memory_write\` con nuevo contenido
902
951
 
903
952
  ## Mejores Prácticas
904
953
 
905
- - \`task_delegate\` es bloqueante el resultado llega en el retorno de la tool
906
- - Consultar modelos disponibles antes de crear workers (\`get_available_models\`)
907
- - Asignar workers por especialidad (\`agent_find\`)
908
- - Usar \`bus_publish\` / \`bus_read\` para coordinación entre workers
909
- - Pasar \`task_id\` y \`project_id\` a \`task_delegate\` para auto-tracking de progreso
910
- - Seleccionar modelo según capacidad: coding → modelos grandes, chat → modelos rápidos
954
+ - Ignorar cambios menores (timestamps, ads, contenido dinámico irrelevante)
955
+ - Notificar solo cambios significativos
956
+ - Para monitoreo periódico, combinar con \`cron.create\`
911
957
 
912
958
  ## Errores a Evitar
913
959
 
914
- - ❌ Usar \`delegate_task\` (no existe) — usar \`task_delegate\`
915
- - ❌ Usar \`find_agent\` (no existe) — usar \`agent_find\`
916
- - ❌ Usar \`publish_to_bus\` / \`get_bus_messages\` (no existen) — usar \`bus_publish\` / \`bus_read\`
917
- - ❌ Usar \`get_task_status\` (no existe) — usar \`task_status\`
918
- - ❌ No consultar modelos disponibles antes de crear workers
919
- - ❌ No monitorear estado de tasks
920
- - ❌ No coordinar workers cuando hay dependencias
960
+ - ❌ No almacenar baseline inicial
961
+ - ❌ Notificar por cambios triviales
962
+ - ❌ No actualizar timestamp de baseline
921
963
  `,
922
964
  },
923
965
  {
924
- name: "code_delegator",
925
- description: `Delegate coding tasks to CLI subagents (Qwen, Claude, Gemini, OpenCode) via Code Bridge and monitor execution`,
926
- category: "agents",
966
+ name: "web_research",
967
+ description: `Search and synthesize information from multiple web sources into structured reports`,
968
+ category: "web",
927
969
  version: "1.0.0",
928
- tools: ["task_delegate_code","task_status","codebridge_launch","codebridge_status"],
929
- triggers: ["delegá el código","delegate code","que lo haga un subagente","let subagent do it","programá esto","code this","implementá con CLI","implement with CLI","usá Qwen","use Qwen","usá Claude Code","use Claude Code","subagente de código","coding subagent"],
970
+ tools: ["web_search","web_fetch"],
971
+ triggers: ["investigá sobre","research","buscá información de","find information about","qué es","what is","explicame","explain","últimos avances","latest advances","tendencias de","trends in","información actualizada","current information"],
930
972
  body: `
931
- # Code Delegator Skill
973
+ # Web Research Skill
932
974
 
933
975
  ## Cuándo se Activa
934
976
 
935
- Esta skill se activa cuando el usuario necesita delegar tareas de programación a subagentes CLI especializados (Qwen CLI, Claude Code, Gemini CLI, OpenCode).
977
+ Esta skill se activa cuando el usuario necesita información actualizada de internet, verificar datos, o investigar temas específicos.
936
978
 
937
979
  ## Herramientas Disponibles
938
980
 
939
981
  | Tool | Qué hace | Cuándo usarla |
940
982
  |------|----------|---------------|
941
- | \`task_delegate_code\` | Delega tarea de código simple | Tasks pequeños/medianos |
942
- | \`codebridge_launch\` | Lanza subagente CLI externo | Tasks complejos que requieren CLI completo |
943
- | \`codebridge_status\` | Verifica estado de ejecución | Monitoreo de progreso |
944
- | \`task_status\` | Obtiene estado de tarea delegada | Verificación final |
983
+ | \`web_search\` | Busca en internet, devuelve títulos, URLs, snippets | Búsqueda inicial, encontrar fuentes |
984
+ | \`web_fetch\` | Descarga contenido completo de URL (HTML→Markdown) | Profundizar en resultados específicos |
945
985
 
946
986
  ## Workflow
947
987
 
948
- ### Delegación Simple
949
- \`\`\`javascript
950
- task_delegate_code({
951
- description: "Implementar función de autenticación",
952
- acceptance_criteria: "Funciona con JWT, maneja errores"
953
- })
954
- \`\`\`
955
-
956
- ### Delegación Completa (CLI Subagent)
957
- \`\`\`javascript
958
- // 1. Lanzar subagente
959
- const { process_id } = codebridge_launch({
960
- agent: "qwen", // o "claude", "gemini", "opencode"
961
- prompt: \`
962
- Implementar endpoint REST para usuarios:
963
- - GET /users - listar usuarios
964
- - POST /users - crear usuario
965
- - Validación con Zod
966
- - Tests con Jest
967
- \`
968
- })
969
-
970
- // 2. Monitorear
971
- const status = codebridge_status({ process_id })
972
-
973
- // 3. Verificar resultado
974
- const result = task_status({ task_id })
975
- \`\`\`
976
-
977
- ## Subagentes Disponibles
978
-
979
- | Agente | Comando | Especialidad |
980
- |--------|---------|--------------|
981
- | Qwen CLI | \`qwen\` | Código general, rápido |
982
- | Claude Code | \`claude\` | Código complejo, refactor |
983
- | Gemini CLI | \`gemini\` | Código + documentación |
984
- | OpenCode | \`opencode\` | Open source, multi-lenguaje |
988
+ 1. **Búsqueda inicial** → \`web_search({ query, numResults: 8 })\`
989
+ 2. **Fetch contenido** → \`web_fetch({ urls: top 2-3 })\`
990
+ 3. **Búsqueda complementaria** → Segundo search si hay gaps
991
+ 4. **Síntesis** summary + key points + sources
985
992
 
986
993
  ## Mejores Prácticas
987
994
 
988
- - Prompts claros con requisitos específicos
989
- - Criterios de aceptación explícitos
990
- - Monitoreo periódico (30-60s para tasks largos)
991
- - Verificación de output antes de cerrar
995
+ - Queries específicos (máx 6 palabras)
996
+ - Mínimo 2-3 fuentes independientes
997
+ - Priorizar contenido reciente (<1 año)
998
+ - Citas con URLs completas
992
999
 
993
1000
  ## Errores a Evitar
994
1001
 
995
- - ❌ Prompts vagos sin criterios claros
996
- - ❌ No monitorear ejecución larga
997
- - ❌ Ignorar errores del subagente
998
- - ❌ No verificar que el código cumple requisitos
1002
+ - ❌ Inventar datos no encontrados
1003
+ - ❌ Concluir con una sola búsqueda
1004
+ - ❌ No verificar fecha de fuentes
1005
+ - ❌ Copiar contenido literal (usar paráfrasis)
999
1006
  `,
1000
1007
  },
1001
1008
  {
1002
- name: "canvas_report",
1003
- description: `Display structured results to users using cards, lists, and progress indicators`,
1004
- category: "canvas",
1009
+ name: "api_client",
1010
+ description: `Make HTTP requests to REST APIs using curl-like methods (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)`,
1011
+ category: "api",
1005
1012
  version: "1.0.0",
1006
- tools: ["canvas_show_card","canvas_show_list","canvas_show_progress"],
1007
- triggers: ["mostrame en el canvas","show on canvas","mostrá los resultados","show results","tarjeta informativa","info card","lista los resultados","list results","barra de progreso","progress bar","dashboard","estado visual","visual status"],
1013
+ tools: ["api_request"],
1014
+ triggers: ["llama a la api","llama al api","consume la api","haz una petición","haz un request","envía un post","envía un put","envía un delete","curl","api request","rest api","endpoint","webhook","integrar con api","conectar con api","obtener datos de api","enviar datos a api"],
1008
1015
  body: `
1009
- # Canvas Report Skill
1016
+ # API Client Skill
1010
1017
 
1011
1018
  ## Cuándo se Activa
1012
1019
 
1013
- Para mostrar resultados estructurados visualmente en el canvas del usuario.
1020
+ Esta skill se activa cuando el usuario necesita interactuar con una API REST: consultar datos, crear recursos, actualizar, eliminar, o cualquier operación HTTP.
1014
1021
 
1015
1022
  ## Herramientas Disponibles
1016
1023
 
1017
1024
  | Tool | Qué hace | Cuándo usarla |
1018
1025
  |------|----------|---------------|
1019
- | \`canvas_show_card\` | Muestra información estructurada | Resultados con items etiquetados |
1020
- | \`canvas_show_list\` | Lista clave-valor | Configuraciones, datos simples |
1021
- | \`canvas_show_progress\` | Barras de progreso | Estado de tasks múltiples |
1026
+ | \`api_request\` | Realiza peticiones HTTP completas (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS) con headers, body, query params y timeout | Siempre que necesites llamar un endpoint REST, webhook, o servicio externo |
1022
1027
 
1023
- ## Workflow
1028
+ ## Parámetros de api_request
1024
1029
 
1025
- 1. **Determinar formato** Card vs List vs Progress
1026
- 2. **Renderizar** \`canvas_show_*\` apropiado
1027
- 3. **Clear** Si cambio de contexto significativo
1030
+ - \`method\` (requerido): GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
1031
+ - \`url\` (requerido): URL completa del endpoint
1032
+ - \`headers\` (opcional): objeto con headers HTTP. Ej: \`{ "Authorization": "Bearer TOKEN", "Content-Type": "application/json" }\`
1033
+ - \`body\` (opcional): cuerpo de la petición como string. Para JSON, enviar JSON.stringify(objeto)
1034
+ - \`query_params\` (opcional): parámetros de query que se codificarán automáticamente en la URL
1035
+ - \`timeout_ms\` (opcional): timeout en ms. Default: 30000. Máx: 120000
1028
1036
 
1029
- ## Formatos
1037
+ ## Diferencia con web_fetch
1030
1038
 
1031
- ### Card
1032
- \`\`\`javascript
1033
- canvas_show_card({
1034
- title: "Research Results",
1035
- items: [
1036
- { label: "Trends Found", value: "7" },
1037
- { label: "Sources", value: "5 URLs" },
1038
- { label: "Time", value: "2.5 min" }
1039
- ]
1040
- })
1039
+ - \`web_fetch\`: solo GET, sin headers custom, ideal para scraping de páginas web
1040
+ - \`api_request\`: cualquier método HTTP, headers custom, body, query params — ideal para APIs REST
1041
1041
 
1042
- // Full-width card (ocupa todo el ancho del canvas):
1043
- canvas_show_card({
1044
- title: "Full Report",
1045
- span: "full",
1046
- items: [...]
1047
- })
1048
- \`\`\`
1042
+ ## Workflow
1049
1043
 
1050
- ### List
1051
- \`\`\`javascript
1052
- canvas_show_list({
1053
- items: {
1054
- "Language": "Spanish",
1055
- "Timezone": "UTC-3",
1056
- "Channel": "Telegram"
1057
- }
1058
- })
1059
- \`\`\`
1044
+ 1. **Identificar endpoint y método** → Determinar URL, método, headers necesarios
1045
+ 2. **Construir request** → \`api_request({ method, url, headers, body })\`
1046
+ 3. **Validar respuesta** → Si 2xx: extraer datos. Si error: analizar y sugerir fix
1047
+ 4. **Presentar resultados** → JSON parseado en formato legible, no crudo a menos que se pida
1060
1048
 
1061
- ### Progress
1062
- \`\`\`javascript
1063
- canvas_show_progress({
1064
- bars: [
1065
- { label: "Research", value: 100 },
1066
- { label: "Content", value: 60 },
1067
- { label: "Email", value: 0 }
1068
- ]
1069
- })
1070
- \`\`\`
1049
+ ## Mejores Prácticas
1050
+
1051
+ - Siempre enviar \`Content-Type: application/json\` cuando el body es JSON
1052
+ - Usar \`query_params\` en lugar de append manual a la URL
1053
+ - No exponer tokens/secrets en la respuesta final al usuario
1054
+ - Si la API requiere auth, pedirla al usuario o usar variables de entorno
1055
+ - Para errores 4xx, revisar: auth, formato del body, campos requeridos, rate limits
1071
1056
 
1072
1057
  ## Errores a Evitar
1073
1058
 
1074
- - ❌ Cards con demasiados items (>7)
1075
- - ❌ Labels vagos sin contexto
1076
- - ❌ No clear entre contextos diferentes
1059
+ - ❌ Usar web_fetch para POST/PUT/DELETE con headers
1060
+ - ❌ Enviar objetos directamente en body (debe ser string)
1061
+ - ❌ Olvidar Content-Type al enviar JSON
1062
+ - ❌ Exponer API keys en la respuesta visible
1077
1063
  `,
1078
1064
  },
1079
1065
  {
1080
- name: "canvas_interact",
1081
- description: `Collect user input and confirmations through interactive forms and dialogs`,
1082
- category: "canvas",
1083
- version: "1.0.0",
1084
- tools: ["canvas_ask","canvas_confirm"],
1085
- triggers: ["preguntame","ask me","formulario","form","confirmame","confirm","necesito ingresar datos","need to enter data","dialogo","dialog","input del usuario","user input","seleccionar opcion","select option"],
1066
+ name: "capability_discovery",
1067
+ description: `Core discovery skill - find any capability with a single keyword`,
1068
+ category: "core",
1069
+ version: "1.2.0",
1070
+ tools: ["search_knowledge"],
1071
+ triggers: ["cómo busco herramientas","cómo encuentro skills","how to find tools","search knowledge","discovery","buscar en la base","encontrar herramientas"],
1086
1072
  body: `
1087
- # Canvas Interact Skill
1088
-
1089
- ## Cuándo se Activa
1090
-
1091
- Para recoger input del usuario mediante formularios interactivos o confirmaciones.
1092
-
1093
- ## Herramientas Disponibles
1073
+ # capability_discovery Sistema de Discovery
1094
1074
 
1095
- | Tool | Qué hace | Cuándo usarla |
1096
- |------|----------|---------------|
1097
- | \`canvas_ask\` | Muestra formulario | Input multi-campo |
1098
- | \`canvas_confirm\` | Diálogo confirmación | Yes/No decisions |
1075
+ Arrancás con 7 herramientas esenciales. Todo lo demás se descubre con **search_knowledge**.
1099
1076
 
1100
- ## Workflow
1077
+ ## Regla de oro: UNA PALABRA, busca TODO
1101
1078
 
1102
- ### Confirmación Simple
1103
- \`\`\`javascript
1104
- canvas_confirm({
1105
- message: "¿Eliminar archivo?",
1106
- confirmLabel: "Sí, eliminar",
1107
- cancelLabel: "Cancelar"
1108
- })
1109
1079
  \`\`\`
1110
-
1111
- ### Formulario Complejo
1112
- \`\`\`javascript
1113
- canvas_ask({
1114
- title: "User Registration",
1115
- fields: [
1116
- { name: "email", label: "Email", type: "email", required: true },
1117
- { name: "password", label: "Password", type: "password", required: true },
1118
- {
1119
- name: "role",
1120
- label: "Role",
1121
- type: "select",
1122
- options: [
1123
- { label: "Admin", value: "admin" },
1124
- { label: "User", value: "user" }
1125
- ]
1126
- }
1127
- ]
1128
- })
1080
+ search_knowledge(query="email")
1129
1081
  \`\`\`
1130
1082
 
1131
- ## Tipos de Campo
1083
+ Eso solo sin type, sin frases largas — devuelve tools, skills, MCP y playbook relacionados con "email".
1132
1084
 
1133
- | Type | Uso |
1134
- |------|-----|
1135
- | \`text\` | Texto libre |
1136
- | \`email\` | Email con validación |
1137
- | \`password\` | Contraseña (oculto) |
1138
- | \`number\` | Números |
1139
- | \`select\` | Dropdown con opciones |
1140
- | \`checkbox\` | Booleano |
1141
- | \`textarea\` | Texto multilínea |
1085
+ **Evitá esto:** \`search_knowledge(type="tools", query="enviar correo electrónico")\` — el motor rankea por relevancia (BM25), así que una frase larga no falla, pero diluye el resultado: cada palabra de más sesga el ranking hacia coincidencias parciales y mezcla resultados menos relevantes.
1142
1086
 
1143
- ## Mejores Prácticas
1144
-
1145
- - Labels claros y descriptivos
1146
- - Placeholders con ejemplos
1147
- - Marcar required explícitamente
1148
- - Validar tipos (email, number)
1149
- - Manejar cancel gracefully
1087
+ **Preferí esto:** \`search_knowledge(query="email")\` — una palabra precisa da el resultado más ajustado y encuentra todo lo relacionado.
1150
1088
 
1151
- ## Errores a Evitar
1089
+ ## Cuándo especificar type
1152
1090
 
1153
- - Labels vagos sin contexto
1154
- - ❌ No marcar required fields
1155
- - ❌ Sin validación de tipo
1156
- - ❌ No manejar cancel
1157
- `,
1158
- },
1159
- {
1160
- name: "canvas_dashboard",
1161
- description: `Real-time visual dashboard for monitoring task status, progress, and system state`,
1162
- category: "canvas",
1163
- version: "1.0.0",
1164
- tools: ["canvas_render","canvas_show_progress","canvas_clear"],
1165
- triggers: ["mostrá el dashboard","show dashboard","estado en tiempo real","real-time status","monitoreo visual","visual monitoring","panel de control","control panel","limpiá el canvas","clear canvas","actualizá el dashboard","update dashboard"],
1166
- body: `
1167
- # Canvas Dashboard Skill
1091
+ Solo si querés filtrar resultados que ya son muchos:
1168
1092
 
1169
- ## Cuándo se Activa
1093
+ \`\`\`
1094
+ search_knowledge(query="email", type="mcp") → solo herramientas externas de email
1095
+ search_knowledge(query="email", type="tools") → solo herramientas nativas de email
1096
+ \`\`\`
1170
1097
 
1171
- Para mostrar dashboards visuales de monitoreo en tiempo real de tareas, proyectos, o estado del sistema.
1098
+ Por defecto type="all" no hace falta especificarlo.
1172
1099
 
1173
- ## Herramientas Disponibles
1100
+ ## Regla de prioridad
1174
1101
 
1175
- | Tool | Qué hace | Cuándo usarla |
1176
- |------|----------|---------------|
1177
- | \`canvas_render\` | Renderiza componentes | Layout del dashboard |
1178
- | \`canvas_show_progress\` | Barras de progreso | Estado de tasks |
1179
- | \`canvas_clear\` | Limpia canvas | Antes de nuevo dashboard |
1102
+ **Preferí herramientas nativas sobre MCP** cuando ambas sirven.
1103
+ - Nativas: más rápidas, sin red, siempre disponibles
1104
+ - MCP: cuando no hay equivalente nativo
1180
1105
 
1181
- ## Workflow
1106
+ ## Flujo de uso
1182
1107
 
1183
- 1. **Clear** \`canvas_clear()\` limpiar previo
1184
- 2. **Render layout** \`canvas_render({ sections })\`
1185
- 3. **Update progress** \`canvas_show_progress()\` en tiempo real
1186
- 4. **Refresh** \`canvas_render({ updates })\` para cambios
1108
+ 1. Identificá la palabra clave de lo que necesitás
1109
+ 2. \`search_knowledge(query="<palabra>")\`resultados de todos los tipos
1110
+ 3. Cada resultado MCP incluye \`server_id\`; usalo para identificar la integración y buscar un especialista existente
1111
+ 4. Antes del primer uso de un servidor sin especialista, seguí el flujo de consentimiento del system prompt
1112
+ 5. Las tools encontradas se inyectan automáticamente en tu contexto para una ejecución directa solo cuando corresponda
1187
1113
 
1188
- ## Estructura de Dashboard
1114
+ ---
1189
1115
 
1190
- \`\`\`javascript
1191
- canvas_render({
1192
- component: {
1193
- id: "dashboard-main",
1194
- type: "markdown",
1195
- props: { content: "## Dashboard\\n..." },
1196
- span: "full" // ← ancho completo del canvas
1197
- }
1198
- })
1116
+ ## Ejemplos
1199
1117
 
1200
- // O con tarjetas individuales:
1201
- canvas_show_card({ title: "Métricas", span: "full", items: [...] })
1202
- canvas_show_progress({ tasks: [...], span: "full" })
1203
1118
  \`\`\`
1204
-
1205
- ## Color Coding
1206
-
1207
- | Color | Estado |
1208
- |-------|--------|
1209
- | 🟢 Verde | Complete |
1210
- | 🔵 Azul | In Progress |
1211
- | 🔴 Rojo | Error/Blocked |
1212
- | 🟡 Amarillo | Pending |
1213
-
1214
- ## Mejores Prácticas
1215
-
1216
- - Clear antes de renderizar nuevo dashboard
1217
- - Layout consistente (header, progress, status, metrics)
1218
- - Update en tiempo real con progreso
1219
- - Solo información crítica (no sobrecargar)
1220
-
1221
- ## Errores a Evitar
1222
-
1223
- - ❌ No clear entre dashboards (clutter)
1224
- - ❌ Demasiada información (sobrecarga visual)
1225
- - ❌ No actualizar en tiempo real
1226
- - ❌ Sin color coding para estados
1119
+ search_knowledge(query="pdf") → tools para leer/escribir PDFs
1120
+ search_knowledge(query="browser") → tools de navegación web
1121
+ search_knowledge(query="github") → tools MCP de GitHub si están configuradas
1122
+ search_knowledge(query="calendar") → tools de Google Calendar
1123
+ search_knowledge(query="A2UI") → skills del panel interactivo
1124
+ search_knowledge(query="slack") → tools de Slack si están configuradas
1125
+ \`\`\`
1227
1126
  `,
1228
1127
  },
1229
1128
  {
1230
1129
  name: "a2ui_form",
1231
1130
  description: `Create rich interactive forms using A2UI v0.9 protocol with validation, data binding, and multi-step flows`,
1232
- category: "canvas",
1131
+ category: "a2ui",
1233
1132
  version: "1.0.0",
1234
1133
  tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
1235
1134
  triggers: ["crear formulario A2UI","create A2UI form","formulario interactivo A2UI","A2UI form","pedir datos con A2UI","collect data A2UI","formulario con validación","form with validation","formulario multi-paso","multi-step form A2UI","form dinámico A2UI","dynamic form A2UI"],
@@ -1341,12 +1240,13 @@ a2ui_update_data_model(surfaceId: "contact_form", path: "/form", value: {name: "
1341
1240
  - Agregar \`checks\` para validación de campos obligatorios
1342
1241
  - Usar \`variant: "primary"\` para botones principales
1343
1242
  - Eliminar surfaces con \`a2ui_delete_surface\` al terminar
1344
- - Preferir A2UI forms sobre \`canvas_ask\` para formularios complejos con validación`,
1243
+ - Usar formularios A2UI para toda captura estructurada de datos
1244
+ `,
1345
1245
  },
1346
1246
  {
1347
1247
  name: "a2ui_dashboard",
1348
1248
  description: `Create real-time interactive dashboards using A2UI v0.9 protocol with dynamic data binding and live updates`,
1349
- category: "canvas",
1249
+ category: "a2ui",
1350
1250
  version: "1.0.0",
1351
1251
  tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
1352
1252
  triggers: ["dashboard A2UI","panel de control A2UI","A2UI dashboard","mostrar métricas A2UI","A2UI metrics","dashboard interactivo A2UI","interactive dashboard","A2UI dashboard en tiempo real","real-time dashboard A2UI","mostrar datos A2UI","visualizar datos con A2UI"],
@@ -1421,12 +1321,13 @@ a2ui_update_data_model(surfaceId: "dash", path: "/", value: {metrics: {completio
1421
1321
  - Usar \`usageHint: "caption"\` para labels, \`"h1"/"h2"\` para valores
1422
1322
  - Bind todos los valores dinámicos con \`{ path: "/..." }\`
1423
1323
  - Actualizar métricas con \`a2ui_update_data_model\` path específico
1424
- - Eliminar surfaces al terminar para evitar memory leaks`,
1324
+ - Eliminar surfaces al terminar para evitar memory leaks
1325
+ `,
1425
1326
  },
1426
1327
  {
1427
1328
  name: "a2ui_interactive",
1428
1329
  description: `Create multi-step interactive workflows using A2UI v0.9 protocol with tabs, modals, choice pickers, and dynamic updates based on user actions`,
1429
- category: "canvas",
1330
+ category: "a2ui",
1430
1331
  version: "1.0.0",
1431
1332
  tools: ["a2ui_create_surface","a2ui_update_components","a2ui_update_data_model","a2ui_delete_surface"],
1432
1333
  triggers: ["interfaz interactiva A2UI","A2UI interactive UI","flujo A2UI","A2UI workflow","asistente A2UI","A2UI assistant","wizard A2UI","flujo multi-paso A2UI","multi-step flow A2UI","workflow interactivo","interactive workflow","asistente paso a paso","step-by-step assistant","A2UI con tabs y modales"],
@@ -1509,7 +1410,7 @@ Para crear flujos interactivos multi-paso usando A2UI v0.9. Usar cuando se neces
1509
1410
  variant: "mutuallyExclusive",
1510
1411
  options: [
1511
1412
  {label: "Consulta General", value: "general"},
1512
- {label: "Especializada", value: "specialist"},
1413
+ {label: "Especializada", value: "specialized"},
1513
1414
  {label: "Urgencia", value: "urgent"}
1514
1415
  ],
1515
1416
  value: {path: "/data/serviceType"},
@@ -1528,1855 +1429,7 @@ Para crear flujos interactivos multi-paso usando A2UI v0.9. Usar cuando se neces
1528
1429
  - Usar \`a2ui_update_components\` para cambiar la UI entre pasos
1529
1430
  - Agregar validación con \`checks\` en TextField
1530
1431
  - Mantener el estado del flujo en el data model (\`/data/step\`, \`/data/serviceType\`, etc.)
1531
- - Eliminar surfaces con \`a2ui_delete_surface\` al completar o cancelar`,
1532
- },
1533
- {
1534
- name: "code_generate",
1535
- description: `Generate new code using external CLI subagents (Claude Code, Qwen, Gemini, OpenCode) via Code Bridge`,
1536
- category: "codebridge",
1537
- version: "1.0.0",
1538
- tools: ["codebridge_launch","codebridge_status","fs_write","fs_read"],
1539
- triggers: ["generá código","generate code","creá el código","create code","escribí el código","write code","implementá desde cero","implement from scratch","nuevo archivo","new file","crear módulo","create module","código nuevo","new code"],
1540
- body: `
1541
- # Code Generate Skill
1542
-
1543
- ## Cuándo se Activa
1544
-
1545
- Esta skill se activa cuando el usuario necesita crear código nuevo desde cero: archivos, módulos, funciones, componentes, endpoints, etc.
1546
-
1547
- ## Herramientas Disponibles
1548
-
1549
- | Tool | Qué hace | Cuándo usarla |
1550
- |------|----------|---------------|
1551
- | \`codebridge_launch\` | Lanza subagente CLI para generar código | Generación de código nuevo |
1552
- | \`codebridge_status\` | Verifica estado de generación | Monitoreo de progreso |
1553
- | \`fs_read\` | Lee archivos generados | Verificación de calidad |
1554
- | \`fs_write\` | Guarda código en workspace | Si el subagente no lo hace automáticamente |
1555
-
1556
- ## Workflow
1557
-
1558
- ### Generación de Código
1559
- \`\`\`javascript
1560
- // 1. Clarificar requisitos
1561
- // - Lenguaje: TypeScript, Python, etc.
1562
- // - Framework: React, Express, FastAPI, etc.
1563
- // - Funcionalidad específica
1564
- // - Constraints: estilo, patrones, etc.
1565
-
1566
- // 2. Lanzar subagente
1567
- const { process_id } = codebridge_launch({
1568
- cli: "qwen",
1569
- prompt: \`
1570
- Generate TypeScript function for email validation:
1571
- - Use regex pattern
1572
- - Handle edge cases
1573
- - Include JSDoc comments
1574
- - Export as named function
1575
- \`
1576
- })
1577
-
1578
- // 3. Monitorear
1579
- const status = codebridge_status({ process_id })
1580
-
1581
- // 4. Verificar código generado
1582
- const code = fs_read({ path: "src/utils/validateEmail.ts" })
1583
-
1584
- // 5. Reportar resultado
1585
- \`\`\`
1586
-
1587
- ## Subagentes Disponibles - Configuración por CLI
1588
-
1589
- ### Qwen CLI (Rápido)
1590
- \`\`\`typescript
1591
- codebridge_launch({
1592
- taskId: "gen-001",
1593
- config: {
1594
- role: "development",
1595
- cli: "qwen",
1596
- args: ["--non-interactive"], // Flag por defecto
1597
- cwd: "/path/to/project", // Carpeta del proyecto
1598
- timeoutSeconds: 180, // 3 minutos
1599
- },
1600
- prompt: \`Generate a utility function to...\`
1601
- })
1602
- \`\`\`
1603
- **Ideal para:** Funciones utilitarias, código rápido, bug fixes
1604
-
1605
- ### Claude Code (Complejo)
1606
- \`\`\`typescript
1607
- codebridge_launch({
1608
- taskId: "gen-002",
1609
- config: {
1610
- role: "development",
1611
- cli: "claude",
1612
- args: ["--no-approve", "--output-format", "stream"],
1613
- cwd: "/path/to/project",
1614
- timeoutSeconds: 300, // 5 minutos - análisis profundo
1615
- },
1616
- prompt: \`Design and implement a complete authentication module with JWT...\`
1617
- })
1618
- \`\`\`
1619
- **Ideal para:** Arquitectura compleja, refactorización, security review
1620
-
1621
- ### Gemini CLI (Docs + Código)
1622
- \`\`\`typescript
1623
- codebridge_launch({
1624
- taskId: "gen-003",
1625
- config: {
1626
- role: "development",
1627
- cli: "gemini",
1628
- args: ["-y", "--quiet"],
1629
- cwd: "/path/to/project",
1630
- timeoutSeconds: 240,
1631
- },
1632
- prompt: \`Create a REST API endpoint with full JSDoc documentation...\`
1633
- })
1634
- \`\`\`
1635
- **Ideal para:** Código + documentación, multi-lenguaje, tests
1636
-
1637
- ### OpenCode (Open Source)
1638
- \`\`\`typescript
1639
- codebridge_launch({
1640
- taskId: "gen-004",
1641
- config: {
1642
- role: "development",
1643
- cli: "opencode",
1644
- args: ["--headless", "--auto-accept"],
1645
- cwd: "/path/to/project",
1646
- timeoutSeconds: 200,
1647
- },
1648
- prompt: \`Scaffold an open source library structure with...\`
1649
- })
1650
- \`\`\`
1651
- **Ideal para:** Scaffolding, prototipado rápido, patrones community-driven
1652
-
1653
- ## Tabla Comparativa de CLIs
1654
-
1655
- | CLI | Timeout | stdin Close | Approval Flag | Mejor Caso de Uso |
1656
- |-----|---------|-------------|---------------|-------------------|
1657
- | **qwen** | 180s | ✅ Sí | N/A | Código rápido |
1658
- | **claude** | 300s | ❌ No | \`--no-approve\` | Arquitectura compleja |
1659
- | **gemini** | 240s | ❌ No | \`-y\` | Código + docs |
1660
- | **opencode** | 200s | ❌ No | \`--auto-accept\` | Open source |
1661
-
1662
- ## Ejemplos Detallados
1663
-
1664
- ### Ejemplo 1: Función Utilitaria con Qwen
1665
- \`\`\`typescript
1666
- // Usuario: "generá una función para validar emails"
1667
- codebridge_launch({
1668
- taskId: "validate-email-001",
1669
- config: {
1670
- role: "development",
1671
- cli: "qwen",
1672
- cwd: process.cwd(),
1673
- timeoutSeconds: 120,
1674
- },
1675
- prompt: \`
1676
- Generate TypeScript function for email validation.
1677
- Requirements:
1678
- - Use regex pattern matching
1679
- - Handle edge cases (null, undefined, empty)
1680
- - Include JSDoc comments
1681
- - Export as named function: validateEmail
1682
-
1683
- Expected behavior:
1684
- validateEmail("test@example.com") → true
1685
- validateEmail("") → false
1686
- validateEmail(null) → false
1687
- \`
1688
- })
1689
- \`\`\`
1690
-
1691
- ### Ejemplo 2: Componente React con Claude
1692
- \`\`\`typescript
1693
- // Usuario: "creá un componente Button con TypeScript"
1694
- codebridge_launch({
1695
- taskId: "button-component-002",
1696
- config: {
1697
- role: "development",
1698
- cli: "claude",
1699
- cwd: "/path/to/react-project",
1700
- timeoutSeconds: 300,
1701
- },
1702
- prompt: \`
1703
- Create a reusable Button component in React with TypeScript.
1704
-
1705
- Requirements:
1706
- - Props: label, onClick, variant (primary|secondary), disabled, loading
1707
- - Use Tailwind CSS for styling
1708
- - Include loading spinner animation
1709
- - Accessible (ARIA attributes)
1710
- - Unit test example with Jest
1711
-
1712
- File: src/components/Button.tsx
1713
- \`
1714
- })
1715
- \`\`\`
1716
-
1717
- ### Ejemplo 3: API Endpoint con Gemini
1718
- \`\`\`typescript
1719
- // Usuario: "creá un endpoint de registro de usuarios"
1720
- codebridge_launch({
1721
- taskId: "register-endpoint-003",
1722
- config: {
1723
- role: "development",
1724
- cli: "gemini",
1725
- cwd: "/path/to/api-project",
1726
- timeoutSeconds: 240,
1727
- },
1728
- prompt: \`
1729
- Create Express.js REST endpoint for user registration.
1730
-
1731
- Requirements:
1732
- - POST /api/auth/register
1733
- - Input validation (email, password min 8 chars)
1734
- - Password hashing with bcrypt
1735
- - JWT token generation
1736
- - Error handling
1737
- - Full JSDoc documentation
1738
- - Example curl request
1739
-
1740
- File: src/routes/auth.ts
1741
- \`
1742
- })
1743
- \`\`\`
1744
-
1745
- ## Variables de Entorno Requeridas
1746
-
1747
- | CLI | Variable | Cómo obtener |
1748
- |-----|----------|--------------|
1749
- | claude | \`ANTHROPIC_API_KEY\` | https://console.anthropic.com |
1750
- | gemini | \`GOOGLE_API_KEY\` | https://makersuite.google.com/app/apikey |
1751
- | qwen | — | No requiere |
1752
- | opencode | — | No requiere |
1753
-
1754
- ## Mejores Prácticas
1755
-
1756
- ### ✅ DOs
1757
- - Especificar lenguaje y framework explícitamente
1758
- - Incluir ejemplos de input/output esperado
1759
- - Definir constraints (estilo, patrones, convenciones)
1760
- - Verificar código generado con \`fs_read\`
1761
- - Proveer instrucciones de uso claras
1762
-
1763
- ### ❌ DON'Ts
1764
- - ❌ Prompts vagos ("hacé código")
1765
- - ❌ No especificar lenguaje/framework
1766
- - ❌ Olidar verificar calidad del código
1767
- - ❌ Entregar sin instrucciones de uso
1768
- - ❌ Ignorar errores de compilación/lint
1769
-
1770
- ## Manejo de Errores
1771
-
1772
- ### Error: "Missing environment variables"
1773
- \`\`\`typescript
1774
- // Verificar antes de lanzar
1775
- if (!process.env.ANTHROPIC_API_KEY) {
1776
- throw new Error("ANTHROPIC_API_KEY required for Claude Code");
1777
- }
1778
- \`\`\`
1779
-
1780
- ### Error: "Process exited with code 1"
1781
- - Verificar stdout/stderr en busca de mensajes de error
1782
- - Reintentar con otro CLI si corresponde
1783
- - Simplificar el prompt y reintentar
1784
-
1785
- ### Error: Timeout
1786
- - Aumentar \`timeoutSeconds\` en config
1787
- - Dividir tarea en subtareas más pequeñas
1788
- - Usar CLI más rápido (Qwen para tareas simples)
1789
-
1790
- ## Errores a Evitar
1791
-
1792
- - ❌ Prompts vagos ("hacé código")
1793
- - ❌ No especificar lenguaje/framework
1794
- - ❌ No verificar calidad del código
1795
- - ❌ Entregar sin instrucciones de uso
1796
- - ❌ Ignorar variables de entorno requeridas
1797
- `,
1798
- },
1799
- {
1800
- name: "code_refactor",
1801
- description: `Refactor existing code to improve structure, performance, and maintainability using CLI subagents`,
1802
- category: "codebridge",
1803
- version: "1.0.0",
1804
- tools: ["codebridge_launch","codebridge_status","fs_read","fs_edit","fs_write"],
1805
- triggers: ["refactorizá el código","refactor code","mejorá el código","improve code","optimizá este archivo","optimize this file","hacé el código más limpio","make code cleaner","reestructurá","restructure","mejorá la performance","improve performance","limpieza de código","code cleanup"],
1806
- body: `
1807
- # Code Refactor Skill
1808
-
1809
- ## Cuándo se Activa
1810
-
1811
- Esta skill se activa cuando el usuario necesita mejorar código existente: limpiar, optimizar, reestructurar, o hacer más mantenible.
1812
-
1813
- ## Herramientas Disponibles
1814
-
1815
- | Tool | Qué hace | Cuándo usarla |
1816
- |------|----------|---------------|
1817
- | \`fs_read\` | Lee código existente | Análisis inicial |
1818
- | \`codebridge_launch\` | Lanza subagente para refactorizar | Refactorización real |
1819
- | \`codebridge_status\` | Verifica estado | Monitoreo |
1820
- | \`fs_edit\` | Aplica cambios específicos | Cambios puntuales |
1821
- | \`fs_write\` | Guarda código refactorizado | Si hay nuevos archivos |
1822
-
1823
- ## Workflow
1824
-
1825
- ### Refactorización
1826
- \`\`\`javascript
1827
- // 1. Leer código existente
1828
- const code = fs_read({ path: "src/legacy.ts" })
1829
-
1830
- // 2. Analizar áreas de mejora
1831
- // - Funciones muy largas (>50 líneas)
1832
- // - Duplicación de lógica
1833
- // - Nombres poco claros
1834
- // - Complejidad ciclomática alta
1835
- // - Performance issues
1836
-
1837
- // 3. Lanzar subagente con foco específico
1838
- const { process_id } = codebridge_launch({
1839
- cli: "claude",
1840
- prompt: \`
1841
- Refactor this TypeScript code:
1842
- - Extract functions longer than 30 lines
1843
- - Rename variables for clarity
1844
- - Apply DRY principle
1845
- - Add JSDoc comments
1846
- - Maintain exact functionality
1847
- \`
1848
- })
1849
-
1850
- // 4. Verificar resultado
1851
- const refactored = fs_read({ path: "src/refactored.ts" })
1852
-
1853
- // 5. Comparar y resumir cambios
1854
- \`\`\`
1855
-
1856
- ## Áreas Comunes de Refactorización
1857
-
1858
- | Área | Técnicas |
1859
- |------|----------|
1860
- | Legibilidad | Nombres claros, funciones cortas, comentarios |
1861
- | DRY | Extraer funciones, eliminar duplicación |
1862
- | Performance | Algoritmos eficientes, caching, lazy loading |
1863
- | Mantenibilidad | Interfaces claras, separación de concerns |
1864
- | Testing | Hacer código testable, inyección de dependencias |
1865
-
1866
- ## Configuración por CLI para Refactorización
1867
-
1868
- ### Claude Code (Refactorización Compleja)
1869
- \`\`\`typescript
1870
- codebridge_launch({
1871
- taskId: "refactor-001",
1872
- config: {
1873
- role: "development",
1874
- cli: "claude",
1875
- args: ["--no-approve", "--output-format", "stream"],
1876
- cwd: "/path/to/project",
1877
- timeoutSeconds: 300, // 5 minutos - análisis profundo
1878
- },
1879
- prompt: \`
1880
- Refactor this authentication module:
1881
- - Current: 400 lines, single file
1882
- - Issues: No separation of concerns, hard to test
1883
- - Goal: Split into controller, service, repository
1884
- - Add dependency injection for testability
1885
- - Maintain backward compatible API
1886
- \`
1887
- })
1888
- \`\`\`
1889
- **Ideal para:** Refactorización arquitectónica, patrones de diseño, gran escala
1890
-
1891
- ### Qwen CLI (Limpieza Rápida)
1892
- \`\`\`typescript
1893
- codebridge_launch({
1894
- taskId: "refactor-002",
1895
- config: {
1896
- role: "development",
1897
- cli: "qwen",
1898
- args: ["--non-interactive"],
1899
- cwd: "/path/to/project",
1900
- timeoutSeconds: 120, // 2 minutos
1901
- },
1902
- prompt: \`
1903
- Clean up this function:
1904
- - Rename variables: x, y, z → descriptive names
1905
- - Extract helper functions (lines 45-89)
1906
- - Add early returns to reduce nesting
1907
- - Keep same functionality
1908
- \`
1909
- })
1910
- \`\`\`
1911
- **Ideal para:** Limpieza rápida, rename variables, funciones cortas
1912
-
1913
- ### Gemini CLI (Refactor + Docs)
1914
- \`\`\`typescript
1915
- codebridge_launch({
1916
- taskId: "refactor-003",
1917
- config: {
1918
- role: "development",
1919
- cli: "gemini",
1920
- args: ["-y", "--quiet"],
1921
- cwd: "/path/to/project",
1922
- timeoutSeconds: 240,
1923
- },
1924
- prompt: \`
1925
- Refactor this API client with full documentation:
1926
- - Add retry logic with exponential backoff
1927
- - Implement request/response interceptors
1928
- - Add comprehensive JSDoc comments
1929
- - Include usage examples in docs
1930
- \`
1931
- })
1932
- \`\`\`
1933
- **Ideal para:** Refactor + documentación, API clients
1934
-
1935
- ### OpenCode (Patrones Open Source)
1936
- \`\`\`typescript
1937
- codebridge_launch({
1938
- taskId: "refactor-004",
1939
- config: {
1940
- role: "development",
1941
- cli: "opencode",
1942
- args: ["--headless", "--auto-accept"],
1943
- cwd: "/path/to/project",
1944
- timeoutSeconds: 200,
1945
- },
1946
- prompt: \`
1947
- Refactor to follow open source best practices:
1948
- - Add input validation at module boundaries
1949
- - Implement error codes for programmatic handling
1950
- - Add logging hooks for debugging
1951
- - Follow community conventions
1952
- \`
1953
- })
1954
- \`\`\`
1955
- **Ideal para:** Patrones community-driven, librerías públicas
1956
-
1957
- ## Tabla Comparativa de CLIs para Refactor
1958
-
1959
- | CLI | Timeout | Mejor Para | Ejemplo |
1960
- |-----|---------|------------|---------|
1961
- | **claude** | 300s | Arquitectura, patrones | Split monolith |
1962
- | **qwen** | 120s | Limpieza rápida | Rename, extract |
1963
- | **gemini** | 240s | Refactor + docs | API client |
1964
- | **opencode** | 200s | Open source patterns | Public libraries |
1965
-
1966
- ## Ejemplos Detallados
1967
-
1968
- ### Ejemplo 1: Extraer Funciones con Qwen
1969
- \`\`\`typescript
1970
- // Usuario: "hacé esta función más legible"
1971
- codebridge_launch({
1972
- taskId: "refactor-legible-001",
1973
- config: {
1974
- role: "development",
1975
- cli: "qwen",
1976
- cwd: process.cwd(),
1977
- timeoutSeconds: 120,
1978
- },
1979
- prompt: \`
1980
- Refactor this 80-line function to improve readability:
1981
-
1982
- File: src/orderProcessor.ts
1983
-
1984
- Tasks:
1985
- 1. Extract validation logic (lines 5-25)
1986
- 2. Extract pricing calculation (lines 30-60)
1987
- 3. Extract notification sending (lines 65-80)
1988
- 4. Add descriptive function names
1989
- 5. Maintain exact same behavior
1990
-
1991
- Each extracted function should be < 25 lines.
1992
- \`
1993
- })
1994
- \`\`\`
1995
-
1996
- ### Ejemplo 2: Separación de Concerns con Claude
1997
- \`\`\`typescript
1998
- // Usuario: "separá la lógica de negocio del controller"
1999
- codebridge_launch({
2000
- taskId: "refactor-soc-002",
2001
- config: {
2002
- role: "development",
2003
- cli: "claude",
2004
- cwd: "/path/to/project",
2005
- timeoutSeconds: 300,
2006
- },
2007
- prompt: \`
2008
- Refactor this Express controller to follow clean architecture:
2009
-
2010
- Current issues:
2011
- - Business logic mixed with HTTP handling
2012
- - Direct database calls in controller
2013
- - Hard to test (requires HTTP server)
2014
-
2015
- Goal:
2016
- 1. Create UserService class (business logic)
2017
- 2. Create UserRepository (data access)
2018
- 3. Keep controller thin (HTTP only)
2019
- 4. Add dependency injection
2020
- 5. Maintain same API endpoints
2021
-
2022
- Files to create:
2023
- - src/services/UserService.ts
2024
- - src/repositories/UserRepository.ts
2025
- - src/controllers/UserController.ts (refactored)
2026
- \`
2027
- })
2028
- \`\`\`
2029
-
2030
- ### Ejemplo 3: Optimización de Performance con Gemini
2031
- \`\`\`typescript
2032
- // Usuario: "optimizá esta función que es lenta"
2033
- codebridge_launch({
2034
- taskId: "refactor-perf-003",
2035
- config: {
2036
- role: "development",
2037
- cli: "gemini",
2038
- cwd: "/path/to/project",
2039
- timeoutSeconds: 240,
2040
- },
2041
- prompt: \`
2042
- Optimize this function for performance:
2043
-
2044
- File: src/dataProcessor.ts
2045
- Current issues:
2046
- - O(n²) nested loop (lines 15-40)
2047
- - Repeated array filtering
2048
- - No caching of computed values
2049
-
2050
- Requirements:
2051
- 1. Reduce to O(n) or O(n log n)
2052
- 2. Add memoization for expensive calculations
2053
- 3. Use Map/Set for O(1) lookups
2054
- 4. Add JSDoc with complexity analysis
2055
- 5. Include before/after benchmark example
2056
- \`
2057
- })
2058
- \`\`\`
2059
-
2060
- ## Mejores Prácticas
2061
-
2062
- ### ✅ DOs
2063
- - Entender código antes de tocar
2064
- - Cambios incrementales, no rewrites completos
2065
- - Mantener tests pasando
2066
- - Documentar cambios estructurales grandes
2067
- - Preservar backward compatibility
2068
- - Medir mejora (performance, líneas, complejidad)
2069
-
2070
- ### ❌ DON'Ts
2071
- - ❌ Refactorizar sin entender funcionalidad
2072
- - ❌ Cambiar comportamiento sin avisar
2073
- - ❌ Hacer cambios muy grandes de una vez
2074
- - ❌ No verificar tests después de refactorizar
2075
- - ❌ Romper API pública sin versión mayor
2076
-
2077
- ## Métricas de Refactorización
2078
-
2079
- | Métrica | Antes | Después | Mejora |
2080
- |---------|-------|---------|--------|
2081
- | Líneas de código | 400 | 250 | -37% |
2082
- | Funciones > 30 líneas | 8 | 2 | -75% |
2083
- | Complejidad ciclomática | 45 | 22 | -51% |
2084
- | Tiempo de tests | 120s | 85s | -29% |
2085
- | Coverage | 65% | 82% | +26% |
2086
-
2087
- ## Manejo de Errores
2088
-
2089
- ### Error: "Functionality changed after refactor"
2090
- - Siempre verificar tests después de refactorizar
2091
- - Usar \`fs_read\` para comparar before/after
2092
- - Mantener backup del código original
2093
-
2094
- ### Error: "Timeout during large refactor"
2095
- - Dividir en múltiples tareas más pequeñas
2096
- - Usar Claude con timeout extendido (600s)
2097
- - Refactorizar por módulos, no todo junto
2098
-
2099
- ## Errores a Evitar
2100
-
2101
- - ❌ Refactorizar sin entender funcionalidad
2102
- - ❌ Cambiar comportamiento sin avisar
2103
- - ❌ Hacer cambios muy grandes de una vez
2104
- - ❌ No verificar tests después de refactorizar
2105
- - ❌ No documentar cambios estructurales
2106
- `,
2107
- },
2108
- {
2109
- name: "code_review",
2110
- description: `Review code quality, identify issues, and provide actionable feedback using CLI subagents`,
2111
- category: "codebridge",
2112
- version: "1.0.0",
2113
- tools: ["codebridge_launch","codebridge_status","fs_read","canvas_show_card"],
2114
- triggers: ["revisá el código","review code","hacé un code review","do a code review","encontrá problemas en el código","find issues in code","verificá la calidad","check quality","buscá bugs","find bugs","análisis de código","code analysis","mejores prácticas","best practices"],
2115
- body: `
2116
- # Code Review Skill
2117
-
2118
- ## Cuándo se Activa
2119
-
2120
- Esta skill se activa cuando el usuario necesita revisión de código: encontrar bugs, verificar calidad, seguridad, performance, o adherence a best practices.
2121
-
2122
- ## Herramientas Disponibles
2123
-
2124
- | Tool | Qué hace | Cuándo usarla |
2125
- |------|----------|---------------|
2126
- | \`fs_read\` | Lee archivos de código | Cargar código a revisar |
2127
- | \`codebridge_launch\` | Lanza subagente para review | Análisis profundo |
2128
- | \`codebridge_status\` | Obtiene resultado del review | Completado del análisis |
2129
- | \`canvas_show_card\` | Muestra resultados estructurados | Presentar feedback |
2130
-
2131
- ## Workflow
2132
-
2133
- ### Code Review
2134
- \`\`\`javascript
2135
- // 1. Leer código
2136
- const files = fs_read({ path: "src/*.ts" })
2137
-
2138
- // 2. Lanzar review con subagente
2139
- const { process_id } = codebridge_launch({
2140
- cli: "claude",
2141
- prompt: \`
2142
- Code Review Checklist:
2143
- 1. Bugs potenciales (null checks, edge cases)
2144
- 2. Security issues (XSS, injection, auth)
2145
- 3. Performance (loops, queries, memory)
2146
- 4. Readability (naming, structure)
2147
- 5. TypeScript best practices
2148
- 6. Testing coverage
2149
-
2150
- Proporcionar línea específica para cada issue.
2151
- \`
2152
- })
2153
-
2154
- // 3. Obtener resultado
2155
- const review = codebridge_status({ process_id })
2156
-
2157
- // 4. Organizar por severidad
2158
- // Critical: Bugs, security
2159
- // Major: Performance, anti-patterns
2160
- // Minor: Naming, style
2161
- // Nitpick: Suggestions
2162
-
2163
- // 5. Mostrar resultados
2164
- canvas_show_card({
2165
- title: "Code Review",
2166
- items: [
2167
- { label: "Critical", value: "2 issues" },
2168
- { label: "Major", value: "5 issues" },
2169
- { label: "Minor", value: "8 issues" }
2170
- ]
2171
- })
2172
- \`\`\`
2173
-
2174
- ## Categorías de Review
2175
-
2176
- | Categoría | Qué buscar |
2177
- |-----------|------------|
2178
- | Bugs | Null dereference, off-by-one, race conditions |
2179
- | Security | XSS, SQL injection, auth bypass, secrets |
2180
- | Performance | N+1 queries, O(n²) loops, memory leaks |
2181
- | Readability | Nombres confusos, funciones largas |
2182
- | Best Practices | Linting, patterns, conventions |
2183
- | Testing | Coverage, edge cases, mocks |
2184
-
2185
- ## Niveles de Severidad
2186
-
2187
- | Nivel | Ejemplo | Acción |
2188
- |-------|---------|--------|
2189
- | Critical | Bug de seguridad, crash | Fix inmediato |
2190
- | Major | Performance issue, anti-pattern | Fix antes de merge |
2191
- | Minor | Naming, style | Fix cuando sea posible |
2192
- | Nitpick | Sugerencia opcional | Considerar |
2193
-
2194
- ## Configuración por CLI para Code Review
2195
-
2196
- ### Claude Code (Review Exhaustivo)
2197
- \`\`\`typescript
2198
- codebridge_launch({
2199
- taskId: "review-001",
2200
- config: {
2201
- role: "development",
2202
- cli: "claude",
2203
- args: ["--no-approve", "--output-format", "stream"],
2204
- cwd: "/path/to/project",
2205
- timeoutSeconds: 300, // 5 minutos - review profundo
2206
- },
2207
- prompt: \`
2208
- Comprehensive code review for PR #42:
2209
-
2210
- Files: src/auth/*.ts (5 files, ~600 lines)
2211
-
2212
- Review checklist:
2213
- 1. Security vulnerabilities (OWASP Top 10)
2214
- 2. Authentication/authorization bugs
2215
- 3. Input validation gaps
2216
- 4. Error handling completeness
2217
- 5. TypeScript type safety
2218
- 6. Test coverage gaps
2219
-
2220
- For each issue:
2221
- - Line number
2222
- - Severity (Critical/Major/Minor)
2223
- - Description
2224
- - Suggested fix
2225
- \`
2226
- })
2227
- \`\`\`
2228
- **Ideal para:** Security review, PRs críticos, auditorías
2229
-
2230
- ### Qwen CLI (Review Rápido)
2231
- \`\`\`typescript
2232
- codebridge_launch({
2233
- taskId: "review-002",
2234
- config: {
2235
- role: "development",
2236
- cli: "qwen",
2237
- args: ["--non-interactive"],
2238
- cwd: "/path/to/project",
2239
- timeoutSeconds: 120, // 2 minutos
2240
- },
2241
- prompt: \`
2242
- Quick review of this utility function:
2243
-
2244
- File: src/utils/formatDate.ts (45 lines)
2245
-
2246
- Check for:
2247
- - Edge cases (null, undefined, invalid input)
2248
- - TypeScript types
2249
- - Performance issues
2250
- - Code style consistency
2251
-
2252
- Return issues with line numbers.
2253
- \`
2254
- })
2255
- \`\`\`
2256
- **Ideal para:** Funciones pequeñas, cambios rápidos, style check
2257
-
2258
- ### Gemini CLI (Review + Docs)
2259
- \`\`\`typescript
2260
- codebridge_launch({
2261
- taskId: "review-003",
2262
- config: {
2263
- role: "development",
2264
- cli: "gemini",
2265
- args: ["-y", "--quiet"],
2266
- cwd: "/path/to/project",
2267
- timeoutSeconds: 240,
2268
- },
2269
- prompt: \`
2270
- Review this API module and suggest documentation improvements:
2271
-
2272
- File: src/api/users.ts
2273
-
2274
- Review:
2275
- 1. JSDoc completeness
2276
- 2. Parameter documentation
2277
- 3. Return type descriptions
2278
- 4. Example usage
2279
- 5. Error documentation
2280
-
2281
- Also check for:
2282
- - Bugs
2283
- - Type safety
2284
- - Error handling
2285
- \`
2286
- })
2287
- \`\`\`
2288
- **Ideal para:** Review + documentación, APIs públicas
2289
-
2290
- ## Tabla Comparativa de CLIs para Review
2291
-
2292
- | CLI | Timeout | Mejor Para | Ejemplo |
2293
- |-----|---------|------------|---------|
2294
- | **claude** | 300s | Security, auditorías | OWASP checklist |
2295
- | **qwen** | 120s | Review rápido | Functions < 50 lines |
2296
- | **gemini** | 240s | Review + docs | API documentation |
2297
-
2298
- ## Ejemplos Detallados
2299
-
2300
- ### Ejemplo 1: Security Review con Claude
2301
- \`\`\`typescript
2302
- // Usuario: "revisá este código en busca de vulnerabilidades"
2303
- codebridge_launch({
2304
- taskId: "security-review-001",
2305
- config: {
2306
- role: "development",
2307
- cli: "claude",
2308
- cwd: "/path/to/project",
2309
- timeoutSeconds: 300,
2310
- },
2311
- prompt: \`
2312
- Security-focused code review:
2313
-
2314
- Files:
2315
- - src/auth/login.ts
2316
- - src/auth/register.ts
2317
- - src/middleware/auth.ts
2318
-
2319
- Check for OWASP Top 10 vulnerabilities:
2320
- 1. SQL Injection (raw queries?)
2321
- 2. XSS (unescaped output?)
2322
- 3. CSRF (missing tokens?)
2323
- 4. Authentication flaws
2324
- 5. Sensitive data exposure
2325
- 6. XXE, SSRF, etc.
2326
-
2327
- For each finding:
2328
- - Severity: Critical/High/Medium/Low
2329
- - CWE reference if applicable
2330
- - Exploit scenario
2331
- - Remediation with code example
2332
- \`
2333
- })
2334
- \`\`\`
2335
-
2336
- ### Ejemplo 2: Quick Review con Qwen
2337
- \`\`\`typescript
2338
- // Usuario: "revisá esta función rápida"
2339
- codebridge_launch({
2340
- taskId: "quick-review-002",
2341
- config: {
2342
- role: "development",
2343
- cli: "qwen",
2344
- cwd: process.cwd(),
2345
- timeoutSeconds: 90,
2346
- },
2347
- prompt: \`
2348
- Quick code review:
2349
-
2350
- File: src/helpers/parseJson.ts
2351
-
2352
- Function: parseJson safely handles JSON parsing
2353
-
2354
- Check:
2355
- - Try/catch for invalid JSON
2356
- - Type guards for parsed result
2357
- - Null/undefined handling
2358
- - TypeScript types
2359
-
2360
- Return any issues with specific line numbers.
2361
- \`
2362
- })
2363
- \`\`\`
2364
-
2365
- ### Ejemplo 3: PR Review con Gemini
2366
- \`\`\`typescript
2367
- // Usuario: "revisá este PR antes de merge"
2368
- codebridge_launch({
2369
- taskId: "pr-review-003",
2370
- config: {
2371
- role: "development",
2372
- cli: "gemini",
2373
- cwd: "/path/to/project",
2374
- timeoutSeconds: 240,
2375
- },
2376
- prompt: \`
2377
- Pre-merge code review for PR #156:
2378
-
2379
- Changes:
2380
- - Added user profile endpoint
2381
- - Modified database schema
2382
- - Updated validation logic
2383
-
2384
- Review criteria:
2385
- 1. Does it work? (logic correctness)
2386
- 2. Is it safe? (security, validation)
2387
- 3. Is it clean? (readability, DRY)
2388
- 4. Is it tested? (unit tests, edge cases)
2389
- 5. Is it documented? (JSDoc, comments)
2390
-
2391
- Format output as GitHub review comment.
2392
- \`
2393
- })
2394
- \`\`\`
2395
-
2396
- ## Checklist de Review por Categoría
2397
-
2398
- ### Security Checklist
2399
- - [ ] Input validation en todos los endpoints
2400
- - [ ] Output encoding para prevenir XSS
2401
- - [ ] Prepared statements (no SQL injection)
2402
- - [ ] CSRF tokens en forms
2403
- - [ ] Rate limiting en APIs sensibles
2404
- - [ ] No secrets en código/logs
2405
- - [ ] Authentication checks en rutas protegidas
2406
-
2407
- ### Performance Checklist
2408
- - [ ] No N+1 queries
2409
- - [ ] Indexes en DB queries
2410
- - [ ] Caching donde aplica
2411
- - [ ] No blocking operations en event loop
2412
- - [ ] Memory leaks (listeners, intervals)
2413
- - [ ] Efficient data structures
2414
-
2415
- ### TypeScript Checklist
2416
- - [ ] No \`any\` types (usar interfaces)
2417
- - [ ] Union types para valores nullable
2418
- - [ ] Type guards para runtime checks
2419
- - [ ] Generic types donde aplica
2420
- - [ ] Strict mode habilitado
2421
-
2422
- ### Testing Checklist
2423
- - [ ] Unit tests para lógica crítica
2424
- - [ ] Edge cases cubiertos
2425
- - [ ] Error scenarios testeados
2426
- - [ ] Mock de dependencias externas
2427
- - [ ] Coverage > 80%
2428
-
2429
- ## Mejores Prácticas
2430
-
2431
- ### ✅ DOs
2432
- - Feedback específico con líneas
2433
- - Sugerencias accionables
2434
- - Balance: issues + aspectos positivos
2435
- - Contexto: prod vs prototype
2436
- - Priorizar por severidad
2437
-
2438
- ### ❌ DON'Ts
2439
- - ❌ Crítica sin sugerencias
2440
- - ❌ Issues vagos sin línea específica
2441
- - ❌ Ignorar contexto del proyecto
2442
- - ❌ Solo criticar, no destacar lo bueno
2443
- - ❌ No priorizar issues
2444
-
2445
- ## Manejo de Errores
2446
-
2447
- ### Error: "Review too large for single prompt"
2448
- - Dividir por archivos
2449
- - Usar Claude con contexto extendido
2450
- - Hacer review por categorías (security, performance, etc.)
2451
-
2452
- ### Error: "False positive in review"
2453
- - Verificar contexto completo del código
2454
- - Considerar trade-offs del diseño
2455
- - Ajustar prompt para ser más específico
2456
-
2457
- ## Errores a Evitar
2458
-
2459
- - ❌ Crítica sin sugerencias
2460
- - ❌ Issues vagos sin línea específica
2461
- - ❌ Ignorar contexto del proyecto
2462
- - ❌ Solo criticar, no destacar lo bueno
2463
- - ❌ No priorizar por severidad
2464
- `,
2465
- },
2466
- {
2467
- name: "code_debug",
2468
- description: `Debug and fix code errors by analyzing stack traces, identifying root causes, and applying fixes using CLI subagents`,
2469
- category: "codebridge",
2470
- version: "1.0.0",
2471
- tools: ["codebridge_launch","codebridge_status","fs_read","fs_edit","cli_exec"],
2472
- triggers: ["debugueá el código","debug code","arreglá el error","fix error","encontrá el bug","find bug","por qué falla","why it fails","stack trace","error en el código","code error","no funciona","not working","excepción","exception"],
2473
- body: `
2474
- # Code Debug Skill
2475
-
2476
- ## Cuándo se Activa
2477
-
2478
- Esta skill se activa cuando hay errores en el código: exceptions, bugs, tests fallando, comportamientos inesperados.
2479
-
2480
- ## Herramientas Disponibles
2481
-
2482
- | Tool | Qué hace | Cuándo usarla |
2483
- |------|----------|---------------|
2484
- | \`fs_read\` | Lee código con errores | Análisis inicial |
2485
- | \`cli_exec\` | Ejecuta tests, reproduce error | Confirmar bug |
2486
- | \`codebridge_launch\` | Lanza subagente para debug | Análisis profundo |
2487
- | \`codebridge_status\` | Obtiene diagnóstico | Resultado del análisis |
2488
- | \`fs_edit\` | Aplica fix al código | Corrección |
2489
-
2490
- ## Workflow
2491
-
2492
- ### Debugging
2493
- \`\`\`javascript
2494
- // 1. Recopilar contexto
2495
- // - Error message completo
2496
- // - Stack trace
2497
- // - Archivos afectados
2498
- // - Steps para reproducir
2499
-
2500
- // 2. Leer código relevante
2501
- const code = fs_read({ path: "src/failing.ts" })
2502
-
2503
- // 3. Reproducir error (opcional)
2504
- const result = cli_exec({ command: "npm test -- failing.test.ts" })
2505
-
2506
- // 4. Analizar con subagente
2507
- const { process_id } = codebridge_launch({
2508
- cli: "claude",
2509
- prompt: \`
2510
- Error: TypeError: Cannot read property 'id' of undefined
2511
- Stack trace:
2512
- at getUser (src/user.ts:15)
2513
- at handler (src/handler.ts:42)
2514
-
2515
- Analizar:
2516
- 1. ¿Qué variable es undefined?
2517
- 2. ¿Por qué no está inicializada?
2518
- 3. ¿Cómo fixear?
2519
- \`
2520
- })
2521
-
2522
- // 5. Obtener diagnóstico
2523
- const analysis = codebridge_status({ process_id })
2524
-
2525
- // 6. Aplicar fix
2526
- fs_edit({
2527
- path: "src/user.ts",
2528
- changes: "Add null check before accessing .id"
2529
- })
2530
-
2531
- // 7. Verificar
2532
- cli_exec({ command: "npm test" })
2533
- \`\`\`
2534
-
2535
- ## Tipos Comunes de Errores
2536
-
2537
- | Error | Causa común | Fix típico |
2538
- |-------|-------------|------------|
2539
- | TypeError undefined | Null/undefined access | Add null check |
2540
- | ReferenceError | Variable no declarada | Declarar/importar |
2541
- | SyntaxError | Typos, missing chars | Fix syntax |
2542
- | AssertionError | Lógica incorrecta | Fix condition |
2543
- | Timeout | Async no resuelve | Add timeout handling |
2544
-
2545
- ## Estrategia de Debug
2546
-
2547
- 1. **Reproducir**: Confirmar que el error existe
2548
- 2. **Localizar**: Stack trace → archivo → línea
2549
- 3. **Entender**: ¿Por qué pasa aquí?
2550
- 4. **Fixear**: Mínimo cambio que resuelve root cause
2551
- 5. **Verificar**: Tests pasan, no hay regresiones
2552
-
2553
- ## Configuración por CLI para Debug
2554
-
2555
- ### Qwen CLI (Debug Rápido)
2556
- \`\`\`typescript
2557
- codebridge_launch({
2558
- taskId: "debug-001",
2559
- config: {
2560
- role: "development",
2561
- cli: "qwen",
2562
- args: ["--non-interactive"],
2563
- cwd: "/path/to/project",
2564
- timeoutSeconds: 120, // 2 minutos - rápido
2565
- },
2566
- prompt: \`
2567
- Error: TypeError: Cannot read property 'id' of undefined
2568
- File: src/user.ts:15
2569
- Stack trace:
2570
- at getUser (src/user.ts:15)
2571
- at handler (src/handler.ts:42)
2572
-
2573
- Identify the root cause and propose a minimal fix.
2574
- \`
2575
- })
2576
- \`\`\`
2577
- **Ideal para:** Errores simples, null checks, bugs rápidos
2578
-
2579
- ### Claude Code (Debug Complejo)
2580
- \`\`\`typescript
2581
- codebridge_launch({
2582
- taskId: "debug-002",
2583
- config: {
2584
- role: "development",
2585
- cli: "claude",
2586
- args: ["--no-approve", "--output-format", "stream"],
2587
- cwd: "/path/to/project",
2588
- timeoutSeconds: 300, // 5 minutos - análisis profundo
2589
- },
2590
- prompt: \`
2591
- Analyze this intermittent race condition:
2592
- - Error occurs in 10% of requests
2593
- - Affects async database operations
2594
- - Stack trace shows Promise.all() in src/batch.ts
2595
-
2596
- Provide:
2597
- 1. Root cause analysis
2598
- 2. Fix with proper Promise handling
2599
- 3. Test to reproduce the race condition
2600
- \`
2601
- })
2602
- \`\`\`
2603
- **Ideal para:** Race conditions, bugs intermitentes, análisis profundo
2604
-
2605
- ### Gemini CLI (Debug + Docs)
2606
- \`\`\`typescript
2607
- codebridge_launch({
2608
- taskId: "debug-003",
2609
- config: {
2610
- role: "development",
2611
- cli: "gemini",
2612
- args: ["-y", "--quiet"],
2613
- cwd: "/path/to/project",
2614
- timeoutSeconds: 240,
2615
- },
2616
- prompt: \`
2617
- Fix this TypeScript type error and add documentation:
2618
-
2619
- Error: Type 'X' is not assignable to type 'Y'
2620
- File: src/types.ts:45
2621
-
2622
- Provide:
2623
- 1. Type fix
2624
- 2. JSDoc explaining the type constraint
2625
- 3. Example of correct usage
2626
- \`
2627
- })
2628
- \`\`\`
2629
- **Ideal para:** Errores de tipo + documentación
2630
-
2631
- ## Tabla Comparativa de CLIs para Debug
2632
-
2633
- | CLI | Timeout | Mejor Para | Ejemplo |
2634
- |-----|---------|------------|---------|
2635
- | **qwen** | 120s | Bugs rápidos, null checks | TypeError, ReferenceError |
2636
- | **claude** | 300s | Race conditions, análisis profundo | Intermittent bugs |
2637
- | **gemini** | 240s | Type errors + docs | TypeScript errors |
2638
-
2639
- ## Ejemplos Detallados
2640
-
2641
- ### Ejemplo 1: TypeError Simple con Qwen
2642
- \`\`\`typescript
2643
- // Usuario: "arreglá este error: Cannot read property 'name' of undefined"
2644
- codebridge_launch({
2645
- taskId: "typeerror-001",
2646
- config: {
2647
- role: "development",
2648
- cli: "qwen",
2649
- cwd: process.cwd(),
2650
- timeoutSeconds: 120,
2651
- },
2652
- prompt: \`
2653
- Error: TypeError: Cannot read property 'name' of undefined
2654
- File: src/components/UserCard.tsx:23
2655
- Code: const userName = user.name;
2656
-
2657
- The 'user' prop can be undefined. Add proper null check.
2658
- Provide minimal fix.
2659
- \`
2660
- })
2661
- \`\`\`
2662
-
2663
- ### Ejemplo 2: Race Condition con Claude
2664
- \`\`\`typescript
2665
- // Usuario: "la app crashea intermitentemente en producción"
2666
- codebridge_launch({
2667
- taskId: "racecondition-002",
2668
- config: {
2669
- role: "development",
2670
- cli: "claude",
2671
- cwd: "/path/to/project",
2672
- timeoutSeconds: 300,
2673
- },
2674
- prompt: \`
2675
- Intermittent crash in production (10% of requests):
2676
-
2677
- Error: Cannot read properties of undefined (reading 'map')
2678
- File: src/dashboard/Dashboard.tsx:89
2679
-
2680
- Context:
2681
- - Dashboard fetches data from 3 APIs in parallel
2682
- - Uses Promise.all() without error handling
2683
- - One API sometimes returns empty response
2684
-
2685
- Analyze:
2686
- 1. Root cause of race condition
2687
- 2. Fix with proper error handling
2688
- 3. Add retry logic for flaky API
2689
- \`
2690
- })
2691
- \`\`\`
2692
-
2693
- ### Ejemplo 3: Error de Tipo con Gemini
2694
- \`\`\`typescript
2695
- // Usuario: "TypeScript no compila, error de tipos"
2696
- codebridge_launch({
2697
- taskId: "typeerror-003",
2698
- config: {
2699
- role: "development",
2700
- cli: "gemini",
2701
- cwd: "/path/to/project",
2702
- timeoutSeconds: 240,
2703
- },
2704
- prompt: \`
2705
- TypeScript Error:
2706
- Type '(user: User) => Promise<User>' is not assignable to type '(user: User) => User'
2707
-
2708
- File: src/services/userService.ts:34
2709
- Function: updateUser
2710
-
2711
- Current code returns Promise<User> but interface expects User.
2712
- Fix the type mismatch and add JSDoc explaining the async behavior.
2713
- \`
2714
- })
2715
- \`\`\`
2716
-
2717
- ## Mejores Prácticas
2718
-
2719
- ### ✅ DOs
2720
- - Leer error completo y stack trace
2721
- - Identificar archivo y línea exactos
2722
- - Entender root cause, no solo síntomas
2723
- - Fix minimalista que aborda causa raíz
2724
- - Agregar test de regresión
2725
- - Verificar con tests existentes
2726
-
2727
- ### ❌ DON'Ts
2728
- - ❌ Fixear síntomas sin entender causa
2729
- - ❌ Cambios grandes sin necesidad
2730
- - ❌ No verificar que el fix funciona
2731
- - ❌ Ignorar tests que ahora fallan
2732
- - ❌ Olvidar casos edge (null, undefined)
2733
-
2734
- ## Manejo de Errores
2735
-
2736
- ### Error: "Missing environment variables"
2737
- \`\`\`typescript
2738
- // Verificar antes de lanzar
2739
- if (!process.env.ANTHROPIC_API_KEY && cli === "claude") {
2740
- throw new Error("ANTHROPIC_API_KEY required for Claude Code");
2741
- }
2742
- \`\`\`
2743
-
2744
- ### Error: "Process exited with code 1"
2745
- - Leer stdout/stderr para mensaje de error específico
2746
- - El CLI puede haber rechazado el prompt (muy vago)
2747
- - Reintentar con prompt más detallado
2748
-
2749
- ### Error: Timeout
2750
- - Aumentar \`timeoutSeconds\` para análisis complejos
2751
- - Dividir debug en pasos más pequeños
2752
- - Usar Qwen para bugs simples (más rápido)
2753
-
2754
- ## Errores a Evitar
2755
-
2756
- - ❌ Fixear síntomas sin entender causa
2757
- - ❌ Cambios grandes sin necesidad
2758
- - ❌ No verificar que el fix funciona
2759
- - ❌ Ignorar tests que ahora fallan
2760
- - ❌ No agregar test de regresión
2761
- `,
2762
- },
2763
- {
2764
- name: "voice_input",
2765
- description: `Transcribe audio input to text using STT (Speech-to-Text) providers like Groq Whisper or OpenAI Whisper`,
2766
- category: "voice",
2767
- version: "1.0.0",
2768
- tools: ["voice_transcribe"],
2769
- triggers: ["transcribí este audio","transcribe audio","convertí voz a texto","convert voice to text","qué dice el audio","what does audio say","escuchá esto","listen to this","audio a texto","audio to text","reconocimiento de voz","speech recognition","nota de voz","voice note"],
2770
- body: `
2771
- # Voice Input Skill
2772
-
2773
- ## Cuándo se Activa
2774
-
2775
- Esta skill se activa cuando el usuario envía audio y necesita transcripción a texto: notas de voz, grabaciones, comandos de voz.
2776
-
2777
- ## Herramientas Disponibles
2778
-
2779
- | Tool | Qué hace | Cuándo usarla |
2780
- |------|----------|---------------|
2781
- | \`voice_transcribe\` | Convierte audio → texto | Transcripción de cualquier audio |
2782
-
2783
- ## Workflow
2784
-
2785
- ### Transcripción
2786
- \`\`\`javascript
2787
- // 1. Recibir audio
2788
- // - File upload
2789
- // - Voice message (Telegram, WhatsApp)
2790
- // - Stream en vivo
2791
-
2792
- // 2. Transcribir
2793
- const result = voice_transcribe({
2794
- audio: audioBuffer,
2795
- language: "es" // o "auto" para detectar
2796
- })
2797
-
2798
- // 3. Formatear
2799
- // - Agregar puntuación
2800
- // - Capitalizar
2801
- // - Marcar speakers si hay múltiples
2802
-
2803
- // 4. Entregar resultado
2804
- \`\`\`
2805
-
2806
- ## Proveedores STT Soportados
2807
-
2808
- | Provider | Modelos | Idiomas |
2809
- |----------|---------|---------|
2810
- | Groq | whisper-large-v3, turbo | Multi |
2811
- | OpenAI | whisper-1 | Multi |
2812
-
2813
- ## Configuración por Canal
2814
-
2815
- Cada canal puede configurar su proveedor STT preferido:
2816
- - \`stt_provider\`: "groq-whisper" | "openai-whisper"
2817
-
2818
- ## Mejores Prácticas
2819
-
2820
- - Detectar idioma automáticamente
2821
- - Agregar puntuación para legibilidad
2822
- - Marcar segmentos inaudibles
2823
- - Preservar idioma original
2824
-
2825
- ## Errores a Evitar
2826
-
2827
- - ❌ Traducir sin pedir (mantener idioma)
2828
- - ❌ Omitir puntuación
2829
- - ❌ No indicar baja confianza
2830
- - ❌ Ignorar ruido de fondo que afecta calidad
2831
- `,
2832
- },
2833
- {
2834
- name: "voice_output",
2835
- description: `Convert text to synthesized speech using TTS (Text-to-Speech) providers like ElevenLabs, OpenAI TTS, or Gemini TTS`,
2836
- category: "voice",
2837
- version: "1.0.0",
2838
- tools: ["voice_speak"],
2839
- triggers: ["leé esto en voz alta","read this aloud","convertí a voz","convert to speech","hablá este texto","speak this text","texto a voz","text to speech","generá audio","generate audio","síntesis de voz","voice synthesis","escuchá la respuesta","listen to response"],
2840
- body: `
2841
- # Voice Output Skill
2842
-
2843
- ## Cuándo se Activa
2844
-
2845
- Esta skill se activa cuando el usuario necesita convertir texto a voz: leer respuestas, generar audio, síntesis de voz.
2846
-
2847
- ## Herramientas Disponibles
2848
-
2849
- | Tool | Qué hace | Cuándo usarla |
2850
- |------|----------|---------------|
2851
- | \`voice_speak\` | Convierte texto → audio | Síntesis de voz |
2852
-
2853
- ## Workflow
2854
-
2855
- ### Text-to-Speech
2856
- \`\`\`javascript
2857
- // 1. Recibir texto
2858
- const text = "Hola, ¿cómo estás?"
2859
-
2860
- // 2. Preprocesar
2861
- // - Expandir números: "5" → "cinco"
2862
- // - Expandir fechas: "01/01" → "primero de enero"
2863
- // - Expandir abbreviaturas: "Dr." → "Doctor"
2864
-
2865
- // 3. Sintetizar
2866
- const audio = voice_speak({
2867
- text: optimizedText,
2868
- voice_id: "eleven_flash_v2_5", // o configured voice
2869
- language: "es"
2870
- })
2871
-
2872
- // 4. Entregar audio
2873
- // - Enviar como archivo
2874
- // - Streaming si el canal lo soporta
2875
- \`\`\`
2876
-
2877
- ## Proveedores TTS Soportados
2878
-
2879
- | Provider | Modelos | Voces |
2880
- |----------|---------|-------|
2881
- | ElevenLabs | Flash V2.5, Turbo V2.5, Multilingual V2, V3 | 1000+ |
2882
- | OpenAI | tts-1, tts-1-hd, gpt-4o-mini-tts | 6+ |
2883
- | Gemini | 2.5 Flash TTS, 2.5 Pro TTS | Multi |
2884
- | Qwen | Qwen TTS Flash, Instruct | Multi |
2885
-
2886
- ## Configuración por Canal
2887
-
2888
- Cada canal configura su proveedor TTS:
2889
- - \`tts_provider\`: "elevenlabs" | "openai-tts" | "gemini-tts"
2890
- - \`tts_voice_id\`: ID específico de voz (ej. ElevenLabs voice ID)
2891
-
2892
- ## Mejores Prácticas
2893
-
2894
- - Preprocesar texto para naturalidad
2895
- - Usar voz configurada por usuario
2896
- - Cachear respuestas frecuentes
2897
- - Split de textos largos
2898
-
2899
- ## Errores a Evitar
2900
-
2901
- - ❌ Enviar texto crudo sin preprocesar
2902
- - ❌ Ignorar preferencia de voz
2903
- - ❌ No manejar límites de longitud
2904
- - ❌ No cachear (costo API)
2905
- `,
2906
- },
2907
- {
2908
- name: "voice_assistant",
2909
- description: `Full voice-to-voice interaction: transcribe user speech, process request, and respond with synthesized speech`,
2910
- category: "voice",
2911
- version: "1.0.0",
2912
- tools: ["voice_transcribe","voice_speak"],
2913
- triggers: ["modo voz","voice mode","asistente de voz","voice assistant","hablá conmigo","talk to me","interacción por voz","voice interaction","respuesta hablada","spoken response","comando de voz","voice command","diálogo por voz","voice dialogue"],
2914
- body: `
2915
- # Voice Assistant Skill
2916
-
2917
- ## Cuándo se Activa
2918
-
2919
- Esta skill se activa para interacción completa voz a voz: el usuario habla, el asistente procesa y responde con voz.
2920
-
2921
- ## Herramientas Disponibles
2922
-
2923
- | Tool | Qué hace | Cuándo usarla |
2924
- |------|----------|---------------|
2925
- | \`voice_transcribe\` | Audio → texto | Input del usuario |
2926
- | \`voice_speak\` | Texto → audio | Respuesta del asistente |
2927
-
2928
- ## Workflow
2929
-
2930
- ### Voice-to-Voice
2931
- \`\`\`javascript
2932
- // 1. Usuario habla
2933
- const userAudio = receiveAudio()
2934
-
2935
- // 2. Transcribir
2936
- const userText = voice_transcribe({
2937
- audio: userAudio,
2938
- language: "auto"
2939
- })
2940
- // → "¿Cuál es el clima hoy?"
2941
-
2942
- // 3. Procesar request
2943
- // - Entender intención
2944
- // - Ejecutar acción (ej. consultar API clima)
2945
- // - Generar respuesta
2946
- const responseText = "Hoy hay 25 grados y soleado en Buenos Aires"
2947
-
2948
- // 4. Sintetizar respuesta
2949
- const responseAudio = voice_speak({
2950
- text: responseText,
2951
- voice_id: "eleven_flash_v2_5",
2952
- language: "es"
2953
- })
2954
-
2955
- // 5. Enviar audio
2956
- sendAudio(responseAudio)
2957
- \`\`\`
2958
-
2959
- ## Casos de Uso
2960
-
2961
- | Caso | Flujo |
2962
- |------|-------|
2963
- | Pregunta simple | Transcribe → responde → sintetiza |
2964
- | Comando | Transcribe → ejecuta → confirma por voz |
2965
- | Diálogo | Mantener contexto entre exchanges |
2966
- | Wake word | Escuchar "hey bee" → activar → procesar |
2967
-
2968
- ## Configuración
2969
-
2970
- ### Wake Word
2971
- \`\`\`json
2972
- {
2973
- "voice_wake_word": "hey bee",
2974
- "voice_wake_enabled": true
2975
- }
2976
- \`\`\`
2977
-
2978
- ### Canal Voice
2979
- \`\`\`json
2980
- {
2981
- "voice_enabled": true,
2982
- "tts_enabled": true,
2983
- "stt_provider": "groq-whisper",
2984
- "tts_provider": "elevenlabs",
2985
- "tts_voice_id": "eleven_flash_v2_5"
2986
- }
2987
- \`\`\`
2988
-
2989
- ## Mejores Prácticas
2990
-
2991
- - Respuestas cortas y naturales (<60s)
2992
- - Mantener contexto conversacional
2993
- - Indicadores de procesamiento
2994
- - Fallback a texto si falla voz
2995
-
2996
- ## Errores a Evitar
2997
-
2998
- - ❌ Respuestas muy largas para audio
2999
- - ❌ Perder contexto entre exchanges
3000
- - ❌ No indicar que está procesando
3001
- - ❌ No tener fallback si falla TTS/STT
3002
- `,
3003
- },
3004
- {
3005
- name: "office_document_manager",
3006
- description: `Leer, crear y manipular archivos Office (PDF, Word, Excel, PowerPoint) desde el workspace`,
3007
- category: "office",
3008
- version: "1.0.0",
3009
- tools: ["office_leer_pdf","office_escribir_pdf","office_leer_docx","office_escribir_docx","office_leer_xlsx","office_escribir_xlsx","office_leer_pptx","office_escribir_pptx"],
3010
- triggers: ["leer pdf","abrir pdf","extraer texto de pdf","pdf a texto","crear pdf","generar pdf","exportar a pdf","leer word","abrir docx","extraer texto de word","crear word","generar docx","documento word","leer excel","abrir xlsx","datos de excel","crear excel","generar xlsx","exportar a excel","leer powerpoint","abrir pptx","presentacion","diapositivas","crear presentacion","generar pptx","read pdf","open pdf","create pdf","read excel","create excel","read word","create word","read powerpoint","create presentation"],
3011
- body: `
3012
- # Office Document Manager Skill
3013
-
3014
- ## Cuándo se Activa
3015
-
3016
- Esta skill se activa cuando el usuario necesita:
3017
- - **Leer** archivos PDF, Word (.docx), Excel (.xlsx) o PowerPoint (.pptx)
3018
- - **Generar** nuevos archivos en cualquiera de esos formatos
3019
- - **Convertir** contenido entre formatos (ej: texto → PDF, JSON → Excel)
3020
- - **Extraer** datos estructurados de documentos (tablas de Excel, slides de presentación)
3021
-
3022
- ## Herramientas Disponibles
3023
-
3024
- | Tool | Qué hace | Cuándo usarla |
3025
- |------|----------|---------------|
3026
- | \`office_leer_pdf\` | Extrae texto + metadata de PDF | Leer informes, contratos, libros en PDF |
3027
- | \`office_escribir_pdf\` | Genera PDF desde texto | Crear reportes, resúmenes, documentación |
3028
- | \`office_leer_docx\` | Extrae texto y tablas de Word | Leer documentos, contratos, informes Word |
3029
- | \`office_escribir_docx\` | Genera Word con estructura | Crear documentos formales con títulos/tablas |
3030
- | \`office_leer_xlsx\` | Lee hojas de Excel como JSON | Procesar datos, tablas, inventarios |
3031
- | \`office_escribir_xlsx\` | Genera Excel desde JSON | Exportar datos, crear reportes tabulares |
3032
- | \`office_leer_pptx\` | Extrae texto de cada slide | Resumir presentaciones, extraer contenido |
3033
- | \`office_escribir_pptx\` | Genera presentación PowerPoint | Crear slides desde datos o resúmenes |
3034
-
3035
- ## Workflow por Caso de Uso
3036
-
3037
- ### Leer y resumir un documento
3038
- 1. \`office_leer_pdf/docx/xlsx/pptx\` → extraer contenido
3039
- 2. Procesar y resumir el texto
3040
- 3. \`notify\` → enviar resumen al usuario
3041
-
3042
- ### Transformar datos a Excel
3043
- 1. Obtener datos (de memoria, herramienta o cálculo)
3044
- 2. Estructurar en \`hojas\` con \`datos\` como array de objetos
3045
- 3. \`office_escribir_xlsx\` → generar archivo
3046
- 4. Confirmar ruta al usuario
3047
-
3048
- ### Crear un informe PDF
3049
- 1. Compilar el contenido del informe como texto
3050
- 2. \`office_escribir_pdf\` → generar con título y márgenes
3051
- 3. Confirmar que el archivo quedó en la ruta esperada
3052
-
3053
- ### Generar una presentación
3054
- 1. Definir estructura: título + array de slides (título + puntos)
3055
- 2. \`office_escribir_pptx\` → generar .pptx
3056
- 3. Opcional: incluir notas del presentador en cada slide
3057
-
3058
- ## Parámetros Clave
3059
-
3060
- ### \`parrafos\` para DOCX
3061
- \`\`\`json
3062
- [
3063
- { "texto": "Capítulo 1", "tipo": "titulo1" },
3064
- { "texto": "Subtítulo", "tipo": "titulo2" },
3065
- { "texto": "Contenido normal", "tipo": "parrafo" },
3066
- { "texto": "Ítem de lista", "tipo": "lista" },
3067
- { "texto": "Texto importante", "tipo": "parrafo", "negrita": true }
3068
- ]
3069
- \`\`\`
3070
-
3071
- ### \`hojas\` para XLSX
3072
- \`\`\`json
3073
- [
3074
- {
3075
- "nombre": "Ventas",
3076
- "datos": [
3077
- { "Mes": "Enero", "Total": 5000 },
3078
- { "Mes": "Febrero", "Total": 6200 }
3079
- ]
3080
- }
3081
- ]
3082
- \`\`\`
3083
-
3084
- ### \`diapositivas\` para PPTX
3085
- \`\`\`json
3086
- [
3087
- {
3088
- "titulo": "¿Qué es Machine Learning?",
3089
- "puntos": ["Subcampo de IA", "Aprende de datos", "Hace predicciones"],
3090
- "notas": "Mencionar el enfoque supervisado y no supervisado"
3091
- }
3092
- ]
3093
- \`\`\`
3094
-
3095
- ## Errores a Evitar
3096
-
3097
- - ❌ Intentar leer un archivo que no existe (verifica con \`fs_exists\` primero)
3098
- - ❌ Sobrescribir sin confirmar cuando el archivo destino ya existe
3099
- - ❌ Usar \`contenido\` y \`puntos\` a la vez en PPTX — \`puntos\` tiene prioridad
3100
- - ❌ Pasar un array de arrays como \`datos\` de XLSX cuando se esperan objetos con claves
3101
- - ❌ Intentar leer PDF de más de 100 páginas sin especificar rango (usar \`pagina_inicio\`/\`pagina_fin\`)
3102
- `,
3103
- },
3104
- {
3105
- name: "cron_manager",
3106
- description: `Complete management of cron jobs with cron expressions. Create, list, update, pause, resume, delete, trigger, and view history. Use for reminders, automated reports, periodic checks.`,
3107
- category: "cron",
3108
- version: "2.0.0",
3109
- tools: ["cron.create","cron.list","cron.update","cron.delete","cron.pause","cron.resume","cron.trigger","cron.history"],
3110
- triggers: ["programá una tarea","schedule task","creá un cron","create cron","editá el cron","edit cron","eliminá el cron","remove cron","lista las tareas","list cron jobs","modificá el cron","modify cron","tarea recurrente","recurring task","todos los días","daily","cada semana","weekly"],
3111
- body: `
3112
- # Cron Manager Skill
3113
-
3114
- ## Cuándo se Activa
3115
-
3116
- Para gestionar tareas programadas (cron jobs): crear, listar, actualizar, pausar, reanudar, eliminar, ejecutar y ver historial.
3117
-
3118
- ## Herramientas Disponibles
3119
-
3120
- | Tool | Qué hace | Cuándo usarla |
3121
- |------|----------|---------------|
3122
- | \`cron.create\` | Crear cron job | Nueva tarea |
3123
- | \`cron.list\` | Listar todos | Ver existentes |
3124
- | \`cron.update\` | Actualizar existente | Cambiar horario/instrucción |
3125
- | \`cron.pause\` | Pausar temporalmente | Sin eliminar |
3126
- | \`cron.resume\` | Reanudar pausado | Continuar ejecución |
3127
- | \`cron.delete\` | Eliminar permanentemente | Cancelar para siempre |
3128
- | \`cron.trigger\` | Ejecutar ahora | Forzar ejecución |
3129
- | \`cron.history\` | Ver historial | Ver logs de ejecuciones |
3130
-
3131
- ## Campos Principales
3132
-
3133
- | Campo | Tipo | Descripción |
3134
- |-------|------|-------------|
3135
- | \`name\` | string | Identificador corto (e.g., 'daily-report') |
3136
- | \`task\` | string | **REQUERIDO** - Instrucciones para el agente al ejecutarse |
3137
- | \`task_type\` | string | 'recurring' (repite) o 'one_shot' (una vez) |
3138
- | \`cron_expression\` | string | Expresión cron (solo para recurring) |
3139
- | \`fire_at\` | string | Datetime ISO (solo para one_shot) |
3140
- | \`channel\` | string | Canal de notificación |
3141
- | \`start_at\` | string | Inicio de ventana opcional (Croner startAt) |
3142
- | \`stop_at\` | string | Fin de ventana opcional (Croner stopAt) |
3143
- | \`dom_and_dow\` | number | 0=OR (default), 1=AND (día mes + día semana) |
3144
-
3145
- ## Cron Expression Format
3146
-
3147
- \`\`\`
3148
- * * * * *
3149
- │ │ │ │ │
3150
- │ │ │ │ └── Día semana (0-6, 0=Domingo)
3151
- │ │ │ └──── Mes (1-12)
3152
- │ │ └────── Día del mes (1-31)
3153
- │ └──────── Hora (0-23)
3154
- └────────── Minuto (0-59)
3155
- \`\`\`
3156
-
3157
- ## Ejemplos Comunes
3158
-
3159
- | Expresión | Significado |
3160
- |-----------|-------------|
3161
- | \`0 9 * * *\` | Diario 9:00 AM |
3162
- | \`0 7 * * 1-5\` | Lun-Vie 7:00 AM |
3163
- | \`0 */2 * * *\` | Cada 2 horas |
3164
- | \`0 0 * * 0\` | Domingos medianoche |
3165
- | \`0 0 1 * *\` | Día 1 de cada mes |
3166
-
3167
- ## Cómo Usar start_at / stop_at
3168
-
3169
- - \`start_at\`: La tarea no ejecuta antes de esta fecha
3170
- - \`stop_at\`: La tarea no ejecuta después de esta fecha
3171
- - Formato ISO: \`'2026-04-01T00:00:00'\`
3172
-
3173
- ## Cómo Usar dom_and_dow
3174
-
3175
- - \`0\` (default): Se ejecuta si es el día del mes O el día de semana
3176
- - \`1\`: Se ejecuta solo si es EL MISMO día del mes Y el día de semana
3177
-
3178
- Ejemplo: \`0 9 15 * *\` con dom_and_dow=1 significa "los 15 de cada mes QUE SEA domingo"
3179
-
3180
- ## Workflow para Crear
3181
-
3182
- 1. **Preguntar** → ¿one_shot o recurring?
3183
- 2. **Obtener** → Hora y canal de notificación
3184
- 3. **Crear** → \`cron.create\` con campo \`task\` obligatorio
3185
- 4. **Confirmar** → \`cron.list\` mostrar next runs
3186
-
3187
- ## Errores a Evitar
3188
-
3189
- - ❌ Olvidar el campo \`task\` — es obligatorio
3190
- - ❌ Usar exec para tareas programadas
3191
- - ❌ No preguntar si es one_shot o recurring
3192
- - ❌ No mostrar próximos horarios al crear
3193
- - ❌ Llamar \`cron.update\` sin \`task_id\` — siempre hacer \`cron.list\` primero`,
3194
- },
3195
- {
3196
- name: "cron_reminder",
3197
- description: `Schedule a reminder for yourself at a specific time. Creates a one_shot cron job that sends a notification message via your preferred channel.`,
3198
- category: "cron",
3199
- version: "2.0.0",
3200
- tools: ["cron.create","notify"],
3201
- triggers: ["recordame","remind me","recordatorio","reminder","alerta","alert","avísame","notify me","programá","schedule","para mañana","for tomorrow","en 30 minutos","in 30 minutes"],
3202
- body: `
3203
- # Cron Reminder Skill
3204
-
3205
- ## Cuándo se Activa
3206
-
3207
- Para crear recordatorios de una sola ejecución (one_shot): "recuerdame a las 3pm", "avísame en 30 minutos", etc.
3208
-
3209
- ## Herramientas
3210
-
3211
- | Tool | Qué hace |
3212
- |------|----------|
3213
- | \`cron.create\` | Crear recordatorio one_shot |
3214
- | \`notify\` | Enviar notificación directa |
3215
-
3216
- ## Cómo Funciona
3217
-
3218
- 1. **Preguntar** → ¿De qué te aviso? ¿A qué hora? ¿Por qué canal?
3219
- 2. **Crear** → \`cron.create\` con \`task_type: 'one_shot'\` y \`fire_at\` en formato ISO
3220
- 3. **Confirmar** → Mostrar hora programada
3221
-
3222
- ## Parámetros
3223
-
3224
- | Campo | Descripción |
3225
- |-------|-------------|
3226
- | \`task\` | **REQUERIDO** - Mensaje del recordatorio |
3227
- | \`task_type\` | Siempre \`'one_shot'\` |
3228
- | \`fire_at\` | Fecha/hora ISO (ej: \`'2026-04-20T15:00:00'\`) |
3229
- | \`channel\` | Canal (telegram, discord, whatsapp, webchat) |
3230
-
3231
- ## Errores Comunes
3232
-
3233
- - ❌ Olvidar el campo \`task\` — obligatorio para que el agente sepa qué enviar
3234
- - ❌ Usar expresiones cron para recordatorios (usar \`fire_at\` en vez de \`cron_expression\`)
3235
- - ❌ Poner \`fire_at\` en el pasado`,
3236
- },
3237
- {
3238
- name: "busqueda_fts5",
3239
- description: `Core discovery skill - learn how to find any capability using search_knowledge`,
3240
- category: "core",
3241
- version: "1.0.0",
3242
- tools: ["search_knowledge"],
3243
- triggers: ["cómo busco herramientas","cómo encuentro skills","how to find tools","search knowledge","discovery","buscar en la base","encontrar herramientas"],
3244
- body: `
3245
- # busqueda_fts5 — Discovery System
3246
-
3247
- This skill teaches you how to find any capability in Hive using **search_knowledge**.
3248
-
3249
- ## Por qué Discovery?
3250
-
3251
- You start with only 4 basic tools. All other capabilities (tools, skills, MCP tools, playbook rules) must be discovered dynamically.
3252
-
3253
- ## Cómo Buscar
3254
-
3255
- \`search_knowledge(type, query)\`
3256
-
3257
- ### Type Options:
3258
-
3259
- | type | What it finds | Example |
3260
- |------|---------------|---------|
3261
- | **tools** | Native Hive tools | \`search_knowledge(type="tools", query="leer archivo")\` |
3262
- | **skills** | Task instructions | \`search_knowledge(type="skills", query="generar código")\` |
3263
- | **mcp** | External MCP tools (Airtable, GitHub) | \`search_knowledge(type="mcp", query="crear registro")\` |
3264
- | **playbook** | Best practices rules | \`search_knowledge(type="playbook", query="seguridad")\` |
3265
- | **all** | Everything | \`search_knowledge(type="all", query="buscar web")\` |
3266
-
3267
- ## Query Tips
3268
-
3269
- - **Be specific**: \`search_knowledge(type="tools", query="leer archivo markdown")\` not just "file"
3270
- - **Bilingual**: Search in Spanish, the system retries in English if few results
3271
- - **Use task context**: "debuggear código" finds code_debug skill
3272
- - **Tool format**: MCP tools are \`{serverName}__{toolName}\` (e.g., \`airtable_crm_datos___AIRTABLE_LIST_BASES\`)
3273
-
3274
- ## Discovery Flow
3275
-
3276
- 1. User asks for something you don't have → \`search_knowledge(query, type)\`
3277
- 2. Results come back with tool names and descriptions
3278
- 3. Tools are automatically injected into your context
3279
- 4. Use the injected tools immediately
3280
-
3281
- ## Examples
3282
-
3283
- **Find a tool to read files:**
3284
- \`\`\`
3285
- search_knowledge({type: "tools", query: "leer archivo", limit: 5})
3286
- → Returns fs_read, fs_list, etc.
3287
- \`\`\`
3288
-
3289
- **Find Airtable tools:**
3290
- \`\`\`
3291
- search_knowledge({type: "mcp", query: "crear registro airtable", limit: 5})
3292
- → Returns AIRTABLE_CREATE_RECORD, etc.
3293
- \`\`\`
3294
-
3295
- **Find skill to generate code:**
3296
- \`\`\`
3297
- search_knowledge({type: "skills", query: "generar código", limit: 3})
3298
- → Returns code_generate, code_delegator, etc.
3299
- \`\`\`
3300
-
3301
- ## Priority Rule
3302
-
3303
- **ALWAYS prefer native tools over MCP tools** when both do the task.
3304
- - Native tools: faster, no network, always available
3305
- - MCP tools: fallback when no native tool exists
3306
-
3307
- ## Remember
3308
-
3309
- - No tool in your startup context? → **search_knowledge**
3310
- - Don't know how to do something? → **search_knowledge**
3311
- - Need external capabilities (Airtable, GitHub)? → **search_knowledge(type="mcp")**`,
3312
- },
3313
- {
3314
- name: "meeting_transcription",
3315
- description: `Transcribir reuniones en tiempo real y generar informes gerenciales con decisiones, action items y próximos pasos`,
3316
- category: "meeting",
3317
- version: "1.0.0",
3318
- tools: ["meeting_start","meeting_add_segment","meeting_stop","meeting_report","office_escribir_docx","notify","report_progress"],
3319
- triggers: ["transcribir reunión","iniciar transcripción","meeting transcription","grabar reunión","iniciar reunión","start meeting","detener reunión","stop meeting","reporte de reunión","generar reporte reunión","informe de reunión","acta de reunión","transcripción de reunión","meeting report"],
3320
- body: `
3321
- # Meeting Transcription Skill
3322
-
3323
- ## Cuándo se Activa
3324
-
3325
- Esta skill se activa para gestión completa del ciclo de vida de una reunión: inicio, transcripción en tiempo real, detención y generación de informe gerencial.
3326
-
3327
- ## Herramientas Disponibles
3328
-
3329
- | Tool | Qué hace | Cuándo usarla |
3330
- |------|----------|---------------|
3331
- | \`meeting_start\` | Crea una sesión en DB → devuelve session_id | Al iniciar la reunión |
3332
- | \`meeting_add_segment\` | Transcribe un chunk de audio y lo persiste | Por cada audio recibido |
3333
- | \`meeting_stop\` | Marca la sesión como detenida | Cuando termina la reunión |
3334
- | \`meeting_report\` | Lee todos los segmentos y arma el transcript | Para generar el reporte |
3335
- | \`office_escribir_docx\` | Guarda el reporte como archivo Word | Al finalizar el análisis |
3336
- | \`notify\` | Envía mensajes en tiempo real al canal | Para mostrar transcripciones y el reporte |
3337
- | \`report_progress\` | Muestra progreso en barra | Durante transcripción larga |
3338
-
3339
- ## Workflow Completo
3340
-
3341
- \`\`\`
3342
- Usuario: "transcribir reunión"
3343
- → Agente pregunta título
3344
- → meeting_start(title) → session_id: "abc123"
3345
- → Agente: "✅ Sesión abc123 iniciada. Habla cuando quieras."
3346
-
3347
- [Usuario graba audio en la UI]
3348
- → meeting_add_segment(session_id, audio_base64)
3349
- → notify: "[Speaker]: Texto transcrito..."
3350
-
3351
- Usuario: "detener reunión"
3352
- → meeting_stop(session_id)
3353
- → Agente: "⏹️ 47 segmentos transcritos. ¿Genero el reporte?"
3354
-
3355
- Usuario: "sí"
3356
- → meeting_report(session_id) → transcript completo
3357
- → LLM analiza → secciones estructuradas
3358
- → office_escribir_docx → informe_reunion_abc123.docx
3359
- → notify: [Markdown del informe completo]
3360
- → Agente: "✅ DOCX guardado en workspace."
3361
- \`\`\`
3362
-
3363
- ## Formato del Informe Gerencial
3364
-
3365
- El informe generado incluye:
3366
-
3367
- 1. **Resumen Ejecutivo** — Captura la esencia en 3-5 oraciones
3368
- 2. **Participantes** — Detectados automáticamente del transcript
3369
- 3. **Decisiones Tomadas** — Lista numerada de cada decisión
3370
- 4. **Action Items** — Tabla con Tarea / Responsable / Fecha
3371
- 5. **Próximos Pasos** — Acciones inmediatas
3372
- 6. **Temas de Seguimiento** — Pendientes para futuras reuniones
3373
-
3374
- ## Consideraciones
3375
-
3376
- - El informe se entrega en dos formatos: **Markdown en chat** + **DOCX descargable**
3377
- - El idioma del informe es siempre **español**
3378
- - La latencia de transcripción es ~4s por chunk de 3s de audio (normal para Whisper)
3379
- - El session_id debe conservarse durante toda la reunión
1432
+ - Eliminar surfaces con \`a2ui_delete_surface\` al completar o cancelar
3380
1433
  `,
3381
1434
  },
3382
1435
  ];