Skip to main content
Glama

NCE — Neuro-Cognitive Engine

Un sustrato de memoria y razonamiento multiinquilino para agentes de IA, con un conjunto de motores de negocio construidos sobre él.

Los agentes que gestionan un negocio necesitan recordar cosas, y necesitan que la memoria sea correcta: limitada al inquilino adecuado, atribuible a una fuente e imposible de corromper silenciosamente. NCE es la capa que proporciona eso, más los motores verticales que lo utilizan — adquisiciones, ventas, proyectos, economía, inventario y otros.

Construido en Python sobre Postgres, MongoDB, Redis y MinIO. Expuesto a través de MCP (JSON-RPC 2.0) y REST.


Qué hay realmente aquí

Python en nce/

103,762 líneas

Archivos de prueba

391

Herramientas MCP registradas

115

Migraciones de base de datos

48

Motores verticales con código en main

11

Páginas de documentación

114 — léalas aquí

Registros de decisiones de arquitectura

8

Trabajos de CI por pull request

5

Los números se cuentan desde el árbol, no se estiman. El recuento de herramientas está verificado por una prueba (tests/test_tool_registry.py), por lo que no puede desviarse de la realidad sin que falle la compilación.


Las partes que vale la pena examinar

El aislamiento de inquilinos es aplicado por la base de datos, no por convención. Cada tabla con ámbito de inquilino lleva ENABLE + FORCE ROW LEVEL SECURITY con una política en namespace_id. El código de la aplicación además filtra explícitamente, porque una conexión de superusuario omite FORCE RLS y una prueba que lo olvide no prueba nada. tests/test_rls_catalog.py falla la compilación si se añade alguna tabla de inquilino sin estar registrada.

La autoridad de escritura es denegada por defecto. Los motores no escriben los datos de otros. nce/config_data/node-ownership.json mapea (node_type, transition) → motor propietario, y assert_owner rechaza cualquier cosa no registrada en el sitio de escritura. La propiedad puede ser por transición, no solo por nodo: el estado ORDERED de una línea de orden de compra pertenece a Adquisiciones, DELIVERED a Almacén, INSTALLED a Técnico de Campo, y la misma guardia expresa las tres.

El registro de auditoría es de solo añadido a nivel de base de datos. event_log tiene un disparador WORM; UPDATE y DELETE están revocados, no solo evitados.

La autonomía está limitada. Las herramientas de escritura global tienen por defecto solo confirmación humana, llevan una clave de idempotencia y se registran en el registro de auditoría. Los techos de valor y volumen, una lista blanca y un interruptor de apagado se sitúan delante de ellas. Rehacer una acción es una operación nula en lugar de una segunda escritura.

El dinero y el costo nunca salen del edificio. Un proyector de campos de lista blanca (project(node, surface)) controla lo que llega a una superficie externa. El margen y el costo no están en ninguna lista blanca.

El texto generado está fundamentado. La prosa se ensambla a partir de hechos ya presentes en el grafo, con cada afirmación vinculada al nodo del que proviene, en lugar de producirse libremente y verificarse después.

Los datos pueden provenir de dos sistemas a la vez. Un resolvedor por espacio de nombres decide si una función determinada lee de Dynamics 365, de NCE, o de ambos, y registra la divergencia cuando los dos no coinciden — para que una migración pueda medirse antes de comprometerse.


Motores verticales

Once motores tienen código en main. Cada uno posee sus propias tablas, sus propios tipos de nodo y un límite documentado con los demás.

procurement · product · agreements · vendors · sales · system_design · project · economy · inventory · dynamics365 · diagnostics

El conjunto de motores está planificado en 17. Se está construyendo de forma incremental y no está terminado; consulte Estado más abajo.


Cómo está construido

El conjunto de motores no se escribe a mano en una sola pasada. Se construye como una secuencia de unidades pequeñas — 229 planificadas, cada una un asunto, cada una en su propia rama y commit — y cada unidad pasa una revisión adversarial independiente antes de ser aceptada.

La revisión la realiza una instancia de modelo diferente a la que escribió el código, con la instrucción específica de intentar romperlo y de rechazar por defecto cuando sea incierto. Eso ha sido relevante en repetidas ocasiones:

  • Un cambio de movimiento de stock se envió con una proyección de grafo escrita dentro de la transacción autoritativa. Se bloqueó en cualquier tráfico bidireccional entre las mismas dos ubicaciones, en el 100% de los intentos. El lint pasó, los tipos pasaron, el conjunto de pruebas estaba verde. La revisión lo encontró y la solución fue ordenar tanto las escrituras de filas como la proyección por una clave canónica.

  • Un cambio de bus de eventos habría marcado los eventos como publicados exitosamente mientras los descartaba silenciosamente, porque un manejador registraba y devolvía en lugar de lanzar. La revisión lo rechazó dos veces antes de que se enviara algo.

  • Una prueba que afirmaba una regla de precisión decimal resultó pasar idénticamente tanto si la regla se aplicaba como si no, porque su único fixture redondeaba de la misma manera bajo ambos caminos.

La lección recurrente es que un conjunto de pruebas verde dice menos de lo que parece. Las propiedades que fallan suelen ser aquellas que un docstring defiende con más confianza y ninguna prueba discrimina realmente.


Ejecutarlo

cp .env.example .env          # fill in the values
make local-up                 # Postgres, MongoDB, Redis, MinIO via docker compose
make lint typecheck           # ruff + mypy
pytest -m "not integration"   # unit tests, no database required
pytest -m integration         # requires the stack above

Las pruebas de integración se saltan en lugar de fallar cuando no se puede acceder a la base de datos. Un código de salida verde con pruebas omitidas no es una ejecución exitosa: verifique los recuentos.


Documentación

La documentación completa está publicada en sindrehaugen.github.io/neuro-cognitive-engine — arquitectura, los ocho registros de decisiones de arquitectura, guías de administración y usuario por motor, la referencia del núcleo compartido y el libro de recetas de herramientas MCP.

Vale la pena comenzar con:


Diseño

nce/                    engine core: memory, graph, RLS, autonomy, signing, replay
nce/vertical_modules/   the business engines
nce/migrations/         idempotent SQL, re-applied on boot under an advisory lock
tests/                  391 files; integration tests marked and CI-wired
docs/                   source for the published documentation
go/                     launcher and hardware detection
trimcp-infra/           Terraform for AWS and GCP
deploy/                 compose stacks and container images

Estado

En desarrollo activo. Once de los diecisiete motores tienen código en main; el duodécimo está en progreso. El sustrato central — aislamiento de inquilinos, propiedad, gobierno de autonomía, registro de auditoría, firma, reproducción — está completo y en uso por los motores que se encuentran encima.

Este repositorio se publica para mostrar la arquitectura y el enfoque de ingeniería. No es un producto empaquetado y no hay compromiso de soporte.


Licencia

Propietario. Todos los derechos reservados. Publicado para revisión; no licenciado para reutilización.


Sindre Løvlie Haugen · github.com/sindrehaugen

-
license - not tested
-
quality - not tested
-
maintenance - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

  • Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.

  • MCP-native Trust Infrastructure for AI Agents. Persistent encrypted memory with Trust Quotient.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sindrehaugen/neuro-cognitive-engine'

If you have feedback or need assistance with the MCP directory API, please join our Discord server