SkillsBoard
Una biblioteca compartida de habilidades de IA para equipos, con un endpoint MCP autenticado para que los agentes puedan buscar y obtener las habilidades que tu equipo ya ha aprobado.
Documentación
Skills Board, el registro de habilidades nativas para agentes de tu equipo. Mantén las habilidades de IA de tu equipo en un solo lugar, para que todos sepan dónde encontrarlas y usarlas.
Prueba la aplicación alojada · Ejecútala localmente · Contribuye
Por qué Skills Board
Las habilidades útiles tienden a desaparecer en chats, marcadores y configuraciones personales de agentes. Skills Board ofrece a un equipo un solo lugar buscable para recopilarlas y permite que cada compañero elija cómo usarlas.
- Una biblioteca de equipo. Guarda habilidades útiles una sola vez, organízalas con etiquetas específicas del equipo y haz que sea fácil encontrarlas de nuevo.
- Diferentes agentes son bienvenidos. Comparte la misma entrada entre Claude, Codex, Cursor y otras configuraciones de agentes.
- Una opción de transferencia. Abre la fuente original, copia un comando de instalación compatible o descarga los archivos de habilidad más recientes como ZIP.
- Acceso limitado a la organización. Crea un equipo, invita miembros y mantén cada biblioteca disponible para sus miembros.
- Acceso MCP opcional. Conecta agentes compatibles a herramientas autenticadas y con control de alcance para encontrar y organizar habilidades y colecciones del equipo.
[!IMPORTANT] Una habilidad guardada es una elección del propio equipo, no una revisión de seguridad, una certificación de compatibilidad ni una versión fijada. Skills Board lee la fuente más reciente disponible; inspecciona esa fuente antes de usarla en un agente.
Cómo funciona
- Crea una biblioteca de equipo y añade una habilidad desde su repositorio de GitHub.
- Skills Board mantiene visible la fuente original y registra la entrada para el equipo.
- Los compañeros buscan por tarea, descripción, repositorio o etiqueta.
- Cada compañero abre la fuente, copia un comando compatible o descarga los archivos más recientes como ZIP.
El catálogo público puede ayudar con el descubrimiento cuando el despliegue tiene Vercel OIDC disponible. La biblioteca de equipo y el flujo directo de GitHub siguen siendo el producto principal.
Ejecutar localmente
Requisitos previos
- Node.js 20.9 o más reciente
- pnpm 10
- PostgreSQL 15 o más reciente
1. Instalar la aplicación
git clone https://github.com/TommyBez/skillsboard.git
cd skillsboard
corepack enable
pnpm install
cp .env.example .env.local
Genera un secreto de Better Auth con openssl rand -base64 32, luego añádelo junto con tu cadena de conexión de PostgreSQL a .env.local.
2. Preparar la base de datos
Aplica las migraciones de Drizzle confirmadas a una base de datos nueva. Esto crea tanto las tablas de Better Auth como las tablas específicas de la aplicación a partir del SQL versionado en drizzle/.
pnpm db:migrate
3. Comenzar a desarrollar
pnpm dev
Abre http://localhost:3000. Reinicia el servidor después de cambiar DATABASE_URL, porque el grupo de PostgreSQL se crea cuando se carga el módulo.
Variables de entorno
| Variable | Requerida | Propósito |
|---|---|---|
DATABASE_URL | Sí | Cadena de conexión de PostgreSQL utilizada por la aplicación; Neon puede usar la URL agrupada aquí. |
DATABASE_URL_UNPOOLED | Para migraciones en Neon | Conexión directa de PostgreSQL utilizada por las migraciones de Drizzle. Puede coincidir con DATABASE_URL para Postgres local sin agrupación. |
BETTER_AUTH_SECRET | Sí | Secreto utilizado para firmar y cifrar los datos de autenticación. |
BETTER_AUTH_URL | Recomendada | Origen público de la aplicación; usa http://localhost:3000 localmente. |
CRON_SECRET | Sí para la limpieza de versiones alojadas | Secreto aleatorio dedicado para autenticar la limpieza diaria de versiones de colecciones expiradas configurada en vercel.json. |
RESEND_API_KEY | Sí fuera del desarrollo | Envía los correos de OTP de inicio de sesión y de invitación al equipo a través de Resend. |
EMAIL_FROM | Sí fuera del desarrollo | Remitente verificado de Resend para correos de OTP e invitación (p. ej., Skills Board <login@your-verified-domain.com>). |
RESEND_WEBHOOK_SECRET | Sí para la entrega de correo alojada | Verifica los webhooks de rebote, queja, supresión y cancelación de suscripción de Resend. |
EMAIL_PRIVACY_SECRET | Sí en Vercel Production | Al menos 32 bytes aleatorios codificados en base64 o hexadecimal; la raíz dedicada para hashes de correo y enlaces de cancelación de suscripción cifrados. Los entornos locales o autoalojados pueden recurrir a una clave separada por dominio derivada de BETTER_AUTH_SECRET. |
EMAIL_PRIVACY_SECRET_PREVIOUS | Solo durante la rotación de claves | Matriz JSON de raíces base64/hexadecimales retenidas utilizadas para la búsqueda de supresión con doble hash y el descifrado de tokens de cancelación de suscripción. Una raíz anterior no se puede eliminar mientras los registros retenidos aún dependan de ella. |
KV_REST_API_URL | Sí fuera del desarrollo | Punto final REST de la base de datos Upstash Redis que cuenta los envíos del formulario de captura de correo por dirección de cliente. En Vercel, la integración de Marketplace la escribe en el proyecto por sí sola. |
KV_REST_API_TOKEN | Sí fuera del desarrollo | Token REST para esa base de datos, escrito por la misma integración. El token de solo lectura que también escribe no se utiliza. |
UPSTASH_REDIS_REST_URL | Alternativa autoalojada | Mismo punto final bajo el nombre canónico de Upstash, para una base de datos creada manualmente. El cliente de Upstash lo lee antes de KV_REST_API_URL, por lo que un proyecto de Vercel lo deja sin configurar. |
UPSTASH_REDIS_REST_TOKEN | Alternativa autoalojada | Mismo token bajo el nombre canónico de Upstash, leído antes de KV_REST_API_TOKEN. Sin ningún par completo, el formulario de captura sigue funcionando y no tiene límite de velocidad. |
GITHUB_TOKEN | No | Aumenta los límites de velocidad de la API de GitHub para metadatos y descargas ZIP. |
VERCEL_OIDC_TOKEN | No | Proporcionado automáticamente por Vercel para el catálogo opcional de skills.sh. |
El inicio de sesión y el registro usan códigos de un solo uso por correo (sin contraseñas). Fuera del desarrollo, configura tanto RESEND_API_KEY como un EMAIL_FROM verificado por dominio; el remitente de prueba de Resend solo funciona para los destinatarios de prueba de Resend. En desarrollo, los correos de OTP se omiten y cualquier código de 6 dígitos funciona. Sin Vercel OIDC, el catálogo Discover se degrada correctamente mientras las bibliotecas de equipo siguen funcionando.
Los despliegues alojados ejecutan la limpieza de retención de versiones de colecciones una vez al día. Configura CRON_SECRET en el entorno de Vercel Production antes de desplegar; el punto final falla de forma segura cuando el secreto está ausente. Los despliegues autoalojados pueden invocar /api/cron/collection-release-retention desde su programador con Authorization: Bearer <CRON_SECRET>.
El formulario público de captura de correo tiene un límite de cinco envíos por hora por dirección de cliente, contados en Upstash Redis bajo direcciones con hash. En Vercel, añade una base de datos Upstash Redis desde el Marketplace en una región cercana al despliegue y conéctala al proyecto: la integración escribe KV_REST_API_URL y KV_REST_API_TOKEN en Production y Preview, y no hay que configurar nada más. Los despliegues autoalojados apuntan a una base de datos creada en console.upstash.com y configuran UPSTASH_REDIS_REST_URL y UPSTASH_REDIS_REST_TOKEN en su lugar. El cliente de Upstash lee primero el par canónico y recurre al de KV_REST_API_; por lo tanto, cuando ambos están presentes, el par canónico es el que cuenta. En cualquier caso, el formulario falla de forma abierta: sin credenciales, o con Redis inalcanzable, los envíos se aceptan sin contar y la brecha se registra.
Las comunicaciones de producto son independientes de los correos transaccionales de OTP e invitación. El consentimiento de registro es opcional y está desactivado por defecto, se puede cambiar en Configuración → Correo y se aplica con historial de consentimiento local, registros de supresión, enlaces de cancelación de suscripción firmados y webhooks de entrega verificados de Resend. Consulta docs/email-compliance.md antes de configurar una transmisión de producto.
Acceso MCP
Skills Board expone un punto final MCP protegido por OAuth en /api/mcp. Después de iniciar sesión, abre Configuración → MCP para conectarlo. Las herramientas pueden buscar habilidades y colecciones del equipo, recuperar comandos de instalación y descubrir habilidades públicas o de repositorio. Con skills:write, pueden guardar nuevas habilidades y organizar colecciones. No pueden editar ni eliminar habilidades guardadas del equipo, instalarlas en un agente ni ejecutarlas.
El contrato completo está en skillsboard.sh/developers (Markdown en /developers.md): los puntos finales públicos, el flujo de OAuth, cada herramienta y el alcance que necesita, y las convenciones de versionado, errores y límites de velocidad que sigue la superficie HTTP. El índice legible por máquina de todo ello es /llms.txt.
Plugin oficial
Este repositorio también es el marketplace del plugin oficial de Skills Board. El plugin incluye la configuración del servidor MCP anterior y una habilidad que explica cómo usar una biblioteca de equipo desde un agente. No está vinculado a un solo cliente: el directorio en plugin/ contiene un manifiesto de Agent Plugins 1.0.0 y un manifiesto de Claude Code junto a él. Instalarlo es una alternativa a la configuración manual de MCP anterior, no un paso posterior.
En Claude Code:
/plugin marketplace add TommyBez/skillsboard
/plugin install skills-board@skills-board
En cualquier cliente compatible con la CLI plugins:
npx plugins add TommyBez/skillsboard
Instalar el plugin configura el servidor MCP. Conectarlo aún requiere iniciar sesión en Skills Board y aprobar los alcances solicitados en el cliente.
Pila tecnológica
| Capa | Tecnología |
|---|---|
| Aplicación | Next.js 16 App Router, React 19, TypeScript |
| Interfaz de usuario | Tailwind CSS 4, shadcn/ui, Base UI |
| Autenticación | Better Auth (OTP por correo) con organizaciones y soporte de proveedores OAuth |
| Datos | PostgreSQL, Drizzle ORM |
| Correo | Resend y React Email |
| Acceso de agentes | Model Context Protocol a través de mcp-handler |
| Alojamiento | Vercel y Neon en el despliegue alojado; se admite el autoalojamiento |
Comandos del proyecto
| Comando | Qué hace |
|---|---|
pnpm dev | Inicia el servidor de desarrollo de Turbopack. |
pnpm typecheck | Ejecuta el compilador de TypeScript sin emitir archivos. |
pnpm check | Ejecuta las comprobaciones locales requeridas del repositorio. |
pnpm db:generate --name <description> | Genera una migración versionada después de cambiar el esquema. |
pnpm db:check | Comprueba que el esquema y las instantáneas de migración confirmadas coinciden. |
pnpm db:migrate | Aplica las migraciones pendientes a la base de datos configurada. |
pnpm db:push | Envía el esquema solo a una base de datos desechable utilizada para prototipos. |
pnpm build | Crea una compilación de producción. |
pnpm start | Inicia el servidor de producción. |
pnpm email | Previsualiza las plantillas de React Email en el puerto 3001. |
Contribuir
Las incidencias y las solicitudes de extracción son bienvenidas. Lee CONTRIBUTING.md antes de hacer un cambio sustancial, sigue el Código de conducta y reporta vulnerabilidades a través del proceso en SECURITY.md.
Consulta a las personas que han ayudado a construir Skills Board en la página de contribuyentes.
Licencia
Skills Board está disponible bajo la Licencia MIT.