@jossuealcala/madre 0.7.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +773 -1
- package/README.md +92 -28
- package/bin/madre.mjs +30 -10
- package/docs/REFERENCE.md +157 -81
- package/docs/SDK.md +23 -19
- package/package.json +1 -1
- package/public/app.js +11207 -4196
- package/public/assets/brand/Geist-latin-ext.woff2 +0 -0
- package/public/assets/brand/Geist-latin.woff2 +0 -0
- package/public/assets/brand/GeistMono-latin-ext.woff2 +0 -0
- package/public/assets/brand/GeistMono-latin.woff2 +0 -0
- package/public/assets/brand/JetBrainsMono-latin-ext.woff2 +0 -0
- package/public/assets/brand/JetBrainsMono-latin.woff2 +0 -0
- package/public/assets/brand/OFL-Geist.txt +93 -0
- package/public/assets/brand/OFL-GeistMono.txt +93 -0
- package/public/assets/brand/OFL-JetBrainsMono.txt +93 -0
- package/public/assets/brand/OFL-Sora.txt +93 -0
- package/public/assets/brand/Sora-latin-ext.woff2 +0 -0
- package/public/assets/brand/Sora-latin.woff2 +0 -0
- package/public/assets/brand/madre-app-180.png +0 -0
- package/public/assets/brand/madre-app-192.png +0 -0
- package/public/assets/brand/madre-app-512.png +0 -0
- package/public/assets/brand/madre-app.svg +1 -0
- package/public/assets/brand/madre-favicon.svg +1 -0
- package/public/assets/news/1.0/alerts.webp +0 -0
- package/public/assets/news/1.0/bar.webp +0 -0
- package/public/assets/news/1.0/finder.webp +0 -0
- package/public/assets/news/1.0/github.webp +0 -0
- package/public/assets/news/1.0/intents.webp +0 -0
- package/public/assets/news/1.0/looks.webp +0 -0
- package/public/assets/news/1.0/modules.webp +0 -0
- package/public/assets/news/1.0/mother.webp +0 -0
- package/public/assets/news/1.0/nostromo.webp +0 -0
- package/public/assets/news/1.0/permissions.webp +0 -0
- package/public/assets/news/1.0/room.webp +0 -0
- package/public/assets/news/1.0/settings.webp +0 -0
- package/public/assets/wallpapers/biznaga.webp +0 -0
- package/public/assets/wallpapers/canela.webp +0 -0
- package/public/assets/wallpapers/jarrito.webp +0 -0
- package/public/assets/wallpapers/magna.webp +0 -0
- package/public/assets/wallpapers/oceano.webp +0 -0
- package/public/assets/wallpapers/paraiso.webp +0 -0
- package/public/assets/wallpapers/quila.webp +0 -0
- package/public/assets/wallpapers/tradicion.webp +0 -0
- package/public/assets/wallpapers/tropical.webp +0 -0
- package/public/assets/wallpapers/urbania.webp +0 -0
- package/public/assets/wallpapers/ventura.webp +0 -0
- package/public/assets/wallpapers/xico.webp +0 -0
- package/public/brands.js +28 -2
- package/public/editor.js +744 -0
- package/public/es.js +2784 -1026
- package/public/i18n.js +1 -1
- package/public/index.html +201 -175
- package/public/inquiry.js +11 -11
- package/public/loader.js +79 -0
- package/public/macroverso.js +1497 -0
- package/public/manifest.webmanifest +14 -0
- package/public/nostromo-engine.js +2222 -0
- package/public/resay.js +24 -0
- package/public/review-ask.js +85 -0
- package/public/salas-mac.css +787 -0
- package/public/salas-mac.html +154 -0
- package/public/salas-mac.js +3264 -0
- package/public/salas.css +85 -0
- package/public/salas.html +47 -0
- package/public/salas.js +200 -0
- package/public/styles.css +6207 -425
- package/public/touch.js +83 -0
- package/public/tour-chapters.js +342 -0
- package/public/tour.js +510 -0
- package/public/troubleshooting.js +159 -140
- package/src/adapters/codex.mjs +46 -6
- package/src/adapters/gemini.mjs +30 -10
- package/src/adapters/madre.mjs +110 -18
- package/src/adapters/process.mjs +42 -2
- package/src/auth-probe.mjs +2 -2
- package/src/bridge/devices.mjs +202 -0
- package/src/bridge/handoff.mjs +45 -0
- package/src/bridge/host.mjs +82 -0
- package/src/bridge/network.mjs +133 -0
- package/src/bridge/policy.mjs +89 -0
- package/src/bridge/qr.mjs +287 -0
- package/src/bridge/server.mjs +269 -0
- package/src/capabilities.mjs +5 -9
- package/src/chats.mjs +59 -22
- package/src/checkpoint.mjs +137 -35
- package/src/choices.mjs +18 -3
- package/src/cli-args.mjs +12 -1
- package/src/commands.mjs +15 -15
- package/src/config.mjs +73 -9
- package/src/conversation-context.mjs +5 -2
- package/src/dataset.mjs +3 -1
- package/src/directives.mjs +0 -5
- package/src/enlaces.mjs +451 -0
- package/src/event-store.mjs +55 -10
- package/src/exam.mjs +5 -5
- package/src/extensions.mjs +0 -2
- package/src/file-ops.mjs +23 -0
- package/src/files.mjs +52 -2
- package/src/github.mjs +407 -0
- package/src/json-file.mjs +63 -0
- package/src/lease.mjs +2 -2
- package/src/lobby-work.mjs +103 -0
- package/src/looks.mjs +55 -0
- package/src/maturity.mjs +3 -3
- package/src/mcp/github-server.mjs +164 -0
- package/src/mcp/image-server.mjs +1 -1
- package/src/mcp/memory-server.mjs +11 -3
- package/src/memory.mjs +38 -12
- package/src/models.mjs +89 -5
- package/src/modules/ahp.mjs +4 -4
- package/src/modules/ash.mjs +1 -1
- package/src/modules/bishop-plan.mjs +207 -0
- package/src/modules/bishop.mjs +645 -0
- package/src/modules/choices.mjs +2 -2
- package/src/modules/correo.mjs +1 -1
- package/src/modules/enlaces.mjs +255 -0
- package/src/modules/git-pulse.mjs +2 -2
- package/src/modules/github.mjs +322 -0
- package/src/modules/image-studio.mjs +3 -3
- package/src/modules/index.mjs +18 -4
- package/src/modules/intents-calibration.mjs +338 -0
- package/src/modules/intents-desk.mjs +481 -0
- package/src/modules/intents-observe.mjs +266 -0
- package/src/modules/intents-policy.mjs +414 -0
- package/src/modules/intents-try.mjs +91 -0
- package/src/modules/intents.mjs +145 -0
- package/src/modules/ollama.mjs +4 -4
- package/src/modules/playwright.mjs +121 -11
- package/src/modules/ripley.mjs +1 -1
- package/src/modules/runs.mjs +2 -2
- package/src/modules/sdk.mjs +10 -4
- package/src/ollama.mjs +6 -1
- package/src/outbound.mjs +19 -17
- package/src/override.mjs +100 -0
- package/src/ports.mjs +23 -1
- package/src/prices.mjs +72 -0
- package/src/privacy.mjs +30 -11
- package/src/quota-sources.mjs +0 -8
- package/src/request-guard.mjs +1 -1
- package/src/review-ask.mjs +111 -0
- package/src/room/archivist.mjs +55 -37
- package/src/room/budget.mjs +17 -5
- package/src/room/control.mjs +70 -7
- package/src/room/economy.mjs +35 -7
- package/src/room/escalation.mjs +2 -0
- package/src/room/guard.mjs +26 -2
- package/src/room/prompt.mjs +22 -15
- package/src/room/runs.mjs +84 -21
- package/src/room/vectors.mjs +19 -4
- package/src/room.mjs +351 -65
- package/src/router.mjs +3 -1
- package/src/runs.mjs +23 -5
- package/src/salas.mjs +313 -0
- package/src/sentinel-errors.mjs +1 -1
- package/src/server-sentinel.mjs +124 -0
- package/src/server.mjs +1526 -163
- package/src/setup.mjs +1 -0
- package/src/tour.mjs +159 -0
- package/src/updates.mjs +48 -8
- package/src/usage-sentinel.mjs +1 -1
- package/src/verdict.mjs +7 -7
- package/src/whats-new.mjs +160 -0
package/docs/REFERENCE.md
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
Todo lo que MADRE hace, con los números exactos. Para empezar en cinco minutos, el [README](../README.md).
|
|
4
4
|
|
|
5
|
-
- [Arranque](#arranque--los-primeros-cinco-minutos) · [
|
|
6
|
-
- [Modos de permiso](#modos-de-permiso) · [Qué puede cada agente](#qué-puede-cada-agente) · [
|
|
7
|
-
- [Memoria](#memoria) · [
|
|
5
|
+
- [Arranque](#arranque--los-primeros-cinco-minutos) · [El proyecto](#el-proyecto) · [Idioma](#idioma)
|
|
6
|
+
- [Modos de permiso](#modos-de-permiso) · [Qué puede cada agente](#qué-puede-cada-agente) · [Planes](#planes)
|
|
7
|
+
- [Memoria](#memoria) · [Tu modelo](#tu-modelo) · [Lo que se envía](#lo-que-se-envía) · [Diagnóstico](#diagnóstico) · [Módulos](#módulos)
|
|
8
8
|
- [Lo que sale de la máquina](#lo-que-sale-de-la-máquina) · [Config y variables](#referencia)
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
## ARRANQUE · LOS PRIMEROS CINCO MINUTOS
|
|
13
13
|
|
|
14
|
-
Necesitas Node 22.5 o superior y al menos una de estas CLIs con sesión iniciada: **Codex**, **Claude Code**, **Gemini CLI**, **OpenCode**. Si además corre **Ollama** con un modelo de chat,
|
|
14
|
+
Necesitas Node 22.5 o superior y al menos una de estas CLIs con sesión iniciada: **Codex**, **Claude Code**, **Gemini CLI**, **OpenCode**. Si además corre **Ollama** con un modelo de chat, el proyecto tiene un quinto agente local.
|
|
15
15
|
|
|
16
|
-
1.
|
|
17
|
-
2.
|
|
18
|
-
3. Para sumar o reconectar una IA más tarde:
|
|
19
|
-
4. Con Ollama,
|
|
20
|
-
5.
|
|
16
|
+
1. Corre `npx @jossuealcala/madre` desde cualquier carpeta: abre Inicio, con todos tus proyectos y el Coordinador arriba. La primera vez lo acompaña un asistente de tres pasos: conectar los agentes (cada uno con su botón para instalarlo y firmarlo, ahí mismo; una vez para todos los proyectos), agregar los proyectos (eliges carpetas dentro de tu carpeta de usuario; agregar no abre) y abrir los que vas a usar. `npx @jossuealcala/madre start` dentro de una carpeta sigue abriendo ese proyecto directo; si no hay agentes, el proyecto abre igual en Conecta tus agentes para instalarlos y firmarlos.
|
|
17
|
+
2. El proyecto abre en `http://127.0.0.1:4317`. Elige un agente en el selector o escribe `@claude …`. El chip junto a `to @agente` dice en qué modo sale el mensaje; `#1 SOLO CONVERSAR`, solo lectura, es el predeterminado.
|
|
18
|
+
3. Para sumar o reconectar una IA más tarde: Ajustes → Agentes (el botón de ajustes de la barra, o ⌘, / Ctrl+,), donde los agentes viven junto al resto de los ajustes. Codex y Claude Code se firman con un clic; Gemini y OpenCode aceptan su llave ahí mismo. MADRE no guarda credenciales de proveedores: cada llave va al archivo de su propio CLI.
|
|
19
|
+
4. Con Ollama, el módulo IA local (Módulos, en la barra) ya está encendido: la memoria se embebe localmente y `@madre` aparece en la fila.
|
|
20
|
+
5. Ajustes → Memoria decide quién destila la memoria y cada cuánto. El Mapa de memoria, desde la cabecera de Diagnóstico, muestra lo que el proyecto recuerda.
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
npx @jossuealcala/madre doctor # qué agentes hay, quién tiene sesión, si hay versión nueva
|
|
@@ -25,37 +25,37 @@ npx @jossuealcala/madre setup # el mismo alta, desde la terminal, si la pr
|
|
|
25
25
|
npx @jossuealcala/madre start --no-open --project RUTA
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
**Tres nombres.** **MADRE** es el producto. **
|
|
28
|
+
**Tres nombres.** **MADRE** es el producto. **Diagnóstico** es su voz operativa: fallas, conexiones, ajustes. **Historial** es el canal sobre el que corre el proyecto: el registro de eventos, el bloque del plan, la carpeta `.pulse/` donde caen los artefactos; esos identificadores conservan su nombre de antes, PULSE.
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## EL PROYECTO
|
|
33
33
|
|
|
34
|
-
**
|
|
34
|
+
**Conecta tus agentes.** Sin agentes en línea el proyecto abre en Conecta tus agentes: una tarjeta por agente con su estado real y la única acción que le toca, `INSTALL` o `SIGN IN`. Todo corre en tu máquina, con el comando a la vista, y la salida se transmite a la misma pantalla. Codex y Claude Code se firman con un clic porque su CLI abre el navegador; Gemini y OpenCode aceptan su llave ahí mismo, que MADRE escribe donde ese CLI la busca, con el archivo cerrado a tu usuario y sin guardar copia en ninguna parte, solo desde esta computadora. Cada tarjeta dice además con qué cuenta se firma ese agente y si hay una entrada sin pagar, para que elegir no sea a ciegas. Esa pantalla se repliega en cuanto un agente queda listo y no vuelve: es el primer contacto de un proyecto sin nadie dentro. A partir de ahí los agentes viven en `⚙ CONNECTIONS`, con los mismos botones y, al lado, los modos, los permisos y las llaves de cada agente.
|
|
35
35
|
|
|
36
|
-
**La barra.** La marca con su latido, la raíz del proyecto,
|
|
36
|
+
**La barra.** La marca con su latido, la raíz del proyecto, los agentes, `LIVE`, las alertas (`DETENER TODO`, versión nueva), `MODULES`, `Diagnóstico`, tema y panel de archivos. Cada esfera de agente lleva el Uso, su consumo: el límite real del proveedor cuando el CLI lo publica, si no, la ventana local de MADRE. Un clic la despliega.
|
|
37
37
|
|
|
38
38
|
**Las burbujas.** Cada respuesta dice quién habla, a quién, en qué modo y con qué modelo; debajo, hora, tokens del turno y acumulado. Markdown completo, tablas, bloques de código con COPY. Las rutas que un agente menciona (`src/room.mjs:42`) abren el visor. Al pasar el ratón: valorar bien o mal, copiar, responder con otro agente.
|
|
39
39
|
|
|
40
|
-
**
|
|
40
|
+
**La caja de Escribir.**
|
|
41
41
|
|
|
42
42
|
| Escribes | Pasa |
|
|
43
43
|
|---|---|
|
|
44
44
|
| `@codex`, `@claude`, `@gemini`, `@opencode`, `@madre` | Menciona a un agente; `@` abre la lista |
|
|
45
45
|
| `!src/room.mjs:12-20` | Adjunta un archivo del proyecto, con líneas si las das; `!` busca entre los archivos |
|
|
46
|
-
| `#0` a `#4` | Fija el modo de permiso de ese mensaje. `#3` y `#4` abren
|
|
46
|
+
| `#0` a `#4` | Fija el modo de permiso de ese mensaje. `#3` y `#4` abren el desbloqueo, igual que el chip: un modo que pide dos llaves con el ratón no sale gratis por teclearlo |
|
|
47
47
|
| `/create …`, `/image …`, `/stopall`, `/git …`, `/ahp …` | Comandos; `/` abre el menú. `/git push` muestra qué saldría; solo `/git push confirm` lo envía |
|
|
48
48
|
| `STOPALL` | Freno maestro |
|
|
49
|
-
| Clip, arrastrar o pegar una imagen | Adjunto para
|
|
50
|
-
| `@madre, pregúntale
|
|
49
|
+
| Clip, arrastrar o pegar una imagen | Adjunto para el proyecto, nunca dentro de su carpeta |
|
|
50
|
+
| `@madre, pregúntale a los agentes …` | Preguntar a todos: un paso por agente en línea, cierre citado |
|
|
51
51
|
|
|
52
52
|
Un segundo clic en la esfera elegida, o el chip `default model ▾`, elige el modelo de esa petición: Codex, Claude, Gemini y OpenCode con sus listas reales, o un nombre libre. Se recuerda por agente.
|
|
53
53
|
|
|
54
|
-
**Archivos.** El icono de la derecha abre el árbol del proyecto en solo lectura. El visor numera líneas; clic y Shift+clic seleccionan un rango y `REVIEW WITH` lo manda a un agente. Con **
|
|
54
|
+
**Archivos.** El icono de la derecha abre el árbol del proyecto en solo lectura. El visor numera líneas; clic y Shift+clic seleccionan un rango y `REVIEW WITH` lo manda a un agente. Con **Vista previa** encendida en `MODULES`, HTML, SVG y Markdown se renderizan en un marco sellado en lugar de mostrar su código, con barra atrás/recargar y recarga automática cuando un agente cambia el archivo.
|
|
55
55
|
|
|
56
|
-
**Tema.** Sol/luna en la barra: automático, claro u oscuro. El claro no brilla; la pantalla de
|
|
56
|
+
**Tema.** Sol/luna en la barra: automático, claro u oscuro. El claro no brilla; la pantalla de Diagnóstico sigue siendo fósforo.
|
|
57
57
|
|
|
58
|
-
**Idioma.**
|
|
58
|
+
**Idioma.** El proyecto habla **español** por defecto. El botón `EN` de la barra lo pasa a inglés y el navegador lo recuerda; `PULSE_LANGUAGE=en` manda sobre el config en el siguiente arranque. Un idioma es solo cómo se lee: lo que quedó escrito en el ledger conserva las palabras con que se escribió, y al mostrarse se vuelve a decir en el idioma del proyecto.
|
|
59
59
|
|
|
60
60
|
La **terminal sigue en inglés a propósito**: `madre doctor` y el arranque imprimen lo que la gente pega en un issue o busca en un motor, y en inglés se encuentra. Lo que imprime un CLI por su cuenta tampoco se toca nunca.
|
|
61
61
|
|
|
@@ -67,23 +67,23 @@ Cada mensaje sale con un modo. Tu modo es el techo de cualquier plan que ese men
|
|
|
67
67
|
|
|
68
68
|
| Modo | Nombre | Qué permite |
|
|
69
69
|
|---|---|---|
|
|
70
|
-
| `#0` | **
|
|
71
|
-
| `#1` | **
|
|
72
|
-
| `#2` | **
|
|
73
|
-
| `#3` | **
|
|
74
|
-
| `#4` | **
|
|
70
|
+
| `#0` | **INCÓGNITO** | Fuera del registro. No se escribe en el ledger, nadie lo recuerda, desaparece al recargar. Los tokens sí cuentan. |
|
|
71
|
+
| `#1` | **SOLO CONVERSAR** | Leer el proyecto y coordinar. El predeterminado. |
|
|
72
|
+
| `#2` | **CREAR** | Añadir archivos y carpetas nuevos donde corresponda en el proyecto. Lo que ya existía no cambia: si un agente lo toca, MADRE lo restaura al terminar y lo dice. |
|
|
73
|
+
| `#3` | **EDITAR** | Editar el proyecto real sin aprobación por acción. Un titular por proyecto, punto de restauración antes, lista de cambios y `DESHACER` después. |
|
|
74
|
+
| `#4` | **ACCESO TOTAL** | Todo lo de EDITAR más ejecutar comandos: pruebas, builds, `git push`, deploys con las CLIs y sesiones que ya hay en la máquina. Los archivos vuelven con `DESHACER`; lo que sale de la nave, no. El desbloqueo pide la misma llave dos veces: el nombre del proyecto (o tu frase), escrito dos veces. |
|
|
75
75
|
|
|
76
|
-
**
|
|
76
|
+
**CREAR por dentro.** El agente decide dónde va lo nuevo según las convenciones del proyecto, y crea carpetas si hace falta; `.pulse/out/<turno>/` queda como borrador para lo que no tiene sitio. MADRE toma un punto de restauración antes del turno y, al terminar, conserva lo que apareció, lo muestra bajo la respuesta como artefactos, y restaura cualquier archivo previo que se haya modificado, renombrado o borrado, avisando en el proyecto. Las CLIs reciben sus herramientas de escritura sobre el proyecto y la instrucción de no tocar lo existente; la garantía la da la restauración de MADRE al terminar, no la regla previa.
|
|
77
77
|
|
|
78
|
-
**
|
|
78
|
+
**EDITAR por dentro.** Antes del turno, un commit real bajo `refs/madre/checkpoints/` que no toca tu rama, tu índice ni tu stash. Durante el turno, `.git/`, `.pulse/`, `.madre/`, los `.env` y `.claude/settings.local.json` quedan en solo lectura a nivel de sistema de archivos y recuperan sus permisos al terminar. Después, la lista de archivos añadidos, modificados y borrados, y `DESHACER` restaura el punto de restauración. Desbloquear `#3` pide el nombre del proyecto; desbloquear `#4` lo pide dos veces. En `#4` cada CLI recibe su herramienta de comandos (Codex sin sandbox de red, Claude `Bash`, Gemini `run_shell_command`, OpenCode `bash`) y la instrucción de decir en una línea qué va a salir y adónde antes de que salga.
|
|
79
79
|
|
|
80
|
-
**
|
|
80
|
+
**Solicitud de permiso.** Si un plan en `#1` llega a un paso que pide crear algo, el proyecto se detiene y pregunta: `GRANT ONCE · GRANT FOR PLAN · DENY`, con cronómetro de tres minutos. Solo el humano concede; un permiso escrito por un agente dentro de la conversación no cuenta.
|
|
81
81
|
|
|
82
|
-
**Modo por paso.** Un orquestador puede pedir el modo de cada paso: `@codex #2: crea la página`, `@claude #3: arregla el router`. MADRE lo acota al modo de tu mensaje y al `MAX MODE` de ese agente. Con tu mensaje en `#3`, la palabra del orquestador basta; con tu mensaje en `#1`, un paso `#2` pasa por la
|
|
82
|
+
**Modo por paso.** Un orquestador puede pedir el modo de cada paso: `@codex #2: crea la página`, `@claude #3: arregla el router`. MADRE lo acota al modo de tu mensaje y al `MAX MODE` de ese agente. Con tu mensaje en `#3`, la palabra del orquestador basta; con tu mensaje en `#1`, un paso `#2` pasa por la solicitud de permiso.
|
|
83
83
|
|
|
84
|
-
**Dos controles por agente.**
|
|
84
|
+
**Dos controles por agente.** El Modo máximo, en Ajustes → Permisos, dice hasta dónde puede llegar un mensaje dirigido a cada agente; el Modo inicial, en Ajustes → Agentes, dónde empieza: `#1` solo lectura hasta que armes CREAR, o `#2` para que cada turno pueda añadir archivos sin pedirlo. Aparte, dos habilidades: generar imágenes y web.
|
|
85
85
|
|
|
86
|
-
**Comandos que pide un agente.** Con el módulo **
|
|
86
|
+
**Comandos que pide un agente.** Con el módulo **Comandos** encendido, un agente en `#1`, `#2` o `#3` que necesita un comando que no puede correr (las pruebas, un build, un linter) termina su respuesta con un bloque `pulse-run`: el motivo en la primera línea y un comando por línea, cada uno con `$`. MADRE muestra cada línea como un botón y no corre nada hasta que lo presionas. Cada línea corre sola, desde la raíz del proyecto y **sin shell**: lo que lees en el botón es exactamente lo que se ejecuta, así que las líneas con `|`, `&&`, `;`, redirecciones, `$VARIABLES`, comodines, `~` o `cd` se muestran con el motivo y no se pueden correr. Antes de correr, MADRE toma un punto de restauración; la salida vuelve al proyecto como tarjeta, la leen todos los agentes en su siguiente turno, y si el comando cambió archivos, `DESHACER` los regresa. Lo que el comando haya mandado fuera de la máquina no regresa. Un comando a la vez, diez minutos como máximo, y `DETENER` en su tarjeta o `DETENER TODO` lo detienen. Un comando que abre un puerto es un servidor: no tiene límite de tiempo, su tarjeta dice dónde escucha y lo abre en TUS SERVIDORES, y mientras sirve puedes correr otro comando. Los agentes saben que un servidor para el proyecto escucha solo en `127.0.0.1`. En `#4` el agente corre sus propios comandos y no se le enseña el bloque.
|
|
87
87
|
|
|
88
88
|
---
|
|
89
89
|
|
|
@@ -92,18 +92,18 @@ Cada mensaje sale con un modo. Tu modo es el techo de cualquier plan que ese men
|
|
|
92
92
|
| | Lee el proyecto | Recibe imágenes | Crea archivos acotado | Genera imágenes | Web |
|
|
93
93
|
|---|---|---|---|---|---|
|
|
94
94
|
| **Codex** | sí | `-i` | sandbox de escritura | sí, nativo, con su cuenta de ChatGPT | `web_search` |
|
|
95
|
-
| **Claude Code** | sí | lectura de la ruta | reglas de permiso por ruta | sí, con **
|
|
96
|
-
| **Gemini CLI** | sí | `read_file` | política por patrón | sí, con **
|
|
97
|
-
| **OpenCode** | sí | `-f` | permisos `edit` por patrón | sí, con **
|
|
95
|
+
| **Claude Code** | sí | lectura de la ruta | reglas de permiso por ruta | sí, con **Imágenes** | WebFetch / WebSearch |
|
|
96
|
+
| **Gemini CLI** | sí | `read_file` | política por patrón | sí, con **Imágenes** | `google_web_search` |
|
|
97
|
+
| **OpenCode** | sí | `-f` | permisos `edit` por patrón | sí, con **Imágenes** | webfetch / websearch |
|
|
98
98
|
| **@madre** | la memoria | no | no | no | no |
|
|
99
99
|
|
|
100
|
-
**
|
|
100
|
+
**Imágenes** es un módulo de MADRE: un servidor MCP propio que expone `generate_image` sobre los modelos de imagen de la API de Gemini, con tu propia key y tus créditos. Hoy **solo Gemini**, y por una razón: es la única cuenta de los agentes cuya llave MADRE ya encuentra sin pedirte una nueva, y tiene capa gratis. Anthropic no genera imágenes —Claude las lee, no las hace—, la cuenta de ChatGPT con la que se firma Codex no da acceso a la API de imágenes, y OpenCode depende del proveedor al que lo apuntes. Se conecta a Claude, Gemini y OpenCode solo dentro de un permiso CREAR con el alcance de imágenes encendido, en sus homes aislados, y la imagen cae en la carpeta del turno como cualquier artefacto. `/image <petición>` arma el permiso y enruta al agente que puede generar. Con los cuatro agentes puedes pedir una imagen; Codex la hace con lo suyo, los demás con Imágenes.
|
|
101
101
|
|
|
102
|
-
El acceso web es un permiso permanente por agente, apagado por defecto, que se enciende en
|
|
102
|
+
El acceso web es un permiso permanente por agente, apagado por defecto, que se enciende en Ajustes → Agentes, con Acceso a la web.
|
|
103
103
|
|
|
104
104
|
---
|
|
105
105
|
|
|
106
|
-
##
|
|
106
|
+
## PLANES
|
|
107
107
|
|
|
108
108
|
Un agente puede poner a trabajar a los demás. Si le pides coordinar, termina su respuesta con un bloque `pulse`, un paso por línea:
|
|
109
109
|
|
|
@@ -113,15 +113,17 @@ Un agente puede poner a trabajar a los demás. Si le pides coordinar, termina su
|
|
|
113
113
|
@claude: Compara ambas síntesis y marca dónde divergen.
|
|
114
114
|
```
|
|
115
115
|
|
|
116
|
-
MADRE ejecuta los pasos como turnos normales: cada uno queda en el ledger, pasa por
|
|
116
|
+
MADRE ejecuta los pasos como turnos normales: cada uno queda en el ledger, pasa por traspaso, presupuesto y timeout. El paso dirigido al orquestador es su turno de cierre. Un paso del plan no arma otro plan, así que todo plan termina. Máximo cuatro pasos más el cierre.
|
|
117
117
|
|
|
118
|
-
**
|
|
118
|
+
**TURNOS.** En Diagnóstico, junto al centinela. Encendido por defecto: una conversación que sigue trabajando cuando abres otra no se detiene, sigue escribiendo su registro y el panel de conversaciones la marca hasta que termina. Dos límites: conversaciones trabajando a la vez (2) y turnos a la vez en cada una (3); un mensaje que los pasaría se rechaza con el motivo antes de empezar. Todas las conversaciones comparten un solo titular de EDITAR o ACCESO TOTAL. Apagado, una sola conversación maneja a los agentes y no se puede cambiar de una que está trabajando. `DETENER TODO` detiene todas.
|
|
119
|
+
|
|
120
|
+
**DETENER TODO.** El botón de la barra, `STOPALL` en la caja de Escribir o `curl -X POST http://127.0.0.1:4317/api/stop-all` detienen todos los planes y matan todos los procesos de agente. Diagnóstico avisa en rojo cuando el proyecto se escapa: tres agentes a la vez, un agente con dos turnos cruzados, un plan de más de cinco minutos.
|
|
119
121
|
|
|
120
122
|
---
|
|
121
123
|
|
|
122
124
|
## MEMORIA
|
|
123
125
|
|
|
124
|
-
Todo lo dicho fuera de
|
|
126
|
+
Todo lo dicho fuera de INCÓGNITO queda indexado junto al ledger, en `~/.pulse/rooms/<sala>/memory.sqlite`. Nada de esto requiere un comando: ocurre solo.
|
|
125
127
|
|
|
126
128
|
**Recall.** Cuando la conversación excede la ventana de contexto, cada turno recibe los intercambios anteriores que coinciden con la petición, citados con su número de secuencia, para cualquier agente.
|
|
127
129
|
|
|
@@ -131,85 +133,158 @@ Todo lo dicho fuera de GHOST queda indexado junto al ledger, en `~/.pulse/rooms/
|
|
|
131
133
|
|
|
132
134
|
**Herramientas.** Cada turno lleva adjunto el servidor MCP `pulse-memory`: `memory_search`, `memory_recall`, `memory_notes`, `memory_timeline`, `project_state` y `memory_note`, que guarda una nota cuando tú pides explícitamente recordar algo. La burbuja muestra `◉ memory saved`.
|
|
133
135
|
|
|
134
|
-
**
|
|
136
|
+
**Mapa de memoria.** La memoria en un mapa, detrás del nombre del proyecto: MADRE es un sol rojo que late, cada memoria un planeta en el color de su tipo, unidos por venas que pulsan. Se navega, se lee y solo se puede borrar, con doble confirmación. Ocho toques al corazón activan el Bloqueo temporal y sellan el archivo diez minutos.
|
|
135
137
|
|
|
136
|
-
**@madre.** Con Ollama y un modelo de chat, la memoria habla: `@madre` responde desde todo el archivo con citas `[#n]`, dice cuando
|
|
138
|
+
**@madre.** Con Ollama y un modelo de chat, la memoria habla: `@madre` responde desde todo el archivo con citas `[#n]`, dice cuando el proyecto nunca discutió algo, no escribe ni ejecuta, y convoca a los agentes si se lo pides. Sus tokens son locales y no cuentan. Cuando existe un modelo entrenado con el proyecto, lo usa.
|
|
137
139
|
|
|
138
|
-
**Ajustes.**
|
|
140
|
+
**Ajustes.** Ajustes → Memoria: quién destila, quiénes pueden, cada cuánto, dónde se embebe, cuánto contexto puede ocupar el recall. Todo en `~/.pulse/config.json`, sin reiniciar.
|
|
139
141
|
|
|
140
|
-
**Privacidad.** Una CLI corre con su propio contexto privado y puede escribirlo en una respuesta. En
|
|
142
|
+
**Privacidad.** Una CLI corre con su propio contexto privado y puede escribirlo en una respuesta. En Ajustes → Privacidad nombras los términos que no deben viajar por el proyecto: MADRE los sustituye por `[ENTIDAD-ORG]` antes de que lleguen al ledger, al archivista, a los demás agentes o al dataset, y Borrar datos privados limpia lo que el proyecto ya tenía. Los términos viven en `config.json`; el proyecto solo registra cuántos.
|
|
141
143
|
|
|
142
144
|
---
|
|
143
145
|
|
|
144
|
-
##
|
|
146
|
+
## TU MODELO
|
|
145
147
|
|
|
146
|
-
|
|
148
|
+
El proyecto acumula material de entrenamiento mientras trabajas. `MEMORY` muestra en vivo cuántos pares limpios lleva hacia un LoRA, con 300 como objetivo: turnos humano→agente, pasos del plan y notas destiladas; fuera quedan las respuestas de `@madre`, las enlatadas y lo que marques como mala respuesta con el pulgar de cada burbuja.
|
|
147
149
|
|
|
148
|
-
`EXPORT DATASET` escribe `train.jsonl` y `valid.jsonl` junto al ledger, redactados. La tarjeta `TRAIN` trae los comandos ya rellenados con tu carpeta de
|
|
150
|
+
`EXPORT DATASET` escribe `train.jsonl` y `valid.jsonl` junto al ledger, redactados. La tarjeta `TRAIN` trae los comandos ya rellenados con tu carpeta de proyecto y el modelo base que cabe en tu máquina. El entrenamiento corre fuera de MADRE, con mlx en Apple Silicon; la receta vive en [`docs/training/`](training/README.md). En cuanto Ollama tiene un modelo `madre-<proyecto>`, `@madre` responde con él y las demás CLIs reciben la indicación de preguntarle primero: la memoria del proyecto deja de costar tokens.
|
|
149
151
|
|
|
150
|
-
**Ollama.** Si corre en la máquina, MADRE lo usa sin configurar nada:
|
|
152
|
+
**Ollama.** Si corre en la máquina, MADRE lo usa sin configurar nada: búsqueda inteligente local, archivista local, `@madre`. El módulo IA local, en Módulos, muestra servidor, modelos y roles, descarga los recomendados y deja apagar cada rol. `qwen2.5:7b` en 16 GB, `qwen2.5:3b` en 8 GB; MADRE prefiere modelos de chat general sobre los `-coder`.
|
|
151
153
|
|
|
152
154
|
---
|
|
153
155
|
|
|
154
|
-
##
|
|
156
|
+
## LO QUE SE ENVÍA
|
|
155
157
|
|
|
156
|
-
Entra
|
|
158
|
+
Entra al **Mapa de memoria** desde la cabecera de Diagnóstico y haz clic en el núcleo, la estrella del centro. Cada turno, el proyecto escribe un documento en tu nombre y se lo entrega a un proceso; hasta ahora ese documento existía solo el instante en que el proceso lo leía. Ahí está entero: bloque por bloque, con lo que pesa cada uno y las palabras exactas que el agente recibe.
|
|
157
159
|
|
|
158
|
-
Cambia a quién va y las palabras cambian; sube el modo y aparece el permiso que se le daría, escrito —sin crear carpeta ni tomar
|
|
160
|
+
Cambia a quién va y las palabras cambian; sube el modo y aparece el permiso que se le daría, escrito —sin crear carpeta ni tomar punto de restauración para enseñarlo—. Preguntar qué diría el proyecto no es el proyecto diciéndolo: nada se cuenta, nada se guarda, nada sale. Y se lee, nunca se escribe: lo que MADRE promete sobre los agentes es cierto porque esas palabras son fijas.
|
|
159
161
|
|
|
160
162
|
**THE LAUNCH.** Debajo del documento, el comando exacto que MADRE correría para entregarlo: el ejecutable, el directorio, cada bandera y el lugar donde entra el briefing. No es una descripción — lo arman los mismos adaptadores que lo armarían de verdad. Debajo, lo que mantiene la corrida dentro del turno (la sesión que no persiste, el hogar temporal que se borra al terminar) y los servidores MCP que podría llamar, con sus herramientas contadas. **De ese comando nunca se imprime un valor de entorno, solo los nombres**: una línea de comandos es algo que la gente fotografía.
|
|
161
163
|
|
|
162
|
-
**
|
|
164
|
+
**Envíos.** El registro de salidas: cada destino al que MADRE o un agente llamó, con su cuenta. Nunca cuerpos, ni cabeceras, ni valores de consulta — solo a dónde y cuántas veces.
|
|
163
165
|
|
|
164
|
-
**La consola.** Dentro del núcleo,
|
|
166
|
+
**La consola.** Dentro del núcleo, Diagnóstico contesta desde lo que el proyecto ya tiene. Tres respuestas que no entiende y la interfaz se cierra.
|
|
165
167
|
|
|
166
|
-
##
|
|
168
|
+
## DIAGNÓSTICO
|
|
167
169
|
|
|
168
|
-
El botón de la barra abre la pantalla de diagnóstico. Escribe un síntoma, un agente o una palabra y
|
|
170
|
+
El botón de la barra abre la pantalla de diagnóstico. Escribe un síntoma, un agente o una palabra y Diagnóstico clasifica las condiciones registradas en este proyecto contra su catálogo, con el remedio para tu sistema operativo; cuando el proyecto puede aplicarlo, el remedio trae Aplicar. El mismo catálogo en terminal: `madre doctor --catalog [texto]`. La sesión de cada CLI, los modos, las habilidades, los tiempos, la memoria y la privacidad están en Ajustes.
|
|
169
171
|
|
|
170
|
-
|
|
|
172
|
+
| En el encabezado | Qué hace |
|
|
171
173
|
|---|---|
|
|
172
|
-
|
|
|
173
|
-
|
|
|
174
|
-
|
|
|
175
|
-
|
|
|
176
|
-
| `✎ FEEDBACK` | Un issue en blanco con tu entorno ya escrito |
|
|
177
|
-
| `?` | El recorrido de cuatro pasos, el mismo que se abre la primera vez |
|
|
174
|
+
| Mapa de memoria (cerebro) | La memoria en un mapa. También está en la barra de arriba |
|
|
175
|
+
| Ajustes (engrane) | Abre Ajustes › Versión y reportes, donde vive el centinela: los fallos que ninguna condición explica y las caídas del proceso, con rutas, usuarios, correos y claves eliminados. Cada reporte se lee antes de enviarse; el autorreporte viene apagado |
|
|
176
|
+
| ¿No se arregló? | Al pie de cada remedio: reporta que no funcionó, con el código de la condición |
|
|
177
|
+
| `?` | El recorrido de cinco paradas, el mismo que se abre la primera vez. Si dejaste a medias la lista de primeros pasos y la ocultaste, también la regresa |
|
|
178
178
|
|
|
179
179
|
---
|
|
180
180
|
|
|
181
181
|
## MÓDULOS
|
|
182
182
|
|
|
183
|
-
`MODULES` en la barra lista los disponibles y su estado. Ninguno escribe en el proyecto salvo la instalación de
|
|
183
|
+
`MODULES` en la barra lista los disponibles y su estado. Ninguno escribe en el proyecto salvo la instalación de Continuidad, que muestra el comando y pide confirmación.
|
|
184
184
|
|
|
185
185
|
| Módulo | Qué añade |
|
|
186
186
|
|---|---|
|
|
187
|
-
| **Git
|
|
188
|
-
| **
|
|
189
|
-
| **
|
|
190
|
-
| **
|
|
191
|
-
| **
|
|
192
|
-
| **
|
|
193
|
-
| **
|
|
194
|
-
| **
|
|
187
|
+
| **Git** | `/git status`, `/git log [n]`, `/git diff`, `/git branches`: hechos del repositorio como tarjeta en el hilo, que los agentes también leen. `/git commit "mensaje"` y `/git push confirm`: tu mano sobre el repositorio, con vista previa de lo que saldría |
|
|
188
|
+
| **Imágenes** | `generate_image` para Claude, Gemini y OpenCode, con tu key de Gemini, dentro de CREAR |
|
|
189
|
+
| **Vista previa** | El visor renderiza HTML, SVG y Markdown en un marco sellado, con recarga automática |
|
|
190
|
+
| **IA local** | Búsqueda inteligente, archivista y `@madre` en local, gratis y sin cuenta. Se instala, se despierta y descarga su modelo desde Conecta tus agentes |
|
|
191
|
+
| **Navegador de pruebas** | Un navegador headless en los turnos que piden ver, probar o capturar una página. Solo alcanza esta MADRE y los servidores que arrancaste desde COMANDOS: abrir la Vista previa o la app servida, hacer clic, leer consola, capturas al borrador del turno. Al encenderlo, MADRE comprueba que el servidor arranque con su navegador. Requiere `@playwright/mcp` |
|
|
192
|
+
| **GitHub** | `/gh`: pull requests abiertos, el CI de tu rama e issues abiertos como tarjeta. `/gh pr [n]`, `/gh ci`, `/gh issues`. `/gh pr create "título"`, `/gh comment <n> "texto"` y `/gh issue "título"` enseñan primero lo que se publicaría y solo publican con `confirm`. Los agentes leen en cualquier modo y escriben solo en `#4` ACCESO TOTAL. Entra con tu sesión de `gh`; sin ella, con un token de acceso detallado guardado en la bodega de MADRE |
|
|
193
|
+
| **Comandos** | Un agente te pide correr un comando que su modo no le deja correr; cada línea es un botón, corre sin shell desde la raíz del proyecto, con punto de restauración antes y la salida de vuelta en el proyecto. Un comando que abre un puerto es un servidor: sigue corriendo hasta que lo detienes desde su tarjeta, y mientras sirve puedes correr otro. Cuesta unos 300 tokens de instrucción por turno debajo de ACCESO TOTAL mientras está encendido |
|
|
194
|
+
| **Ahorro de tokens** | La economía de tokens del proyecto. El interruptor pide a los agentes respuestas en prosa compacta; lo demás está siempre encendido y no se nota: el briefing lleva solo los bloques que el turno puede usar, lo que nunca cambia se lee primero para que el caché lo reconozca, y la transcripción se queda quieta en vez de deslizarse. Nada de lo que tú escribes se altera. En su ventana, en Módulos, se ve a dónde se van los tokens |
|
|
195
|
+
| **Intenciones** | Bajo la caja, cuánto debe pensar Claude Code o Codex para el mensaje que escribes: subir cuando la petición parece pedir más, bajar solo cuando se vio o se midió que basta. Aprende primero de tu uso real, sin gastar tokens: lee en el registro del proyecto qué nivel usaste para cada tipo de pedido y si te alcanzó (seguiste con otra cosa) o se quedó corto (fallo, mala calificación o lo volviste a pedir en 15 minutos); esa lectura vive solo en memoria. Las pruebas rápida y completa de su tarjeta miden más rápido, con preguntas reales del proyecto y un juicio a ciegas, qué nivel basta para cada tipo de pregunta. Las mediciones viven en `~/.pulse/rooms/<sala>/intents.jsonl`. Nada cambia solo |
|
|
196
|
+
| **Continuidad** | Integración externa opcional: estado verificado del proyecto, checkpoints y handoffs en `.ahp/`; `/ahp status`, `/ahp check`, `/ahp context` |
|
|
197
|
+
|
|
198
|
+
Cada módulo es un archivo. Los tuyos van en `~/.pulse/modules/` (todos los proyectos) o en `<proyecto>/.madre/modules/` (ese proyecto): un `.mjs` con `export default { … }`, sin build ni registro, con interruptor, ajustes, comandos `/nombre`, herramientas MCP para los agentes y rutas propias. `RELOAD MODULES` lo recarga sin reiniciar. Guía y ejemplo listo para copiar en [`docs/SDK.md`](SDK.md). Cómo escribir uno, en [CONTRIBUTING.md](../CONTRIBUTING.md#writing-a-module).
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## INICIO · TODOS TUS PROYECTOS
|
|
203
|
+
|
|
204
|
+
**Inicio** junta todos tus proyectos: la tecla de los tres círculos al principio de la barra. Muestra los proyectos abiertos en esta Mac (quién te espera, quién trabaja, su última conversación y cuántas memorias guarda, por tipo) y los **dormidos**: proyectos cerrados cuya carpeta sigue en disco. El plan completo vive en `docs/MACROVERSO.md`.
|
|
205
|
+
|
|
206
|
+
| En Inicio | Pasa |
|
|
207
|
+
|---|---|
|
|
208
|
+
| **Abrir** | Lleva a ese proyecto en su puerto; con ⌘ se abre al lado |
|
|
209
|
+
| **Cerrar** | Detiene lo que corre en ese proyecto y lo cierra, como `Ctrl+C` en su terminal. Pregunta antes |
|
|
210
|
+
| **Despertar** | Abre un proyecto dormido como lo haría `madre start --project <carpeta>`; lo que dice al arrancar queda en `start.log`, junto a su registro |
|
|
211
|
+
| **Detener todo** | Frena a todos los agentes de todos los proyectos |
|
|
212
|
+
| **Quitar de MADRE** (⋯ en su tarjeta, o clic derecho) | Lo saca de Inicio. Si está abierto, lo cierra antes, y termina sus conexiones. Su carpeta en la Mac no se toca, y su memoria se queda en MADRE: si la vuelves a agregar, ahí está. Pregunta antes |
|
|
213
|
+
|
|
214
|
+
En un proyecto, la tecla junto a la casa **cambia de proyecto**: su indicador dice quién te espera (un número), quién trabaja (late) y quién terminó mientras estabas en otro (verde). Abre un panel con los demás proyectos abiertos; un clic lleva ahí y ⌘-clic abre otra pestaña. Lo lee de `GET /api/salas/open`: las salas abiertas, cada una con su resumen y sin el censo; solo esta Mac.
|
|
215
|
+
|
|
216
|
+
**El Mapa de proyectos**, desde Inicio en una pantalla de 900 px o más: tus proyectos en el espacio abierto, y cada uno es un Mapa de memoria dibujado por el mismo motor que el de su proyecto (`public/nostromo-engine.js`). Arrastra el espacio para moverlo, rueda para acercarte, **Recentrar** para volver a casa. Clic o ← → para volar a uno: el proyecto elegido es el único vivo, con su magma y sus pulsos; arrástralo para girarlo, toca una memoria para leerla en la ficha, Esc para soltarla y otra vez Esc para volver. De lejos cada proyecto se lee de su propio proceso sin las palabras de sus memorias (`GET /api/salas/universe?id=`); solo el elegido las pide (`&full=1`).
|
|
217
|
+
|
|
218
|
+
**Conexiones.** Una conexión es un contrato entre dos proyectos que firmas en Inicio (**Conectar proyectos**, o arrastrando un proyecto sobre otro en el Mapa de proyectos): quién lee de quién (o los dos), qué tipos cruzan y hasta cuándo. Cruzan solo notas destiladas que viajan a los turnos (bodega y puente), limpias por el guardia de privacidad del proyecto que entrega; nunca el registro, archivos, llaves, enfermería ni esclusa; y solo de lectura. En el proyecto que puede leer, cada turno lleva el servidor MCP `pulse-enlaces` (`enlace_rooms`, `enlace_search`); sin contrato no existe. Firmar y revocar dejan una línea en los dos proyectos; cada lectura queda contada (`enlace.read` en el que entrega, `enlace.received` en el que lee) y se ve en Inicio y como pulsos en la conexión del Mapa de proyectos.
|
|
219
|
+
|
|
220
|
+
**Quién leyó.** Cada lectura pertenece a un turno: la herramienta dice su agente y su turno, y el proyecto que lee comprueba que ese turno está corriendo ahí, para ese agente y arriba de INCÓGNITO; si no, no lee nada (ni dice si la conexión existe). La lectura queda con su agente y su turno en el proyecto que lee, con el agente en el que entrega, y bajo la respuesta de ese turno una línea dice «leyó 3 notas de gumball». En Inicio, cada conexión dice quién leyó al último.
|
|
221
|
+
|
|
222
|
+
**Incluir siempre.** Una casilla por conexión, apagada por defecto, en la hoja de firma y en cada conexión de Inicio. Marcada, cada turno del proyecto que lee recibe, sin pedirlas, hasta 3 notas del otro proyecto que casan con la pregunta (en un bloque del prompt, «recordó 3 notas de gumball» bajo la respuesta). Cada turno así es una lectura del tope por hora de la conexión; pasado el tope, el turno sigue sin notas. Nunca en INCÓGNITO, nunca para `@madre`, nunca en el proyecto del Coordinador. Solo tú la marcas o la quitas, desde Inicio; el Coordinador nunca la marca en las conexiones que firma.
|
|
223
|
+
|
|
224
|
+
| Ruta | Qué | Quién |
|
|
225
|
+
|---|---|---|
|
|
226
|
+
| `POST /api/salas/enlaces` · `POST /api/salas/enlaces/revoke` | Firmar y revocar. Dos proyectos se conectan una sola vez: mientras haya una conexión vigente entre ellos, en cualquier dirección, firmar otra responde 409 | La página de Inicio |
|
|
227
|
+
| `POST /api/salas/forget` | Quitar un proyecto de MADRE: lo cierra si está abierto, revoca sus conexiones y aparta su `project.json` como `project.forgotten.json`. Nunca el del Coordinador | La página de Inicio con su `Origin`, nunca un proceso |
|
|
228
|
+
| `GET /api/tour` · `POST /api/tour` | El recorrido de 1.0: si se debe el bonjour, si la persona viene de 0.7.2, capítulos leídos, dónde iba, pistas vistas. Se guarda en `~/.pulse/tour.json`, uno por persona, no uno por puerto | Las páginas de esta Mac |
|
|
229
|
+
| `GET /api/looks` · `POST /api/looks` | La apariencia que comparten Inicio y todos los proyectos: tema, acento, fondo y sus dos diales, burbujas y texto. Se guarda en `~/.pulse/looks.json`, una por persona; cada página la lee al abrir y al volver a verse, y la escribe al cambiarla. Lo que Inicio elige para sus tarjetas se queda en su navegador | Las páginas de esta Mac |
|
|
230
|
+
| `GET /api/tour/projects` · `POST /api/tour/projects` | Los proyectos de 0.7.2 que Inicio no puede listar (sin `project.json`) y traer uno: se busca su carpeta por nombre en las carpetas de siempre y se confirma por el hash de su id. Los quitados a propósito no vuelven | Las páginas de esta Mac |
|
|
231
|
+
| `POST /api/override/arm` | La llave de #3 y #4, comprobada por el proyecto (`src/override.mjs`): lo que se escribió, una o dos veces, y un pase para ese agente y ese modo. Un mensaje a #3 o #4 va solo con su pase; sin permiso recordado abre un mensaje, con él, los que quepan en sus minutos. STOP ALL y un reinicio los retiran. Ocho llaves equivocadas en un minuto responden 429. La huella de la frase nunca sale por `GET /api/settings` ni `/api/state` | Las páginas de esta Mac |
|
|
232
|
+
| `GET /api/enlace/memories` | Lo que este proyecto entrega por un contrato: solo `travels()` y los tipos del contrato, redactado; 404 si el contrato no sirve a quien pide, 423 sellado, 429 sobre el tope | Otro proceso de MADRE con la llave del canal (`~/.pulse/credentials/enlaces.json`), sin `Origin` |
|
|
233
|
+
| `POST /api/enlace/ask` | Lo que este proyecto pide a otro; solo para un turno que corre aquí (409 si no); registra `enlace.received` con agente y turno | El servidor `pulse-enlaces` de un turno, con la llave |
|
|
234
|
+
| `POST /api/salas/enlaces/recall` | Marcar o quitar «Incluir siempre» de una conexión | La página de Inicio, nunca un proceso |
|
|
235
|
+
| `POST /api/enlace/notice` | La línea de Diagnóstico al firmar o revocar | El proyecto que sirve Inicio, con la llave |
|
|
236
|
+
|
|
237
|
+
Los contratos viven en `~/.pulse/config.json` bajo `enlaces` y los cruces en `enlaces.jsonl` junto al registro de cada proyecto.
|
|
238
|
+
|
|
239
|
+
Cada proyecto recuerda dónde está su carpeta (`project.json`, junto a su registro); un proyecto abierto por última vez con una MADRE anterior aparece cuando se vuelve a abrir.
|
|
240
|
+
|
|
241
|
+
**El proyecto del Coordinador.** `madre salas` abre un proyecto que vive en una carpeta de MADRE (`~/.pulse/salas`, creada la primera vez): la puerta de entrada cuando no estás en ningún proyecto, y también lo que abre `madre` a secas desde tu carpeta personal. Es un proyecto como los demás —su conversación, su memoria, sus modos— y en Inicio va primero, con su marca. Su barra lleva la tecla **Mapa de proyectos**. Nunca entrega notas por una conexión, y es el único que puede recibir permiso para dar órdenes a otro (la hoja de firma lo pide con el nombre de ese proyecto).
|
|
242
|
+
|
|
243
|
+
**El Coordinador**, el guardián de tus proyectos, vive en su propio proyecto: ahí viven también lo que sabe de todos (contratos, censo y notas de los proyectos conectados). En su ficha de MÓDULOS eliges qué agente listo habla por él (`@madre` por defecto si Ollama está listo) y su modo de órdenes. Con `@madre`, el Coordinador solo responde: no propone órdenes ni conexiones. Con cualquier otro agente, si le pides actuar o conectar, cierra su respuesta con un bloque `pulse-salas`: el motivo, hasta 4 órdenes `@sala/agente #modo: tarea` y hasta 2 conexiones `enlace A → B: tipos; 7 días; órdenes #1`. El proyecto lo convierte en una tarjeta con una fila por orden y por conexión. Si una pregunta necesita un proyecto sin conexión, el Coordinador propone la conexión por su cuenta.
|
|
244
|
+
|
|
245
|
+
| Modo (ficha del Coordinador) | `#0`–`#1` | `#2` | `#3`–`#4` | Conexiones |
|
|
246
|
+
|---|---|---|---|---|
|
|
247
|
+
| **Manual** (por defecto) | Espera **Enviar** | Espera **Enviar** | Llega a su proyecto como propuesta | Ver abajo |
|
|
248
|
+
| **Híbrido** | Sale sola dentro del contrato | Espera **Enviar** | Llega a su proyecto como propuesta | Ver abajo |
|
|
249
|
+
| **Automático** | Sale sola dentro del contrato | Sale sola dentro del contrato | Llega a su proyecto como propuesta | Ver abajo |
|
|
250
|
+
|
|
251
|
+
| Regla | Dónde se cumple |
|
|
252
|
+
|---|---|
|
|
253
|
+
| Solo el Coordinador ordena, y solo en respuesta a un mensaje que escribiste en su proyecto; nunca en respuesta a una pregunta traída de otro proyecto | El módulo, en el proyecto del Coordinador |
|
|
254
|
+
| Una conexión que solo lee, sin órdenes, la firma el Coordinador al proponerla, por 7 días como máximo; la fila dice «Firmado por el Coordinador» y trae **Revocar**. En la ficha, «Conexiones de lectura: you» te las deja todas a ti. Una conexión con órdenes, que deja editar, la firmas siempre tú: **Firmar** en su fila, con el nombre del proyecto que recibiría órdenes. Firmada, las órdenes del plan que la esperaban se liberan | El contrato (`src/enlaces.mjs`) y la misma firma que la hoja de Inicio |
|
|
255
|
+
| Una orden llega hasta el modo que firmó el contrato y nunca pasa de `#2`. `#3` y `#4` llegan a su proyecto como tarjeta **Desbloquear y enviar**, que la escribe en la caja; al enviarla, el proyecto pide la llave de siempre. Inicio la muestra como «te espera» | El proyecto que recibe |
|
|
256
|
+
| Una orden a la vez por proyecto; nunca interrumpe a un proyecto que está trabajando; tope de órdenes por hora del contrato, contado aparte de las lecturas | El proyecto que recibe |
|
|
257
|
+
| Lo que sale solo, sale una vez: si no puede, queda retenido con su motivo y espera tu botón. Una orden que falla o un DETENER TODO en el proyecto del Coordinador detienen el envío automático del plan | El módulo, en el proyecto del Coordinador |
|
|
258
|
+
| El proyecto ordenado responde en su conversación («del Coordinador · orden n de m») y no puede armar un plan ni dar órdenes. Una orden en curso se detiene desde su fila | El núcleo: la orden corre a profundidad 1 y sin plan |
|
|
259
|
+
| La respuesta vuelve a la conversación del plan como tarjeta (≤ 1200 caracteres, empieza con el proyecto y el agente) y no arranca ningún turno; una línea cierra el plan | El proyecto del Coordinador |
|
|
260
|
+
| Una orden o una pregunta traída por el Coordinador no es palabra tuya: no entra al dataset de entrenamiento | `src/dataset.mjs` |
|
|
261
|
+
|
|
262
|
+
**Levantar al Coordinador desde cualquier proyecto:** `/bishop ¿qué decidió gumball sobre los pagos?`. Si el proyecto del Coordinador duerme, lo despierta; la pregunta corre allí, con lo que el Coordinador sabe de los proyectos conectados, y la respuesta vuelve al proyecto donde preguntaste como una tarjeta **solo para ti**: los agentes de ese proyecto no la leen, porque leer otro proyecto es lo que hace una conexión.
|
|
263
|
+
|
|
264
|
+
| Ruta | Qué | Quién |
|
|
265
|
+
|---|---|---|
|
|
266
|
+
| `POST /api/x/bishop/send` · `skip` · `propose` · `stop` · `link` | Enviar, saltar, llevar una propuesta a su proyecto, detener una orden en curso, firmar una conexión propuesta; el servidor actúa sobre lo que registró, nunca sobre lo que dice la página | La página del proyecto del Coordinador |
|
|
267
|
+
| `POST /api/x/bishop/order` · `proposal` · `halt` | Una orden, una propuesta `#3`/`#4` o un alto que llegan al proyecto al que van; el proyecto revisa llave, contrato, origen, modo, agente, ocupación y tope | El proyecto del Coordinador, con la llave del canal |
|
|
268
|
+
| `POST /api/x/bishop/result` · `consult` | La respuesta a una orden, y una pregunta de `/bishop` | El proyecto que obedeció o que preguntó, con la llave |
|
|
269
|
+
| `POST /api/x/bishop/answer` | La respuesta a `/bishop`, como `bishop.answer` | El proyecto del Coordinador, con la llave |
|
|
195
270
|
|
|
196
|
-
|
|
271
|
+
Los planes viven en `bishop-plans.json` junto al registro del proyecto del Coordinador (los últimos 40) y cada orden recibida se cuenta en `enlaces.jsonl` del proyecto que la recibió.
|
|
197
272
|
|
|
198
273
|
---
|
|
199
274
|
|
|
200
275
|
## LO QUE SALE DE LA MÁQUINA
|
|
201
276
|
|
|
202
|
-
- **Nada por sí solo.** MADRE no tiene nube, cuenta ni backend. No guarda credenciales.
|
|
277
|
+
- **Nada por sí solo.** MADRE no tiene nube, cuenta ni backend. No guarda credenciales de proveedores.
|
|
203
278
|
- **Lo que un agente lee, viaja a su proveedor.** Codex a OpenAI, Claude Code a Anthropic, Gemini CLI a Google, OpenCode a quien tenga configurado. Si `OPENAI_BASE_URL` o `ANTHROPIC_BASE_URL` cambia ese destino, MADRE enseña solo el hostname y bloquea el turno antes de armar el briefing; un gateway verificado se autoriza por agente con `PULSE_ALLOW_CUSTOM_AGENT_ENDPOINTS`. Aplican la cuenta, los límites y los términos del destino efectivo. `@madre` y el archivista con Ollama no salen de la máquina.
|
|
204
279
|
- **Dos envíos propios, ambos bajo tu interruptor.** El sentinel, apagado por defecto, envía reportes redactados al colector del proyecto. El canal de liberación, encendido por defecto, pregunta a npm por la última versión: viaja el nombre del paquete, nada más, la misma petición que hace `npx`. `PULSE_UPDATE_CHECK=0` lo apaga.
|
|
205
|
-
- **Escritura.** En `#1` nadie escribe. En `#2` solo se añade: lo que existía se restaura al terminar el turno. En `#3` todo el proyecto salvo las zonas prohibidas, con
|
|
206
|
-
- **Memoria.** Todo lo dicho fuera de
|
|
280
|
+
- **Escritura.** En `#1` nadie escribe. En `#2` solo se añade: lo que existía se restaura al terminar el turno. En `#3` todo el proyecto salvo las zonas prohibidas, con punto de restauración y `DESHACER`. En un proyecto sin git, MADRE guarda sus fotografías en un repositorio sombra fuera del proyecto. Un comando que pide un agente lo corres tú, con punto de restauración antes y `DESHACER` después.
|
|
281
|
+
- **Memoria.** Todo lo dicho fuera de INCÓGNITO queda en `~/.pulse/rooms/<sala>/` y vuelve a los prompts de todos los agentes de ese proyecto. INCÓGNITO es la salida para lo que no debe recordarse; PRIVACY, para los nombres que nunca deben aparecer.
|
|
207
282
|
|
|
208
283
|
---
|
|
209
284
|
|
|
210
285
|
## REFERENCIA
|
|
211
286
|
|
|
212
|
-
**`~/.pulse/config.json`**, o `PULSE_HOME/config.json`. Lo escribe
|
|
287
|
+
**`~/.pulse/config.json`**, o `PULSE_HOME/config.json`. Lo escribe Diagnóstico; las variables de entorno mandan al siguiente arranque.
|
|
213
288
|
|
|
214
289
|
```json
|
|
215
290
|
{
|
|
@@ -227,23 +302,24 @@ Cada módulo es un archivo. Los tuyos van en `~/.pulse/modules/` (todas las sala
|
|
|
227
302
|
|
|
228
303
|
| Variable | Predeterminado | Efecto |
|
|
229
304
|
|---|---|---|
|
|
230
|
-
| `PULSE_HOME` | `~/.pulse` | Raíz de
|
|
305
|
+
| `PULSE_HOME` | `~/.pulse` | Raíz de los proyectos y del config |
|
|
231
306
|
| `PULSE_LANGUAGE` | del config, si no `es` | `es` o `en`; manda sobre el config y sobre lo que el navegador recuerde |
|
|
232
307
|
| `PULSE_SOFT_TOKEN_BUDGET` | `500000` | Presupuesto local de tokens por agente, ventana rodante de 5 h |
|
|
233
308
|
| `PULSE_CONTEXT_MAX_CHARS` | `16000` | Ventana de transcript inyectada |
|
|
234
309
|
| `PULSE_RECALL_SHARE` | `0.3` | Parte de la ventana para la memoria recordada (`0` la apaga) |
|
|
235
310
|
| `PULSE_DISTILL` · `_EVERY` · `_IDLE_MS` · `_MAX_CHARS` · `_AGENT` · `_MODEL` | `1` · `10` · `600000` · `6000` · — · — | Destilación de notas |
|
|
236
|
-
| `PULSE_EMBED` · `PULSE_EMBED_PROVIDER` | `1` · `auto` |
|
|
311
|
+
| `PULSE_EMBED` · `PULSE_EMBED_PROVIDER` | `1` · `auto` | Búsqueda inteligente; `ollama`, `gemini`, `auto` |
|
|
237
312
|
| `PULSE_OLLAMA` · `_HOST` · `_MODEL` · `_EMBED_MODEL` | `1` · `http://127.0.0.1:11434` · el mejor · el mejor | Ollama |
|
|
238
313
|
| `PULSE_MEMORY_TOOLS` | `1` | Servidor MCP `pulse-memory` en cada turno |
|
|
239
|
-
| `PULSE_PRIVATE_TERMS` · `PULSE_PRIVATE_MARKER` | — · `[ENTIDAD-ORG]` |
|
|
314
|
+
| `PULSE_PRIVATE_TERMS` · `PULSE_PRIVATE_MARKER` | — · `[ENTIDAD-ORG]` | Datos ocultos extra y su marcador |
|
|
240
315
|
| `PULSE_UPDATE_CHECK` | `1` | `0` apaga la consulta diaria a npm |
|
|
316
|
+
| `PULSE_GH` | `1` | `0` hace que el módulo GitHub ignore la sesión de `gh` y entre solo con el token que pegaste |
|
|
241
317
|
| `PULSE_REPORT_URL` · `PULSE_AUTO_REPORT` | colector del proyecto · `0` | Sentinel |
|
|
242
318
|
| `PULSE_AGENT_TIMEOUT_MS` · `PULSE_<AGENTE>_TIMEOUT_MS` | `180000` · — | Timeouts |
|
|
243
319
|
| `PULSE_ALLOW_CUSTOM_AGENT_ENDPOINTS` | — | Lista separada por comas (`codex`, `claude`) de gateways que el humano verificó y permite; sin ella, una dirección base no oficial se bloquea |
|
|
244
320
|
| `PULSE_MAX_MESSAGE_CHARS` | `20000` | Tamaño máximo de un mensaje |
|
|
245
|
-
| `PULSE_DELEGATION` · `PULSE_MAX_PLAN_STEPS` | `1` · `4` |
|
|
246
|
-
| `PULSE_ESCALATION_MS` | `180000` | Cronómetro de la
|
|
321
|
+
| `PULSE_DELEGATION` · `PULSE_MAX_PLAN_STEPS` | `1` · `4` | Planes |
|
|
322
|
+
| `PULSE_ESCALATION_MS` | `180000` | Cronómetro de la solicitud de permiso |
|
|
247
323
|
| `PULSE_OPENCODE_MODEL` | del config | `proveedor/modelo` para OpenCode |
|
|
248
324
|
| `PULSE_CLAUDE_USAGE` · `PULSE_OFFICIAL_QUOTA` | `0` · `1` | Cuota oficial de Claude (lee el llavero); `0` apaga todas las lecturas de proveedor |
|
|
249
325
|
| `PULSE_GEMINI_IDLE_MS` · `PULSE_GEMINI_RETRIES` · `PULSE_GEMINI_FALLBACK_MODEL` | `90000` · `1` · `gemini-2.5-flash` | Gemini bajo carga |
|
package/docs/SDK.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MADRE SDK · escribe tus propios módulos
|
|
2
2
|
|
|
3
|
-
Un módulo de MADRE es **un archivo**. Sin build, sin dependencias, sin registrarse en ningún lado. Lo copias a una carpeta,
|
|
3
|
+
Un módulo de MADRE es **un archivo**. Sin build, sin dependencias, sin registrarse en ningún lado. Lo copias a una carpeta, recargas los módulos desde «Crea tu módulo» en MÓDULOS y aparece en el tablero con su interruptor. Puedes escribirlo a mano o pedírselo a una IA con este documento como contexto.
|
|
4
4
|
|
|
5
5
|
## Dónde vive
|
|
6
6
|
|
|
@@ -72,13 +72,13 @@ la suite compara esta tabla contra el código, así que si alguna vez se separan
|
|
|
72
72
|
| `toggle(ctx, payload)` | Sustituye el interruptor por defecto; `confirm: 'texto'` pide confirmación antes de encender |
|
|
73
73
|
| `onToggle(ctx, enabled)` | Reacciona al interruptor |
|
|
74
74
|
| `slash` | Comandos `/nombre` que corren en el servidor con tu `ctx` y devuelven `{ ok, title, text }`. La sala los muestra como tarjeta y los agentes los leen |
|
|
75
|
-
| `toolsForTurn(ctx, turn)` | Servidores MCP para el turno de un agente: `[{ name, command, args, env, tools, sends, brief }]`. MADRE los adjunta a la CLI en su corrida aislada y describe `brief` al agente |
|
|
75
|
+
| `toolsForTurn(ctx, turn)` | Servidores MCP para el turno de un agente: `[{ name, command, args, env, tools, sends, brief }]`. MADRE los adjunta a la CLI en su corrida aislada y describe `brief` al agente. `turn` trae el agente, el modo, el arriendo, la carpeta, el puerto y `turn.turn`: el id de la respuesta que ese turno escribirá. Si tu servidor llama de vuelta a la sala en nombre del turno, manda ese id; `ctx.room.runningTurn(id)` dice si sigue corriendo y para qué agente |
|
|
76
76
|
| `toolsForTurn` → `sends` | Cuáles de tus herramientas **mandan algo fuera**. El núcleo las retira por debajo de `#4` AIRLOCK: ni se le cuenta al modelo que existen. Ver abajo |
|
|
77
77
|
| `reaches` | A dónde llega tu módulo, en las mismas cuatro respuestas que da MADRE de las suyas. Ver abajo |
|
|
78
78
|
| `secrets` | Las llaves que necesitas, declaradas en vez de dibujadas: `[{ name, label, note, where }]`. MADRE pinta el campo, la guarda en su bodega bajo tu id y te la devuelve por `ctx.vault`. Ver abajo |
|
|
79
|
-
| `routes` | Rutas HTTP propias: `{ method, path, handler(ctx, { payload, params, url }) }` → `{ status, body }` |
|
|
80
|
-
| `onEvent(ctx, event)` | Cada evento del ledger |
|
|
81
|
-
| `controls` | Los ajustes de tu módulo, declarados en vez de dibujados: `[{ key, label, type: 'select' \| 'switch' \| 'text', options, note, invert }]`. MADRE los pinta en la ficha y los guarda en tu bloque de `config.json` |
|
|
79
|
+
| `routes` | Rutas HTTP propias: `{ method, path, handler(ctx, { payload, params, url, request, viaPhone }) }` → `{ status, body }`. `viaPhone` es `true` cuando la petición llega desde un teléfono emparejado: niégalo tú si tu ruta es de la Mac |
|
|
80
|
+
| `onEvent(ctx, event)` | Cada evento del ledger de cada conversación viva de la sala, mientras tu módulo está encendido. `ctx.room` y `ctx.chat` son los de esa conversación y `ctx.record` escribe en ella. Corre aparte: lo que tarde o falle no detiene a la sala. Como siempre, un módulo no fabrica mensajes ni turnos |
|
|
81
|
+
| `controls` | Los ajustes de tu módulo, declarados en vez de dibujados: `[{ key, label, type: 'select' \| 'switch' \| 'text', options, choices, note, invert }]`. MADRE los pinta en la ficha y los guarda en tu bloque de `config.json`. En un `select`, `choices: [{ value, label }]` dice qué frase lee la persona por cada valor que se guarda (si lo das, `options` sale de ahí); sin él, la persona lee el valor tal cual |
|
|
82
82
|
| `onSettings(ctx, settings)` | Te avisa cuando la humana cambió uno de tus `controls`, por si algo vivo tiene que enterarse |
|
|
83
83
|
| `conditions` | Entradas para el catálogo de MU/TH/UR, con remedio por plataforma |
|
|
84
84
|
| `kind` | `'builtin'` (por defecto) cambia cómo se comporta MADRE y vive en `config.json`; `'installer'` escribe en el proyecto con un comando que la humana confirma antes de que corra |
|
|
@@ -235,18 +235,22 @@ Y en la cabecera de MODULES hay **+ ADD A MODULE** para instalar el `.mjs` de al
|
|
|
235
235
|
|
|
236
236
|
## La ficha
|
|
237
237
|
|
|
238
|
-
|
|
238
|
+
No dibujas nada: declaras, y MADRE arma tu módulo igual que los suyos. En MÓDULOS cada módulo es una tarjeta del tablero y, al tocarla, una ficha con los mismos bloques que AJUSTES. Por eso el tuyo se lee igual que los que trae MADRE.
|
|
239
239
|
|
|
240
|
-
|
|
240
|
+
**La tarjeta del tablero** lleva un ícono, tu `name`, una línea con tu `summary` y su interruptor si es un módulo que se enciende. Un módulo tuyo lleva la etiqueta «Tuyo».
|
|
241
|
+
|
|
242
|
+
**La ficha**, en este orden:
|
|
243
|
+
|
|
244
|
+
| Bloque | Qué muestra | De dónde sale |
|
|
241
245
|
|---|---|---|
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
245
|
-
|
|
|
246
|
-
|
|
|
247
|
-
|
|
|
246
|
+
| Qué hace | tu frase, el interruptor «Activo» con lo que dice tu módulo de sí mismo, y la versión con «Buscar una nueva» | `summary`, `status(ctx).status.detail`, `vendor`, `version` o `tracks` |
|
|
247
|
+
| Ajustes | una fila por control: su nombre a la izquierda, el selector, interruptor o campo a la derecha; se guarda al cambiarlo | `controls` |
|
|
248
|
+
| Llaves | un campo por secreto, lo que hay guardado (nombre y largo, nunca el valor) y la opción de olvidarla | `secrets` |
|
|
249
|
+
| Lo que toca | cada cosa que escribe o necesita, con su etiqueta | `creates`, `requires` |
|
|
250
|
+
| Comandos | lo que agrega a la caja de texto | `commands` o `slash` |
|
|
251
|
+
| Tuyo | traer un archivo más nuevo y quitarlo | el archivo que instalaste, `updates` |
|
|
248
252
|
|
|
249
|
-
|
|
253
|
+
Un módulo que se instala en el proyecto en vez de encenderse conserva su tarjeta de instalación, con el comando a la vista antes de correr nada, dentro del bloque «Qué hace». Las cifras al inicio de la ficha y la ventana propia son de los módulos de MADRE que guardan una lectura (Ash, Intenciones, Ollama); no hace falta declarar nada para ellas.
|
|
250
254
|
|
|
251
255
|
## El `ctx`
|
|
252
256
|
|
|
@@ -276,11 +280,11 @@ ctx = {
|
|
|
276
280
|
|
|
277
281
|
Escribe `/module <lo que debe hacer>` en el compositor. Es la entrada explícita al flujo guiado: si `#2 CREATE` no está activo, MADRE te pide elegirlo y conserva intacta tu petición. Con `#2` activo, mantiene el agente que elegiste y le entrega el contrato del SDK y el ejemplo. El agente debe escribir **un solo archivo** llamado `<id>.module.mjs` en su carpeta de borrador; no puede instalarlo por su cuenta.
|
|
278
282
|
|
|
279
|
-
MADRE reconoce ese nombre y pone una tarjeta en la sala: `INSTALL FOR EVERY ROOM` o `INSTALL FOR THIS PROJECT`. Léelo, decide, un clic. MADRE lo valida en una copia, lo guarda como `<id>.mjs` en la carpeta que elegiste y aparece en
|
|
283
|
+
MADRE reconoce ese nombre y pone una tarjeta en la sala: `INSTALL FOR EVERY ROOM` o `INSTALL FOR THIS PROJECT`. Léelo, decide, un clic. MADRE lo valida en una copia, lo guarda como `<id>.mjs` en la carpeta que elegiste y aparece en MÓDULOS con la etiqueta «Tuyo». También puedes pedir lo mismo en lenguaje natural mientras estés en `#2` o más; `/module` hace explícito el formato y no concede permisos por sí solo.
|
|
280
284
|
|
|
281
285
|
Los agentes nunca escriben en `~/.pulse/modules` ni en `.madre/modules`: proponen, tú instalas.
|
|
282
286
|
|
|
283
|
-
Un módulo tuyo lleva
|
|
287
|
+
Un módulo tuyo lleva la etiqueta «Tuyo» y se quita desde su ficha con «Quitar» —también desde «Crea tu módulo», en la lista de los tuyos—. MADRE confirma el archivo exacto, borra ese archivo y su registro de origen para actualizaciones, y lo retira de la sala sin reiniciarla. No borra archivos que el módulo haya creado ni sus ajustes guardados. Los módulos que vienen con MADRE no muestran ese botón: no se quitan, se apagan.
|
|
284
288
|
|
|
285
289
|
## Lo que un módulo no puede tocar
|
|
286
290
|
|
|
@@ -290,13 +294,13 @@ Un módulo corre dentro del proceso de MADRE con tus permisos: instala solo lo q
|
|
|
290
294
|
- No puede usar el `id` de un módulo integrado ni de otro ya cargado.
|
|
291
295
|
- `record()` rechaza los tipos de evento reservados (`message.*`, `agent.*`); no puede fabricar turnos ni mensajes.
|
|
292
296
|
- No recibe credenciales de nadie; usa, como MADRE, las sesiones que ya viven en la máquina.
|
|
293
|
-
- Un error en `toolsForTurn` entrega nada; en un comando, la tarjeta dice el error; al cargar,
|
|
297
|
+
- Un error en `toolsForTurn` entrega nada; en un comando, la tarjeta dice el error; al cargar, el tablero avisa cuántos no cargaron y «Crea tu módulo» dice qué archivo y por qué. Nada de eso detiene la sala.
|
|
294
298
|
|
|
295
299
|
## Probarlo
|
|
296
300
|
|
|
297
301
|
1. Copia el archivo a `~/.pulse/modules/`.
|
|
298
|
-
2. En la sala,
|
|
302
|
+
2. En la sala, MÓDULOS → «Crea tu módulo» → «Recargar módulos». Si el archivo tiene un error, ahí mismo lo dice con la línea exacta.
|
|
299
303
|
3. Enciéndelo con su interruptor. Escribe `/tu-comando` en el compositor.
|
|
300
|
-
4. Cambia el archivo y vuelve a
|
|
304
|
+
4. Cambia el archivo y vuelve a recargar: no hace falta reiniciar la sala.
|
|
301
305
|
|
|
302
306
|
Con una IA: pásale este documento y `hello-module.mjs`, describe lo que quieres y pídele un solo archivo `.mjs` con `export default { … }`. Lo demás lo hace MADRE.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jossuealcala/madre",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "MADRE · one local room where the AI coding agents already on your machine (Codex, Claude Code, Gemini CLI, OpenCode) work on your project together, share one memory you can see and explore, and answer to you. Read-only by default, with per-message permission modes and checkpoints you can undo. Nothing leaves your machine on its own.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|