--- type: SOP asset_id: SOP-EL-GHL-PluginCowork-Implementacion-v01 version: v01 status: Draft owner: Juan Carlos sherpa_owner: JuanCarlosX fecha_creacion: 2026-06-10 fecha_ultima_actualizacion: 2026-06-10 intellbank: IB-EL-EmpowerLabs subbank: BOS-EL-WORX-OS proposito: Guía paso a paso para replicar la creación e instalación del Plugin de GoHighLevel para Claude Cowork · incluye estructura, skills, empaquetado e instalación --- ## Asset Header - **Asset ID:** SOP-EL-GHL-PluginCowork-Implementacion-v01 - **Version:** v01 - **Status:** Draft - **Owner:** Juan Carlos - **Sherpa:** JuanCarlosX - **IntellBank:** IB-EL-EmpowerLabs - **SubBank:** BOS-EL-WORX-OS - **Tipo:** SOP — Procedimiento Operativo Estándar - **Propósito:** Guía paso a paso para replicar la creación e instalación del Plugin de GoHighLevel para Claude Cowork · incluye estructura, skills, empaquetado e instalación - **Fecha creación:** 2026-06-10 - **Última actualización:** 2026-06-10 --- # Guía de Implementación del Plugin de GoHighLevel para Cowork Guía paso a paso para replicar la creación e instalación · Junio 2026 --- ## ✅ Hallazgos de validación — 2026-06-10 Validado en segunda computadora (Windows, sin Node.js, misma cuenta de Claude): - **El plugin viaja con la cuenta de Claude.** Si el usuario ya tiene el plugin instalado en su cuenta, aparece disponible automáticamente en cualquier otro equipo donde inicie sesión con esa misma cuenta. No se requiere empaquetar ni instalar de nuevo. - El script `package-ghl-plugin.ps1` y la carpeta `gohighlevel/` solo son necesarios la primera vez (instalación inicial) o para actualizar credenciales. --- ## 1. ¿Qué es este plugin? Este plugin extiende Claude Cowork con acceso directo al CRM de GoHighLevel (GHL). Una vez instalado, puedes pedirle a Claude que liste contactos, cree o actualice registros, gestione tags y revise oportunidades de venta, todo en lenguaje natural desde la interfaz de Cowork, sin abrir GHL. El plugin incluye 4 skills: | Skill | Qué hace | Ejemplo de uso | | :---- | :---- | :---- | | ghl-contacts | Lista y busca contactos | *"Get my last 10 contacts from GHL"* | | ghl-upsert | Crea o actualiza un contacto | *"Upsert contact [Jane, jane@acme.com]"* | | ghl-tags | Agrega o quita tags | *"Add tag Hot-Lead to jane@acme.com"* | | ghl-opportunities | Gestiona el pipeline de ventas | *"Show my open opportunities in GHL"* | --- ## 2. Requisitos previos - Cuenta de Claude con plan pago (Pro, Max, Team o Enterprise). - Claude Cowork instalado en tu computadora. - **Node.js instalado** (solo para empaquetar el plugin la primera vez). - API Key de GoHighLevel (Settings → Integrations → API Keys en GHL). - Location ID de tu sub-cuenta de GHL. --- ## 3. Estructura del plugin Un plugin de Cowork es una carpeta con una estructura específica que se empaqueta como archivo `.plugin` (un ZIP renombrado). ``` gohighlevel/ ├── .claude-plugin/ │ └── plugin.json ← Manifiesto del plugin ├── skills/ │ ├── ghl-contacts/ │ │ └── SKILL.md │ ├── ghl-upsert/ │ │ └── SKILL.md │ ├── ghl-tags/ │ │ └── SKILL.md │ └── ghl-opportunities/ │ └── SKILL.md └── README.md ``` --- ## 4. Paso a paso ### Paso 1 — Crear la estructura de carpetas Crea manualmente la estructura de carpetas mostrada arriba en cualquier ubicación de tu computadora (por ejemplo, en Documentos o Escritorio). Asegúrate de que la carpeta `.claude-plugin` exista dentro de la carpeta raíz `gohighlevel`. ### Paso 2 — Crear el manifiesto plugin.json Dentro de `.claude-plugin/`, crea un archivo llamado `plugin.json` con el siguiente contenido: ```json { "name": "gohighlevel", "version": "0.1.0", "description": "GoHighLevel CRM integration", "author": { "name": "TuNombre" } } ``` > **Nota:** El campo `name` debe ser kebab-case (minúsculas con guiones). No uses espacios ni caracteres especiales. ### Paso 3 — Crear cada SKILL.md Dentro de cada subcarpeta de `skills/`, crea un archivo `SKILL.md`. Cada skill tiene: - Un bloque de frontmatter YAML con `name` y `description`. - Instrucciones para Claude sobre cómo ejecutar la acción (qué llamada API hacer, qué parámetros usar, cómo presentar los resultados). - Las credenciales de la API embebidas directamente en el archivo (API Key y Location ID). Ejemplo de estructura de un SKILL.md: ```yaml --- name: ghl-contacts description: > Fetch and search GoHighLevel contacts. Use when the user says "get my last contacts from GHL" or similar. --- # GoHighLevel — Get Contacts ## Credentials - API Key: tu-api-key-aqui - Location ID: tu-location-id-aqui ## Instructions Run the following via Bash: [código Python con la llamada API] ``` > **Nota:** Repite este proceso para los 4 skills: ghl-contacts, ghl-upsert, ghl-tags, ghl-opportunities. Cada uno apunta a un endpoint diferente de la API de GHL. ### Paso 4 — Endpoints de la API de GoHighLevel Todos los skills usan la API v2 de GHL con los siguientes parámetros comunes: - **Base URL:** `https://services.leadconnectorhq.com` - **Header Authorization:** `Bearer {tu-api-key}` - **Header Version:** `2021-07-28` Los endpoints específicos por skill: | Skill | Método | Endpoint | | :---- | :---- | :---- | | ghl-contacts | GET | `/contacts/?locationId={id}&limit={n}` | | ghl-upsert | POST | `/contacts/upsert` | | ghl-tags (add) | POST | `/contacts/{contactId}/tags` | | ghl-tags (remove) | DELETE | `/contacts/{contactId}/tags` | | ghl-opportunities | GET | `/opportunities/search?location_id={id}` | ### Paso 5 — Empaquetar el plugin Una vez creados todos los archivos, empaqueta la carpeta como `.plugin` con este script de PowerShell. Guárdalo como `package-plugin.ps1` junto a la carpeta `gohighlevel/`: ```powershell $source = Join-Path $PSScriptRoot "gohighlevel" $dest = Join-Path $PSScriptRoot "gohighlevel.plugin" if (Test-Path $dest) { Remove-Item $dest } Add-Type -AssemblyName System.IO.Compression Add-Type -AssemblyName System.IO.Compression.FileSystem $stream = [System.IO.File]::Open($dest, [System.IO.FileMode]::Create) $zip = [System.IO.Compression.ZipArchive]::new($stream, [System.IO.Compression.ZipArchiveMode]::Create) Get-ChildItem -Path $source -Recurse -File | ForEach-Object { $entry = $zip.CreateEntry($_.FullName.Substring($source.Length+1).Replace('\','/')) $es = $entry.Open(); $fs = [System.IO.File]::OpenRead($_.FullName) $fs.CopyTo($es); $fs.Dispose(); $es.Dispose() } $zip.Dispose(); $stream.Dispose() Write-Host "Listo: $dest" ``` > **⚠️ Importante:** Usa este script (no `ZipFile::CreateFromDirectory`). El método nativo usa barras invertidas en las rutas del ZIP y el instalador de Cowork las rechaza con el error `'invalid characters'`. ### Paso 6 — Instalar el plugin en Cowork 1. Ejecuta `package-plugin.ps1` (clic derecho → Ejecutar con PowerShell). Se genera `gohighlevel.plugin`. 2. Abre Claude Cowork. 3. En el sidebar, haz clic en **Customize**. 4. Ve a la pestaña **Plugins**. 5. Haz clic en **Browse plugins** y selecciona la opción para subir un archivo personalizado. 6. Selecciona el archivo `gohighlevel.plugin`. 7. El plugin aparece instalado. Los 4 skills quedan disponibles inmediatamente. --- ## 5. Cómo usar el plugin Una vez instalado, Claude detecta automáticamente cuándo usar cada skill según lo que escribas. No necesitas invocarlos con comandos especiales. Ejemplos: - "Get my last 5 contacts from GoHighLevel" → usa `ghl-contacts` - "Upsert contact [Juan Pérez, juan@empresa.com] in GHL" → usa `ghl-upsert` - "Add tag Hot-Lead to juan@empresa.com" → usa `ghl-tags` - "Show my open deals in GoHighLevel" → usa `ghl-opportunities` --- ## 6. Actualizar credenciales Las credenciales (API Key y Location ID) están embebidas dentro de cada `SKILL.md`. Para actualizarlas: 1. Abre `gohighlevel/skills/{nombre-del-skill}/SKILL.md` con cualquier editor de texto. 2. Reemplaza el valor de `API_KEY` y `LOCATION_ID`. 3. Vuelve a ejecutar `package-plugin.ps1` para regenerar el `.plugin`. 4. Desinstala el plugin anterior en Cowork e instala el nuevo archivo. --- ## 7. Solución de problemas comunes | Error | Solución | | :---- | :---- | | "Zip file contains path with invalid characters" | Usa el script PowerShell de Paso 5 (no `ZipFile::CreateFromDirectory`). Las rutas en el ZIP deben usar `/` en lugar de `\`. | | "401 Unauthorized" al llamar la API | Verifica que el API Key en los SKILL.md sea correcto y esté activo en GHL (Settings → Integrations → API Keys). | | "Plugin not found" al instalar | Asegúrate de que `.claude-plugin/plugin.json` exista y tenga un campo `name` válido en kebab-case. | | Los skills no se activan en Cowork | Revisa que el frontmatter YAML de cada SKILL.md tenga el campo `description` con las frases clave que el usuario usaría. |