@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.
- package/CHANGELOG.md +97 -0
- package/README.md +78 -23
- package/bunfig.toml +4 -2
- package/docs/API-AGENTS.md +78 -27
- package/docs/API-CONTEXT-COMPILER.md +31 -34
- package/docs/API-TOOLS-SKILLS-CHANNELS.md +58 -22
- package/docs/HIVE-HARNESS.md +1 -1
- package/docs/INDEX.md +4 -4
- package/docs/TEMPLATE-HIVE-APP.md +10 -10
- package/package.json +9 -4
- package/packages/cli/package.json +2 -2
- package/packages/cli/src/commands/create-app.test.ts +36 -7
- package/packages/cli/src/commands/init.ts +3 -3
- package/packages/cli/src/commands/run.ts +1 -1
- package/packages/cli/src/commands/test.ts +37 -25
- package/packages/cli/src/commands/trace.ts +30 -28
- package/packages/cli/templates/hive-app/.env.example +10 -2
- package/packages/cli/templates/hive-app/README.md +103 -0
- package/packages/cli/templates/hive-app/hive.config.ts +9 -3
- package/packages/cli/templates/hive-app/src/agents/coordinator.ts +8 -1
- package/packages/cli/templates/hive-app/src/main.ts +12 -19
- package/packages/core/package.json +5 -4
- package/packages/core/src/agent/acceptance-checks.ts +166 -0
- package/packages/core/src/agent/agent-catalog.ts +348 -0
- package/packages/core/src/agent/agent-loop.ts +1373 -0
- package/packages/core/src/agent/capability-search.ts +186 -0
- package/packages/core/src/agent/catalog-selector.ts +103 -0
- package/packages/core/src/agent/{Compaction.ts → compaction.ts} +86 -63
- package/packages/core/src/agent/context-compiler.ts +689 -0
- package/packages/core/src/agent/conversation-store.ts +381 -0
- package/packages/core/src/agent/curator.ts +276 -0
- package/packages/core/src/agent/delegation-runtime.ts +241 -0
- package/packages/core/src/agent/goal-runner.ts +323 -0
- package/packages/core/src/agent/index.ts +17 -12
- package/packages/core/src/agent/llm-client.ts +266 -0
- package/packages/core/src/agent/llm-providers/anthropic.ts +264 -0
- package/packages/core/src/agent/llm-providers/deepseek.ts +8 -0
- package/packages/core/src/agent/{providers → llm-providers}/gemini.ts +98 -60
- package/packages/core/src/agent/llm-providers/groq.ts +5 -0
- package/packages/core/src/agent/llm-providers/hiveagents.ts +253 -0
- package/packages/core/src/agent/{providers → llm-providers}/interface.ts +73 -13
- package/packages/core/src/agent/llm-providers/kimi.ts +8 -0
- package/packages/core/src/agent/llm-providers/minimax.ts +13 -0
- package/packages/core/src/agent/llm-providers/mistral.ts +5 -0
- package/packages/core/src/agent/llm-providers/modelscope.ts +5 -0
- package/packages/core/src/agent/llm-providers/nvidia.ts +5 -0
- package/packages/core/src/agent/{providers → llm-providers}/ollama.ts +31 -5
- package/packages/core/src/agent/llm-providers/openai-compat-base.ts +418 -0
- package/packages/core/src/agent/llm-providers/openai.ts +5 -0
- package/packages/core/src/agent/llm-providers/opencode-go.ts +9 -0
- package/packages/core/src/agent/llm-providers/openrouter.ts +5 -0
- package/packages/core/src/agent/llm-providers/qwen.ts +5 -0
- package/packages/core/src/agent/llm-providers/z-ai.ts +5 -0
- package/packages/core/src/agent/minimal-loadout.ts +47 -0
- package/packages/core/src/agent/playbook-selector.ts +119 -0
- package/packages/core/src/agent/{PromptBuilder.ts → prompt-builder.ts} +21 -22
- package/packages/core/src/{harness → agent}/proof-packet.ts +16 -21
- package/packages/core/src/agent/providers/index.ts +35 -16
- package/packages/core/src/agent/reflector.ts +320 -0
- package/packages/core/src/agent/routing-intent.ts +22 -0
- package/packages/core/src/{harness → agent}/run-epoch.ts +4 -3
- package/packages/core/src/{harness → agent}/run-store.ts +142 -81
- package/packages/core/src/agent/{Service.ts → service.ts} +37 -26
- package/packages/core/src/agent/skill-selector.ts +374 -0
- package/packages/core/src/agent/stuck-loop.ts +209 -0
- package/packages/core/src/agent/{selectors/ToolSelector.ts → tool-selector.ts} +188 -178
- package/packages/core/src/{ace/Tracer.ts → agent/tracer.ts} +37 -27
- package/packages/core/src/api/createAgent.test.ts +139 -27
- package/packages/core/src/api/createAgent.ts +232 -44
- package/packages/core/src/artifacts/store.ts +162 -0
- package/packages/core/src/canvas/canvas-manager.ts +161 -0
- package/packages/core/src/canvas/canvas.test.ts +8 -4
- package/packages/core/src/canvas/emitter.ts +131 -80
- package/packages/core/src/canvas/index.ts +1 -3
- package/packages/core/src/channels/base.ts +9 -1
- package/packages/core/src/channels/discord.ts +5 -4
- package/packages/core/src/channels/manager.ts +122 -30
- package/packages/core/src/channels/slack.ts +5 -4
- package/packages/core/src/channels/telegram.ts +36 -6
- package/packages/core/src/channels/webchat.ts +11 -10
- package/packages/core/src/channels/whatsapp.ts +23 -7
- package/packages/core/src/config/index.ts +13 -2
- package/packages/core/src/config/loader.ts +71 -29
- package/packages/core/src/ethics/EthicsGuard.test.ts +90 -36
- package/packages/core/src/ethics/EthicsGuard.ts +51 -47
- package/packages/core/src/events/agent-bus.ts +44 -68
- package/packages/core/src/events/channel-narration.ts +150 -0
- package/packages/core/src/events/narration.ts +82 -0
- package/packages/core/src/events/tool-narration.ts +62 -0
- package/packages/core/src/gateway/delegation-groups.ts +258 -0
- package/packages/core/src/{harness → gateway}/durable-queue.ts +102 -42
- package/packages/core/src/{harness → gateway}/job-store.ts +85 -48
- package/packages/core/src/gateway/lane-queue.ts +173 -0
- package/packages/core/src/gateway/notification-inbox.ts +57 -0
- package/packages/core/src/gateway/server.ts +1 -1
- package/packages/core/src/harness/index.ts +46 -27
- package/packages/core/src/index.ts +33 -20
- package/packages/core/src/mcp/hot-reload.ts +32 -23
- package/packages/core/src/mcp/index.ts +6 -3
- package/packages/core/src/mcp/singleton.ts +1 -4
- package/packages/core/src/mcp/tool-sync.ts +138 -0
- package/packages/core/src/memory/Scratchpad.test.ts +39 -20
- package/packages/core/src/memory/Scratchpad.ts +27 -34
- package/packages/core/src/multimodal/vision-service.ts +44 -38
- package/packages/core/src/resilience/retry.ts +95 -0
- package/packages/core/src/scheduler/CronScheduler.ts +334 -287
- package/packages/core/src/scheduler/index.ts +9 -7
- package/packages/core/src/scheduler/integration.ts +46 -26
- package/packages/core/src/scheduler/scheduler.test.ts +9 -13
- package/packages/core/src/scheduler/types.ts +7 -2
- package/packages/core/src/security/Pairing.ts +1 -1
- package/packages/core/src/skills/bundled/a2ui/a2ui_dashboard/SKILL.md +176 -0
- package/packages/core/src/skills/bundled/a2ui/a2ui_form/SKILL.md +202 -0
- package/packages/core/src/skills/bundled/a2ui/a2ui_interactive/SKILL.md +206 -0
- package/packages/core/src/skills/bundled/agents/agent_spawner/SKILL.md +173 -0
- package/packages/core/src/skills/bundled/agents/memory_manager/SKILL.md +143 -0
- package/packages/core/src/skills/bundled/agents/research_and_remember/SKILL.md +139 -0
- package/packages/core/src/skills/bundled/agents/task_orchestrator/SKILL.md +98 -0
- package/packages/core/src/skills/bundled/api/api_client/SKILL.md +132 -0
- package/packages/core/src/skills/bundled/cli/cli_pipeline/SKILL.md +135 -0
- package/packages/core/src/skills/bundled/cli/cli_safe_exec/SKILL.md +125 -0
- package/packages/core/src/skills/bundled/cli/software_engineering/SKILL.md +23 -0
- package/packages/core/src/skills/bundled/cron_manager/SKILL.md +188 -0
- package/packages/core/src/skills/bundled/cron_reminder/SKILL.md +112 -0
- package/packages/core/src/skills/bundled/filesystem/file_manager/SKILL.md +118 -0
- package/packages/core/src/skills/bundled/filesystem/file_read_and_summarize/SKILL.md +109 -0
- package/packages/core/src/skills/bundled/filesystem/file_writer/SKILL.md +129 -0
- package/packages/core/src/skills/bundled/filesystem/workspace_file_operator/SKILL.md +22 -0
- package/packages/core/src/skills/bundled/office/office_document_manager/SKILL.md +262 -0
- package/packages/core/src/skills/bundled/search_knowledge/capability_discovery/SKILL.md +75 -0
- package/packages/core/src/skills/bundled/web/browser_automate/SKILL.md +120 -0
- package/packages/core/src/skills/bundled/web/browser_scrape/SKILL.md +109 -0
- package/packages/core/src/skills/bundled/web/web_monitor/SKILL.md +127 -0
- package/packages/core/src/skills/bundled/web/web_research/SKILL.md +119 -0
- package/packages/core/src/skills/bundled-data.generated.ts +731 -2678
- package/packages/core/src/skills/skills.test.ts +52 -11
- package/packages/core/src/{harness → storage}/boot-id.ts +5 -2
- package/packages/core/src/storage/bootstrap.ts +151 -0
- package/packages/core/src/storage/causal-events.ts +84 -0
- package/packages/core/src/storage/collections.ts +680 -0
- package/packages/core/src/storage/crypto.ts +205 -74
- package/packages/core/src/{harness/db-helpers.ts → storage/hive.ts} +63 -7
- package/packages/core/src/storage/hivedb.ts +61 -0
- package/packages/core/src/storage/index.ts +111 -17
- package/packages/core/src/storage/model-id.ts +53 -0
- package/packages/core/src/storage/onboarding.ts +540 -972
- package/packages/core/src/storage/reconcile.ts +238 -0
- package/packages/core/src/storage/seed.ts +572 -406
- package/packages/core/src/storage/usage.ts +285 -225
- package/packages/core/src/storage/user-email.ts +11 -0
- package/packages/core/src/swarm/AgentExecutor.ts +1 -1
- package/packages/core/src/swarm/EventBridge.ts +1 -1
- package/packages/core/src/swarm/index.ts +12 -9
- package/packages/core/src/tool-runtime/index.ts +146 -23
- package/packages/core/src/tool-runtime/tool-worker.ts +2 -2
- package/packages/core/src/tool-runtime/worker-tools.ts +27 -0
- package/packages/core/src/{canvas/a2ui-tools.ts → tools/a2ui/index.ts} +17 -8
- package/packages/core/src/tools/agents/get-available-models.ts +36 -54
- package/packages/core/src/tools/agents/index.ts +784 -292
- package/packages/core/src/tools/api/api-request.test.ts +164 -0
- package/packages/core/src/tools/api/api-request.ts +174 -0
- package/packages/core/src/tools/api/index.ts +16 -0
- package/packages/core/src/tools/cli/index.ts +4 -0
- package/packages/core/src/tools/core/index.ts +281 -112
- package/packages/core/src/tools/cron/index.ts +121 -124
- package/packages/core/src/tools/index.ts +63 -78
- package/packages/core/src/tools/office/office-escribir-xlsx.ts +3 -1
- package/packages/core/src/tools/types.ts +3 -1
- package/packages/core/src/tools/web/artifact-inspect.ts +23 -0
- package/packages/core/src/tools/web/browser-screenshot.ts +26 -5
- package/packages/core/src/tools/web/browser-service.ts +5 -0
- package/packages/core/src/tools/web/browser-type.ts +3 -8
- package/packages/core/src/tools/web/index.ts +4 -4
- package/packages/core/src/voice/index.ts +89 -63
- package/packages/core/src/workers/agent.worker.ts +2 -2
- package/packages/core/src/workers/workers.test.ts +3 -10
- package/scripts/bump-version.ts +248 -0
- package/scripts/generate-skill-bundle.ts +108 -0
- package/test/agent-loop-terminal-synthesis.test.ts +32 -0
- package/test/catalog-agents-stay-enabled.test.ts +117 -0
- package/test/causal-events.test.ts +117 -0
- package/test/compaction.test.ts +105 -0
- package/test/context-compiler.test.ts +269 -0
- package/test/curator.test.ts +130 -0
- package/test/durable-queue.test.ts +114 -0
- package/test/harness-barrel.test.ts +64 -0
- package/test/hive-helpers.test.ts +130 -0
- package/test/hivedb-search.test.ts +189 -0
- package/test/internal-turns.test.ts +166 -0
- package/test/job-idempotency.test.ts +68 -0
- package/test/job-retry-backoff.test.ts +184 -0
- package/test/job-store.test.ts +381 -0
- package/test/llm-retry.test.ts +97 -0
- package/test/memory-perf.test.ts +774 -0
- package/test/minimal-loadout.test.ts +78 -0
- package/test/model-catalog.test.ts +105 -0
- package/test/preload.ts +12 -0
- package/test/reflector.test.ts +320 -0
- package/test/retention-cap.test.ts +91 -0
- package/test/retired-capabilities-pruned.test.ts +192 -0
- package/test/run-store.test.ts +355 -0
- package/test/scratchpad.test.ts +74 -0
- package/test/secrets-durability.test.ts +119 -0
- package/test/seed-model-reseed.test.ts +155 -0
- package/test/setup-agent-seed.test.ts +264 -0
- package/test/tool-inventory.test.ts +65 -0
- package/test/tool-runtime.test.ts +258 -0
- package/test/toon.test.ts +429 -0
- package/tsconfig.json +2 -0
- package/packages/core/src/ace/Curator.ts +0 -158
- package/packages/core/src/ace/Reflector.ts +0 -200
- package/packages/core/src/ace/index.ts +0 -4
- package/packages/core/src/agent/AgentRunner.ts +0 -711
- package/packages/core/src/agent/ContextCompiler.ts +0 -567
- package/packages/core/src/agent/ContextGuard.ts +0 -91
- package/packages/core/src/agent/ConversationStore.ts +0 -254
- package/packages/core/src/agent/Hooks.ts +0 -166
- package/packages/core/src/agent/StuckLoop.ts +0 -133
- package/packages/core/src/agent/providers/LLMClient.ts +0 -149
- package/packages/core/src/agent/providers/anthropic.ts +0 -212
- package/packages/core/src/agent/providers/openai-compat.ts +0 -231
- package/packages/core/src/agent/selectors/PlaybookSelector.ts +0 -121
- package/packages/core/src/agent/selectors/SkillSelector.ts +0 -322
- package/packages/core/src/agent/selectors/index.ts +0 -6
- package/packages/core/src/auth/auth.ts +0 -121
- package/packages/core/src/auth/index.ts +0 -1
- package/packages/core/src/canvas/CanvasManager.ts +0 -390
- package/packages/core/src/canvas/canvas-tools.ts +0 -448
- package/packages/core/src/harness/collections.ts +0 -98
- package/packages/core/src/harness/goal-verifier.ts +0 -141
- package/packages/core/src/harness/harness.test.ts +0 -236
- package/packages/core/src/harness/reconcile.ts +0 -149
- package/packages/core/src/mcp/MCPToolAdapter.ts +0 -176
- package/packages/core/src/multimodal/VisionService.ts +0 -293
- package/packages/core/src/scheduler/dag/AgentExecutor.ts +0 -53
- package/packages/core/src/scheduler/dag/DAGScheduler.ts +0 -250
- package/packages/core/src/scheduler/dag/EventBridge.ts +0 -122
- package/packages/core/src/scheduler/dag/TaskGraph.ts +0 -192
- package/packages/core/src/scheduler/dag/TaskNode.ts +0 -97
- package/packages/core/src/scheduler/dag/TaskResult.ts +0 -22
- package/packages/core/src/scheduler/dag/errors.ts +0 -37
- package/packages/core/src/scheduler/dag/index.ts +0 -26
- package/packages/core/src/scheduler/dag/presets/ResearchPreset.ts +0 -97
- package/packages/core/src/scheduler/dag/strategies/ParallelStrategy.ts +0 -21
- package/packages/core/src/scheduler/dag/strategies/PriorityStrategy.ts +0 -46
- package/packages/core/src/storage/HiveDBStorage.ts +0 -64
- package/packages/core/src/storage/SQLiteStorage.ts +0 -414
- package/packages/core/src/storage/hiveSeed.ts +0 -308
- package/packages/core/src/storage/hiveStorage.test.ts +0 -38
- package/packages/core/src/storage/schema.ts +0 -689
- package/packages/core/src/storage/storage.test.ts +0 -37
- package/packages/core/src/swarm/AgentBus.ts +0 -460
- package/packages/core/src/swarm/EventBus.ts +0 -169
- package/packages/core/src/swarm/WorkerPool.ts +0 -236
- package/packages/core/src/tools/bridge-events.ts +0 -26
- package/packages/core/src/tools/canvas/index.ts +0 -375
- package/packages/core/src/tools/codebridge/index.ts +0 -342
- package/packages/core/src/tools/meeting/index.ts +0 -353
- package/packages/core/src/tools/projects/index.ts +0 -37
- package/packages/core/src/tools/projects/project-create.ts +0 -94
- package/packages/core/src/tools/projects/project-done.ts +0 -66
- package/packages/core/src/tools/projects/project-fail.ts +0 -66
- package/packages/core/src/tools/projects/project-list.ts +0 -96
- package/packages/core/src/tools/projects/project-update.ts +0 -72
- package/packages/core/src/tools/projects/task-create.ts +0 -68
- package/packages/core/src/tools/projects/task-evaluate.ts +0 -93
- package/packages/core/src/tools/projects/task-update.ts +0 -93
- package/packages/core/src/tools/voice/index.ts +0 -104
- package/packages/core/src/tools/web/api-request.test.ts +0 -170
- package/packages/core/src/tools/web/api-request.ts +0 -239
- package/test/setup-db.ts +0 -216
- /package/packages/core/src/agent/{NativeTools.ts → native-tools.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// AUTO-GENERATED by
|
|
2
|
-
// Do NOT edit manually — run `bun
|
|
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: "
|
|
17
|
-
description: `
|
|
18
|
-
category: "
|
|
19
|
-
version: "1.
|
|
20
|
-
tools: ["
|
|
21
|
-
triggers: ["
|
|
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
|
-
#
|
|
23
|
+
# Agent Spawner Skill
|
|
24
24
|
|
|
25
25
|
## Cuándo se Activa
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
| \`
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
-
|
|
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
|
-
- ❌
|
|
55
|
-
- ❌
|
|
56
|
-
- ❌
|
|
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: "
|
|
61
|
-
description: `
|
|
62
|
-
category: "
|
|
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: ["
|
|
65
|
-
triggers: ["
|
|
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
|
-
#
|
|
101
|
+
# Memory Manager Skill
|
|
68
102
|
|
|
69
103
|
## Cuándo se Activa
|
|
70
104
|
|
|
71
|
-
|
|
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
|
-
| \`
|
|
82
|
-
| \`
|
|
83
|
-
| \`
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
133
|
+
### List
|
|
134
|
+
\`\`\`javascript
|
|
135
|
+
memory_list({}) // Todos los títulos
|
|
136
|
+
\`\`\`
|
|
92
137
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
- ❌
|
|
104
|
-
- ❌
|
|
105
|
-
- ❌
|
|
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: "
|
|
110
|
-
description: `
|
|
111
|
-
category: "
|
|
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: ["
|
|
114
|
-
triggers: ["
|
|
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
|
-
#
|
|
166
|
+
# Research and Remember Skill
|
|
117
167
|
|
|
118
168
|
## Cuándo se Activa
|
|
119
169
|
|
|
120
|
-
|
|
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
|
-
| \`
|
|
131
|
-
| \`
|
|
132
|
-
| \`
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
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
|
-
- ❌
|
|
162
|
-
- ❌
|
|
163
|
-
- ❌
|
|
164
|
-
- ❌
|
|
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: "
|
|
169
|
-
description: `
|
|
170
|
-
category: "
|
|
171
|
-
version: "1.
|
|
172
|
-
tools: ["
|
|
173
|
-
triggers: ["
|
|
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
|
-
|
|
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
|
-
|
|
232
|
+
## Herramientas
|
|
180
233
|
|
|
181
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
255
|
+
## Fan-in
|
|
196
256
|
|
|
197
|
-
|
|
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
|
-
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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: "
|
|
212
|
-
description: `
|
|
213
|
-
category: "
|
|
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: ["
|
|
216
|
-
triggers: ["
|
|
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
|
-
#
|
|
304
|
+
# CLI Pipeline Skill
|
|
219
305
|
|
|
220
306
|
## Cuándo se Activa
|
|
221
307
|
|
|
222
|
-
|
|
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
|
-
| \`
|
|
233
|
-
| \`
|
|
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. **
|
|
240
|
-
2. **
|
|
241
|
-
3. **
|
|
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
|
-
-
|
|
246
|
-
-
|
|
247
|
-
-
|
|
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
|
|
252
|
-
- ❌
|
|
253
|
-
- ❌ No
|
|
351
|
+
- ❌ No incluir metadata en log
|
|
352
|
+
- ❌ Filenames genéricos sin timestamp
|
|
353
|
+
- ❌ No capturar stderr
|
|
254
354
|
`,
|
|
255
355
|
},
|
|
256
356
|
{
|
|
257
|
-
name: "
|
|
258
|
-
description: `
|
|
259
|
-
category: "
|
|
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: ["
|
|
262
|
-
triggers: ["
|
|
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
|
-
#
|
|
364
|
+
# CLI Safe Exec Skill
|
|
265
365
|
|
|
266
366
|
## Cuándo se Activa
|
|
267
367
|
|
|
268
|
-
|
|
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
|
-
| \`
|
|
275
|
-
| \`
|
|
276
|
-
|
|
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. **
|
|
281
|
-
2. **
|
|
282
|
-
3. **
|
|
283
|
-
4. **
|
|
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
|
-
##
|
|
388
|
+
## Timeouts Apropiados
|
|
286
389
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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
|
-
- ❌
|
|
294
|
-
- ❌
|
|
295
|
-
- ❌ Ignorar
|
|
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: "
|
|
300
|
-
description: `
|
|
301
|
-
category: "
|
|
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: ["
|
|
304
|
-
triggers: ["
|
|
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
|
-
#
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
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
|
-
|
|
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: "
|
|
345
|
-
description: `
|
|
346
|
-
category: "
|
|
347
|
-
version: "
|
|
348
|
-
tools: ["
|
|
349
|
-
triggers: ["
|
|
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
|
-
#
|
|
434
|
+
# Cron Manager Skill
|
|
352
435
|
|
|
353
436
|
## Cuándo se Activa
|
|
354
437
|
|
|
355
|
-
|
|
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
|
-
| \`
|
|
365
|
-
| \`
|
|
366
|
-
| \`
|
|
367
|
-
| \`
|
|
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
|
-
##
|
|
453
|
+
## Campos Principales
|
|
370
454
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
##
|
|
467
|
+
## Cron Expression Format
|
|
379
468
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
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
|
-
##
|
|
479
|
+
## Ejemplos Comunes
|
|
386
480
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
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
|
-
##
|
|
489
|
+
## Cómo Usar start_at / stop_at
|
|
404
490
|
|
|
405
|
-
|
|
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
|
-
##
|
|
495
|
+
## Cómo Usar dom_and_dow
|
|
408
496
|
|
|
409
|
-
|
|
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
|
-
|
|
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. **
|
|
417
|
-
2. **
|
|
418
|
-
3. **Crear
|
|
419
|
-
4. **
|
|
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
|
-
- ❌
|
|
424
|
-
- ❌
|
|
425
|
-
- ❌ No
|
|
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: "
|
|
430
|
-
description: `
|
|
431
|
-
category: "
|
|
432
|
-
version: "
|
|
433
|
-
tools: ["
|
|
434
|
-
triggers: ["
|
|
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
|
-
#
|
|
526
|
+
# Cron Reminder Skill
|
|
437
527
|
|
|
438
528
|
## Cuándo se Activa
|
|
439
529
|
|
|
440
|
-
Para
|
|
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
|
|
532
|
+
## Herramientas
|
|
443
533
|
|
|
444
|
-
| Tool | Qué hace |
|
|
445
|
-
|
|
446
|
-
| \`
|
|
447
|
-
| \`
|
|
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
|
-
##
|
|
539
|
+
## Cómo Funciona
|
|
451
540
|
|
|
452
|
-
1. **
|
|
453
|
-
2. **
|
|
454
|
-
3. **
|
|
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
|
-
##
|
|
545
|
+
## Parámetros
|
|
457
546
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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
|
|
554
|
+
## Errores Comunes
|
|
464
555
|
|
|
465
|
-
- ❌
|
|
466
|
-
- ❌
|
|
467
|
-
- ❌
|
|
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: "
|
|
472
|
-
description: `
|
|
473
|
-
category: "
|
|
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: ["
|
|
476
|
-
triggers: ["
|
|
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
|
-
#
|
|
569
|
+
# File Manager Skill
|
|
479
570
|
|
|
480
571
|
## Cuándo se Activa
|
|
481
572
|
|
|
482
|
-
|
|
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
|
-
| \`
|
|
489
|
-
| \`
|
|
490
|
-
| \`
|
|
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
|
-
|
|
495
|
-
|
|
496
|
-
|
|
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
|
-
##
|
|
593
|
+
## Patrones Glob Comunes
|
|
505
594
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
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
|
-
- ❌
|
|
513
|
-
- ❌
|
|
514
|
-
- ❌
|
|
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: "
|
|
519
|
-
description: `
|
|
520
|
-
category: "
|
|
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: ["
|
|
523
|
-
triggers: ["
|
|
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
|
-
#
|
|
618
|
+
# File Read and Summarize Skill
|
|
526
619
|
|
|
527
620
|
## Cuándo se Activa
|
|
528
621
|
|
|
529
|
-
|
|
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
|
-
| \`
|
|
536
|
-
| \`
|
|
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. **
|
|
545
|
-
2. **
|
|
546
|
-
3. **
|
|
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
|
-
##
|
|
640
|
+
## Mejores Prácticas
|
|
550
641
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
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
|
-
- ❌
|
|
563
|
-
- ❌
|
|
564
|
-
- ❌
|
|
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: "
|
|
570
|
-
description: `
|
|
571
|
-
category: "
|
|
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: ["
|
|
574
|
-
triggers: ["
|
|
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
|
-
#
|
|
663
|
+
# File Writer Skill
|
|
577
664
|
|
|
578
665
|
## Cuándo se Activa
|
|
579
666
|
|
|
580
|
-
|
|
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
|
-
| \`
|
|
587
|
-
| \`
|
|
588
|
-
| \`
|
|
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
|
-
|
|
593
|
-
|
|
594
|
-
|
|
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
|
-
|
|
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
|
-
|
|
612
|
-
|
|
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
|
-
-
|
|
618
|
-
-
|
|
619
|
-
-
|
|
620
|
-
-
|
|
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
|
-
- ❌
|
|
625
|
-
- ❌
|
|
626
|
-
- ❌
|
|
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: "
|
|
631
|
-
description: `
|
|
632
|
-
category: "
|
|
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: ["
|
|
635
|
-
triggers: ["
|
|
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
|
-
#
|
|
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
|
-
|
|
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
|
-
| \`
|
|
648
|
-
| \`
|
|
649
|
-
| \`
|
|
650
|
-
| \`
|
|
651
|
-
| \`
|
|
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
|
-
###
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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
|
-
###
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
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
|
-
###
|
|
670
|
-
|
|
671
|
-
|
|
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
|
-
###
|
|
675
|
-
|
|
676
|
-
|
|
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
|
-
|
|
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
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
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
|
-
- ❌
|
|
689
|
-
- ❌
|
|
690
|
-
- ❌
|
|
691
|
-
- ❌
|
|
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: "
|
|
696
|
-
description: `
|
|
697
|
-
category: "
|
|
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: ["
|
|
700
|
-
triggers: ["
|
|
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
|
-
#
|
|
840
|
+
# Browser Automate Skill
|
|
703
841
|
|
|
704
842
|
## Cuándo se Activa
|
|
705
843
|
|
|
706
|
-
|
|
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
|
-
| \`
|
|
713
|
-
| \`
|
|
714
|
-
| \`
|
|
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. **
|
|
719
|
-
2. **
|
|
720
|
-
3. **
|
|
721
|
-
4. **
|
|
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
|
-
-
|
|
744
|
-
-
|
|
745
|
-
-
|
|
746
|
-
-
|
|
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
|
-
- ❌
|
|
752
|
-
- ❌
|
|
753
|
-
- ❌
|
|
754
|
-
- ❌ No
|
|
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: "
|
|
759
|
-
description: `
|
|
760
|
-
category: "
|
|
761
|
-
version: "1.
|
|
762
|
-
tools: ["
|
|
763
|
-
triggers: ["
|
|
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
|
-
#
|
|
885
|
+
# Browser Scrape Skill
|
|
766
886
|
|
|
767
887
|
## Cuándo se Activa
|
|
768
888
|
|
|
769
|
-
|
|
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
|
-
| \`
|
|
776
|
-
| \`
|
|
777
|
-
| \`
|
|
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
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
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
|
-
-
|
|
815
|
-
-
|
|
816
|
-
-
|
|
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
|
-
- ❌
|
|
824
|
-
- ❌
|
|
825
|
-
- ❌
|
|
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: "
|
|
833
|
-
description: `
|
|
834
|
-
category: "
|
|
835
|
-
version: "1.
|
|
836
|
-
tools: ["
|
|
837
|
-
triggers: ["
|
|
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
|
-
#
|
|
927
|
+
# Web Monitor Skill
|
|
840
928
|
|
|
841
929
|
## Cuándo se Activa
|
|
842
930
|
|
|
843
|
-
|
|
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
|
-
| \`
|
|
850
|
-
| \`
|
|
851
|
-
| \`
|
|
852
|
-
| \`
|
|
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
|
-
|
|
860
|
-
|
|
861
|
-
|
|
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
|
-
-
|
|
906
|
-
-
|
|
907
|
-
-
|
|
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
|
-
- ❌
|
|
915
|
-
- ❌
|
|
916
|
-
- ❌
|
|
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: "
|
|
925
|
-
description: `
|
|
926
|
-
category: "
|
|
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: ["
|
|
929
|
-
triggers: ["
|
|
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
|
-
#
|
|
973
|
+
# Web Research Skill
|
|
932
974
|
|
|
933
975
|
## Cuándo se Activa
|
|
934
976
|
|
|
935
|
-
Esta skill se activa cuando el usuario necesita
|
|
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
|
-
| \`
|
|
942
|
-
| \`
|
|
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
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
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
|
-
-
|
|
989
|
-
-
|
|
990
|
-
-
|
|
991
|
-
-
|
|
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
|
-
- ❌
|
|
996
|
-
- ❌
|
|
997
|
-
- ❌
|
|
998
|
-
- ❌
|
|
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: "
|
|
1003
|
-
description: `
|
|
1004
|
-
category: "
|
|
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: ["
|
|
1007
|
-
triggers: ["
|
|
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
|
-
#
|
|
1016
|
+
# API Client Skill
|
|
1010
1017
|
|
|
1011
1018
|
## Cuándo se Activa
|
|
1012
1019
|
|
|
1013
|
-
|
|
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
|
-
| \`
|
|
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
|
-
##
|
|
1028
|
+
## Parámetros de api_request
|
|
1024
1029
|
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
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
|
-
##
|
|
1037
|
+
## Diferencia con web_fetch
|
|
1030
1038
|
|
|
1031
|
-
|
|
1032
|
-
|
|
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
|
-
|
|
1043
|
-
canvas_show_card({
|
|
1044
|
-
title: "Full Report",
|
|
1045
|
-
span: "full",
|
|
1046
|
-
items: [...]
|
|
1047
|
-
})
|
|
1048
|
-
\`\`\`
|
|
1042
|
+
## Workflow
|
|
1049
1043
|
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
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
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
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
|
-
- ❌
|
|
1075
|
-
- ❌
|
|
1076
|
-
- ❌
|
|
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: "
|
|
1081
|
-
description: `
|
|
1082
|
-
category: "
|
|
1083
|
-
version: "1.
|
|
1084
|
-
tools: ["
|
|
1085
|
-
triggers: ["
|
|
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
|
-
#
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
1083
|
+
Eso solo — sin type, sin frases largas — devuelve tools, skills, MCP y playbook relacionados con "email".
|
|
1132
1084
|
|
|
1133
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
1089
|
+
## Cuándo especificar type
|
|
1152
1090
|
|
|
1153
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1098
|
+
Por defecto type="all" — no hace falta especificarlo.
|
|
1172
1099
|
|
|
1173
|
-
##
|
|
1100
|
+
## Regla de prioridad
|
|
1174
1101
|
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
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
|
-
##
|
|
1106
|
+
## Flujo de uso
|
|
1182
1107
|
|
|
1183
|
-
1.
|
|
1184
|
-
2.
|
|
1185
|
-
3.
|
|
1186
|
-
4.
|
|
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
|
-
|
|
1114
|
+
---
|
|
1189
1115
|
|
|
1190
|
-
|
|
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
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
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: "
|
|
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
|
-
-
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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
|
];
|