Skip to navigation

Conocimiento desde tu repositorio

Tu agente responde con la documentación de hoy, porque se actualiza con cada push.

View as Markdown

Si tu producto es software, lo que el agente sabe de él cambia con cada versión. Una GitHub Action lo mantiene al día: en cada push le envía los documentos que cambiaron, como archivos que puede buscar, y quita los que borraste. No hay nada que instalar en tus servidores.

Qué indexar

Lo que responde a las preguntas de tus usuarios, escrito para personas:

  • La documentación: guías, tutoriales, preguntas frecuentes, notas de versión.
  • La ayuda: artículos del centro de ayuda, si viven en el repositorio.
  • La especificación OpenAPI, para preguntas sobre tu API.

El código casi nunca responde a un usuario. Indéxalo solo si es lo que preguntan (los ejemplos de un SDK), y deja fuera los tests, los datos de prueba, los lockfiles y lo generado.

Configurarlo

1

Crea una clave secreta

Con los permisos read y write, como explica la API:

Consola del navegador, en signalcore.ai/app
const answer = await fetch("/api/keys", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ kind: "secret", name: "GitHub", scopes: ["read", "write"] }),
});
console.log((await answer.json()).key); // sk_…: solo se muestra esta vez

Guárdala en el repositorio como el secreto SIGNALCORE_KEY, en Settings, Secrets and variables, Actions.

2

Di qué debe saber el agente

En .signalcore/knowledge.yml. El id del agente está en sus equipos (GET /v1/squads).

.signalcore/knowledge.yml
agent: agt_... # el agente
include: # lo que debe saber
- docs/**
- "*.md"
- openapi.json
exclude: # de eso, lo que no
- docs/borradores/**
- CHANGELOG.md
prefix: repo/ # dónde van las copias entre sus archivos (repo/ si no lo dices)

Los patrones son como los de .gitignore: * dentro de una carpeta, ** a través de carpetas. Sin / valen en cualquier carpeta (*.md son todos los Markdown); con / empiezan en la raíz (docs/** es todo lo que hay en docs).

3

Añade el workflow

.github/workflows/signalcore-knowledge.yml
name: SignalCore knowledge
on:
push:
branches: [main]
workflow_dispatch:
concurrency: signalcore-knowledge
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: OmnistGroup/signalcore-sync-knowledge@v1
with:
key: ${{ secrets.SIGNALCORE_KEY }}

Haz push. La primera vez envía todo lo que dice la configuración; después, solo lo que cambia.

Cómo funciona

  • Solo lo que cambió. El agente guarda el último commit enviado (en repo/.synced). Cada ejecución lo compara con el nuevo: sube lo añadido o cambiado y borra lo que ya no está. Si una ejecución falla o no llega a correr, la siguiente se pone al día.
  • Todo de nuevo la primera vez, cuando cambias la configuración y cuando lo ejecutas a mano (Run workflow): sube todo lo que dice y borra las copias que ya no tienen archivo.
  • Tus archivos no se tocan. Las copias guardan su ruta bajo el prefijo (docs/reembolsos.md es repo/docs/reembolsos.md); los archivos propios del agente quedan como están.
  • Lo que no se puede buscar se salta, con un aviso en la ejecución: binarios (los PDF, Word, Excel y PowerPoint sí se indexan), archivos de más de 50 MB y nombres con caracteres que una ruta no admite (solo letras, números, espacios y _ . - ( )).

Cada archivo se envía con la API, como harías tú:

curl -X PUT "https://signalcore.ai/v1/agents/agt_.../files/repo/docs/reembolsos.md?searchable=true" \
-H "Authorization: Bearer $SIGNALCORE_KEY" \
-H "Content-Type: text/markdown" \
--data-binary @docs/reembolsos.md

Para probar lo que el agente encuentra, busca como él:

curl "https://signalcore.ai/v1/agents/agt_.../files/search?query=reembolsos" \
-H "Authorization: Bearer $SIGNALCORE_KEY"

Si gestionas organizaciones de clientes, la clave de tu agencia actúa en la de cada uno con org: org_... en el paso de la action.