No es una metáfora. Un proyecto de Kortix es un repositorio de git, y ese repositorio es la empresa: sus agentes, las habilidades que ha desarrollado, todo lo que ha aprendido y la definición de las máquinas en las que se ejecuta. Con control de versiones. Con diff. De tu propiedad, por completo.
skill: reconcile-invoices — gestionar reembolsos parciales
skills/reconcile-invoices/SKILL.md
9f4c2b7e → main · abierta por invoice-clerk
kortix.yaml es la capa de Kortix: la máquina en la que se inician las sesiones, los conectores, los triggers, los nombres de los secretos y lo que cada agente puede utilizar. La configuración de OpenCode es el entorno de ejecución en el que operan los agentes. Todo lo demás son archivos del repositorio.
# Versión 2 del esquema. El entorno de ejecución es OpenCode.kortix_version: 2runtime: opencode project: name: Northwind # El agente que responde cuando no se especifica ninguno.default_agent: kortix # Dónde se encuentra la configuración del entorno de ejecución. Después de esto: archivos.opencode: config_dir: harnesses/opencode # Solo NOMBRES de secretos. Los valores están cifrados en la# plataforma y se inyectan cuando se inicia la máquina.env: required: [STRIPE_API_KEY] optional: [LINEAR_API_KEY] # La máquina en la que se inicia una sesión.sandbox: default: python templates:- slug: python image: python:3.12-slim cpu: 2 memory: 4 # Acceso al mundo exterior. La definición está en# git. Las credenciales no.connectors:- slug: gmail-lectura provider: pipedream app: gmail authorization_strategy: user # Gobernanza: lo que cada agente puede utilizar, nunca lo que# dice. Un permiso omitido se resuelve como ninguno.agents: kortix: connectors: all secrets: all skills: all kortix_permissions: all invoice-clerk: sandbox: python connectors: [gmail-read] secrets: [STRIPE_API_KEY] skills: [reconcile-invoices] kortix_permissions: [project.cr.open]La capa de Kortix: un archivo en la raíz del repositorio.
{ // Documentación: https://opencode.ai/docs/ "$schema": "https://opencode.ai/config.json", "theme": "system", "default_agent": "kortix", // La sesión ya está en una máquina aislada // rama desechable, para que el agente empiece completamente abierto. // Restringe por herramienta aquí cuando quieras una política // más estricta. "permission": "allow"}El entorno de ejecución: modelos, herramientas y permisos.
---description: Concilia facturas con pagos.mode: primarypermission: bash: ask--- Eres el responsable de facturación de Northwind. Relaciona cada pago con una factura por número, nuncapor importe. Cuando no puedas, abre una solicitud de cambioy di exactamente qué no pudiste conciliar.El agente: un archivo de agente estándar de OpenCode. Lo que dice vive aquí.
Qué máquina, qué conectores, qué secretos, qué habilidades y qué verbos de CLI. Solo gobernanza. Si omites una concesión, se resuelve en ninguna: un agente obtiene lo que le diste y nada más.
Prompts, modelos, herramientas, plugins y permisos. Un agente es un agente estándar de OpenCode: markdown como base y, además, las herramientas, plugins y la configuración del modelo que están a su lado en el mismo repo. Lee el directorio y sabrás exactamente qué hará ese agente.
El manifiesto nombra los secretos y los concede por agente. Los valores están cifrados en la plataforma, se inyectan en la máquina durante el tiempo de ejecución y nunca se escriben en el repo ni en los logs.
Los agentes, las habilidades y la memoria no son filas en una base de datos que no puedes ver. Son archivos markdown junto a tu código, clonados en cada sesión, legibles por una persona y editables por un agente.
No hay ninguna capa oculta sobre la que preguntar. Cada creencia, cada permiso y cada instrucción es una línea en un archivo, y las herramientas que ya usas responden a la pregunta.
# ¿qué cree la empresa sobre los precios?$ grep -ri "annual" memoryMEMORY.md: nunca cotizar el plan anual antes de la revisión de seguridad # ¿quién puede tocar la clave de Stripe?$ grep -n "STRIPE_API_KEY" kortix.yaml18: requerido: [STRIPE_API_KEY]48: secretos: [STRIPE_API_KEY] # ¿quién cambió el responsable de facturación y cuándo?$ git log --oneline agents/8f2a1c4 invoice-clerk: dejar de adivinar sobre reembolsos1d90b73 invoice-clerk: primer borrador de la personalidadCada prompt de agente, cada habilidad, cada hecho recordado y cada concesión es texto en un solo repo. No hay una consola que recorrer ni una exportación que solicitar.
Cada cambio en un agente, una habilidad o un archivo de memoria es un commit con autor, marca de tiempo y diff. Nada desaparece y nada ocurre a oscuras.
¿Se añadió una instrucción incorrecta el martes? Lee el diff, revierte el commit y abre una solicitud de cambio. La empresa vuelve a ser como era.
Cuando un agente descubre una forma mejor de hacer el trabajo, no la recuerda discretamente. Edita la habilidad, hace commit en su propia rama y abre una solicitud de cambio. Una persona lee el diff y decide.
## Relacionar un pago con una factura 1. Busca la factura por número, nunca por importe.2. Si los importes difieren, márcalo para una persona.2. Si la diferencia coincide con un reembolso ya registrado, ciérralo como reembolso parcial y anota el id del reembolso en la factura.3. Si difieren por cualquier otro motivo, márcalo para una persona y di qué comprobaste. Nunca emitas un reembolso tú mismo.Un agente que reescribe sus propias instrucciones llega de la misma forma que una migración de base de datos: una rama, un commit, un diff y una persona revisora. La empresa tiene un solo proceso de revisión, no dos.
La máquina puede proponer. Una persona decide. El trabajo llega a main solo mediante una solicitud de cambio aprobada por alguien, así que la empresa no puede desviarse mientras no estás mirando.
Un agente puede leer su propia configuración, editarla y proponer el cambio. Programa eso y el repo mejorará como empresa mientras todos duermen.
agents: memory-reflector: # puede abrir una solicitud de cambio. Nada más. kortix_permissions: [project.cr.open] triggers:- slug: reflector-de-memorianombre: Reflector de memoria type: cron agent: memory-reflector enabled: falsecron: "0 0 3 * * *" timezone: UTC prompt: | Reflexiona sobre las últimas 24 horas de actividad del proyecto. Revisa el historial de git, las solicitudes de cambio fusionadas y los resúmenes de sesión. Actualiza memory/ y abre una solicitud de cambio titulada `memory: ...`. Sal sin abrir una si no hay conocimiento duradero.Del template inicial. Cada proyecto nuevo incluye esto, desactivado.
Cambia enabled a true y se ejecutará a las 03:00 UTC, sin que nadie lo supervise. Los activadores son programaciones cron y webhooks firmados, declarados en el mismo archivo que todo lo demás.
Obtiene su propio ordenador en la nube y su propia rama, con exactamente la única concesión que le dio el manifiesto: permiso para abrir una solicitud de cambio.
Lee el historial de git y las sesiones del último día, y luego escribe lo aprendido en memory/ como markdown sin formato.
Una solicitud de cambio esperándote por la mañana. Fusiónala y la empresa sabrá algo nuevo. Ciérrala y no habrá pasado nada.
No hay flujo de exportación, ticket de soporte ni formato propietario que descifrar. La empresa ya es texto en una rama, así que puedes clonarla, bifurcarla, revertirla y llevártela contigo.
# convierte cualquier directorio en una instancia de Kortix$ kortix init # comprueba que compila, solicita los secretos que faltan,# súbelo y ponlo todo en producción$ kortix ship # a partir de aquí solo es un repo$ git clone git@github.com:northwind/northwind.git$ git revert 8f2a1c4$ kortix crEmpieza con una tarea y crece desde ahí.