Ajustes
GraphoOS se configura en settings.toml (ábrelo con Abrir el fichero de ajustes, o usa la
página de ajustes: Abrir los ajustes, que tiene buscador). Cada clave de abajo va en su
[sección]; el valor que se muestra es el de por defecto. Es TOML, no JSON: los comentarios
van con #, las cadenas entre comillas, y una clave que falta es el valor por defecto.
Dónde viven los ajustes
- Los tuyos, en la carpeta de configuración: Abrir el fichero de ajustes. Ese es el
fichero de esta máquina. Al lado viven
keymaps.toml(Abrir los atajos de teclado),snippets/(Abrir los fragmentos de usuario), los temas de color que importas, y una carpetafonts/para caras que este editor debe cargar sin instalarlas en el sistema. - Los de este proyecto, en
.graphoos/settings.toml: Abrir los ajustes del proyecto, que crea el fichero si no está. Mandan sobre los tuyos mientras la carpeta está abierta, están pensados para ir en el repositorio, y editar el fichero los aplica en el acto, sin volver a abrir la ventana.
La paleta abre siempre el fichero correcto. Si hace falta la ruta (* es el canal
de esta build):
- macOS:
~/Library/Application Support/dev.graphoos.GraphoOS*/settings.toml - Linux:
~/.config/graphoos*/settings.toml - Windows:
%APPDATA%\graphoos\GraphoOS*\settings.toml GRAPHOOS_DATA_DIRmueve el perfil entero (ajustes, plugins, cachés, registros) a esa carpeta.
El fichero por defecto empieza con #:schema ../extra/schemas/settings.json. Ese JSON Schema
se genera con esta página. Pon la misma directiva apuntando a una copia del esquema para que
el editor que abre settings.toml compruebe las claves al escribir.
Un ejemplo que sirve
Un fichero de proyecto solo necesita las claves en las que este repositorio no está de acuerdo con los valores por defecto. Las claves de API no van en nada que se suba: usa el entorno o el llavero (véase Claves).
#:schema extra/schemas/settings.json
[editor]
font-size = 13
tab-width = 4
format-on-save = true
rulers = [100]
files-exclude = "**/{.git,node_modules,target,dist,.venv}"
[editor.formatters]
rust = "rustfmt --edition 2024"
python = "black -q -"
javascript = "prettier --stdin-filepath {file}"
[terminal]
font-size = 13
[terminal.env]
EDITOR = "graphoos --wait"
[ui]
language = "es"
density = "Compact"
[ai]
offline = false
chat-provider = "local"
inline-completion-provider = "local"
Si vienes de VS Code
Importar los ajustes de VS Code lee tu settings.json y el .vscode/settings.json de este
proyecto (con comentarios y comas finales) y escribe las claves que aquí
significan lo mismo: letra, ancho del tabulador, reglas, ajuste de línea, formato al
guardar, migas de pan, guías de sangría, cabeceras fijas, pistas en línea, autoguardado y
la letra de la terminal. Lo demás se lista por su nombre en vez de adivinarlo, para que
nada llegue convertido en algo que no es. Lo que ya había en tu fichero se conserva.
El teclado de VS Code
Importar los atajos de VS Code lee su keybindings.json y añade a tu fichero de
atajos los que tienen aquí un comando, conservando lo que ya hay: cmd pasa a ser meta,
los acordes siguen siendo acordes (cmd+k cmd+s), se conserva el when de cada uno, y
cada comando sin equivalente se nombra en el mensaje en vez de desaparecer en silencio: un
atajo que calladamente no hace nada es peor que uno que falta.
Un tema de VS Code
Importar un tema de color de VS Code toma el .json del tema abierto en el editor
—uno de una extensión, o el que VS Code escribe con Generate Color Theme From Current
Settings— y lo escribe como tema nuestro en la carpeta de temas, pasando los colors y
los ámbitos TextMate de tokenColors a las claves de aquí. Después aparece en
Cambiar el tema de color. Lo que no tiene equivalente se cuenta, no se adivina.
Generado por scripts/gen_docs.py desde el código del editor; edita eso, no este fichero.
[core] — Núcleo
Edición modal, temas y la ventana.
| Clave | Por defecto | Qué hace |
|---|---|---|
modal |
false |
Activar la edición modal (como Vim) |
color-theme |
"GraphoOS Dark" |
Tema de color de GraphoOS |
color-theme-follow-system |
false |
Sigue el aspecto claro u oscuro del sistema, con los dos temas de debajo |
color-theme-dark |
"GraphoOS Dark" |
El tema de color mientras el sistema está oscuro, si se sigue |
color-theme-light |
"GraphoOS Light" |
El tema de color mientras el sistema está claro, si se sigue |
icon-theme |
"GraphoOS Colors" |
Tema de iconos de GraphoOS |
custom-titlebar |
true |
Usar una barra de título propia en lugar de la del sistema (Linux, BSD, Windows) |
file-explorer-double-click |
false |
Abrir ficheros en el explorador solo con doble clic |
auto-reload-plugin |
false |
Recargar el plugin automáticamente cuando cambia su configuración. |
welcome-at-start |
true |
Mostrar la bienvenida cuando se abre una ventana vacía |
projects-folder |
"~/Projects" |
Dónde crea «Nuevo proyecto…» un proyecto cuando solo se escribe el nombre |
share-anonymous-usage |
false |
Compartir cifras de uso anónimas: una vez por semana sube en uno un contador de la semana, el sistema y la versión. Nada que te identifique a ti ni a esta máquina. Apagado salvo que lo enciendas. |
[editor] — Editor
Letra, ajuste de línea, autocompletado, formato, blame y más.
| Clave | Por defecto | Qué hace |
|---|---|---|
font-family |
"JetBrains Mono NL, monospace" |
Letra del editor |
font-size |
13 |
Tamaño de letra del editor |
code-glance-font-size |
2 |
Altura en píxeles de cada línea del minimapa (el mapa del fichero a la derecha) |
minimap |
true |
Mostrar el minimapa: el fichero entero en pequeño a la derecha, con los cambios de git y las coincidencias de la búsqueda, para hacer clic o arrastrar |
minimap-width |
90 |
Anchura del minimapa, en píxeles |
auto-closing-tags |
true |
En HTML, XML, JSX y similares, escribir la etiqueta de cierre al abrir una, y completar </ con la etiqueta abierta |
color-swatches |
true |
Dibujar una barra de su propio color bajo cada color escrito en el fichero (#1e1e2e, rgb(…)) |
line-height |
1.5 |
Altura de línea del editor. Si es menor que 5.0, es un múltiplo del tamaño de letra. |
smart-tab |
true |
Al pulsar Tab se inserta la sangría detectada en tus ficheros. |
tab-width |
4 |
Anchura del tabulador |
show-tab |
true |
Mostrar los editores abiertos en pestañas |
show-bread-crumbs |
true |
Mostrar la ruta de navegación del fichero |
scroll-beyond-last-line |
true |
Permitir desplazarse más allá de la última línea |
cursor-surrounding-lines |
1 |
Mínimo de líneas visibles encima y debajo del cursor |
wrap-style |
"editor-width" |
Cómo ajustar las líneas largas |
column-selection |
false |
Arrastrar con el ratón selecciona una columna (una caja), como Mayús+Alt+arrastrar |
wrap-column |
80 |
Número de columnas a las que ajustar |
wrap-width |
600 |
Número de píxeles a los que ajustar |
sticky-header |
true |
Mostrar arriba el contexto del código (funciones, clases) al desplazarse |
completion-width |
600 |
Anchura en píxeles del completado |
completion-show-documentation |
true |
Mostrar la documentación del elemento del completado |
completion-item-show-detail |
false |
Usar el campo detail del elemento del completado en lugar de su etiqueta |
show-signature |
true |
Mostrar la firma de la función mientras se escriben los parámetros |
signature-label-code-block |
true |
Mostrar la firma como bloque de código. Puede no quedar bien con servidores de lenguaje que dan código no válido en sus etiquetas. |
auto-closing-matching-pairs |
true |
Cerrar automáticamente las parejas (paréntesis, comillas…) |
auto-surround |
true |
Rodear el texto seleccionado al escribir comillas o corchetes |
hover-delay |
300 |
Tiempo (en ms) antes de que aparezca la información flotante |
modal-mode-relative-line-numbers |
true |
Números de línea relativos en modo modal (salvo en inserción) |
format-on-save |
false |
Formatear el documento al guardar (si hay un formateador) |
normalize-line-endings |
true |
Convertir automáticamente los saltos de línea al fin de línea actual |
formatters |
Formateadores externos por lenguaje (rust, javascript, python...). El orden se ejecuta en el proyecto con el documento por la entrada estándar y debe imprimir el documento formateado por la salida estándar; {file} se sustituye por la ruta del fichero. Si un lenguaje tiene uno, se usa en lugar del servidor de lenguaje para formatear el documento y al guardar. |
|
highlight-matching-brackets |
true |
Resaltar la pareja del corchete |
highlight-selection-occurrences |
true |
Resaltar los otros sitios donde aparece el texto seleccionado |
occurrences-highlight |
true |
Si se resaltan los demás sitios donde aparece el símbolo bajo el cursor, según los encuentra el servidor de lenguaje |
linked-editing |
false |
Cambia la otra mitad de un par mientras se escribe en una (la etiqueta de cierre de HTML), donde el servidor de lenguaje conoce los pares |
highlight-scope-lines |
false |
Resaltar las líneas del ámbito |
enable-inlay-hints |
true |
Mostrar las pistas en línea |
inlay-hint-font-family |
"" |
Letra de las pistas en línea. Vacía: la del editor. |
inlay-hint-font-size |
0 |
Tamaño de las pistas en línea. Si es menor que 5 o mayor que el del editor, se usa el del editor. |
enable-error-lens |
true |
Mostrar los diagnósticos en la propia línea |
enable-git-blame |
true |
Mostrar al final de la línea quién la cambió por última vez, cuándo y el resumen del commit (git blame) |
local-history |
true |
Historial local: guardar una copia de cada fichero cada vez que se guarda, para ver y restaurar versiones anteriores («Historial local» en la paleta) |
only-render-error-styling |
true |
Mostrar solo el estilo, sin los mensajes, cuando están activados los errores en línea |
error-lens-end-of-line |
true |
Si los errores en línea llegan hasta el final de la línea visible o solo hasta el final del diagnóstico |
error-lens-multiline |
false |
Si los errores en línea pueden ocupar varias líneas. Si no, se quitan los saltos de línea. |
error-lens-font-family |
"" |
Letra de los errores en línea. Vacía: la de las pistas en línea. |
error-lens-font-size |
0 |
Tamaño de los errores en línea. 0: el de las pistas en línea. |
enable-completion-lens |
false |
Mostrar el elemento del completado como texto fantasma |
enable-inline-completion |
true |
Mostrar sugerencias en línea |
completion-lens-font-family |
"" |
Letra de la vista del completado. Vacía: la de las pistas en línea. |
completion-lens-font-size |
0 |
Tamaño de la vista del completado. 0: el de las pistas en línea. |
blink-interval |
500 |
Intervalo de parpadeo del cursor (en milisegundos); 0 lo desactiva. |
smooth-caret |
true |
El cursor se desliza hasta donde va en vez de saltar (no con «reducir movimiento» del sistema) |
smooth-scrolling |
true |
Los saltos en el fichero (a una línea, una página) se recorren en vez de cortar (no con «reducir movimiento» del sistema) |
multicursor-case-sensitive |
true |
Si la selección con varios cursores distingue mayúsculas. |
multicursor-whole-words |
true |
Si la selección con varios cursores solo coge palabras enteras. |
render-whitespace |
"none" |
Cómo muestra el editor los espacios. Opciones: none (ninguno), all (todos), boundary (en los bordes), trailing (al final). |
show-indent-guide |
true |
Mostrar las guías de sangría. |
rulers |
[] |
Columnas donde dibujar una guía vertical, p. ej. [80, 100]; vacío = ninguna |
scroll-speed-modifier |
1.0 |
Cuánto desplaza un giro de la rueda del ratón, como multiplicador |
autosave-interval |
0 |
Retardo del guardado automático (en milisegundos); 0 lo desactiva |
format-on-autosave |
true |
Formatear el documento en el guardado automático (requiere «Formatear al guardar») |
atomic-soft-tabs |
false |
El cursor trata la sangría con espacios como si fueran tabuladores. |
double-click |
"single" |
Usar doble clic en el explorador. Opciones: single (por defecto), file o all. |
move-focus-while-search |
true |
Mover el foco mientras se escribe en la búsqueda global |
diff-context-lines |
3 |
Líneas visibles por defecto encima y debajo de cada bloque de diferencias (-1: todas) |
bracket-pair-colorization |
false |
Colorear los corchetes |
bracket-colorization-limit |
30000 |
Límite del coloreado de corchetes |
files-exclude |
"**/{.git,.svn,.hg,CVS,.DS_Store,Thumbs.db}" |
Patrones glob de ficheros y carpetas que se excluyen (en el explorador) |
[terminal] — Terminal
La terminal integrada y sus perfiles.
| Clave | Por defecto | Qué hace |
|---|---|---|
font-family |
"" |
Letra del terminal. Vacía: la del editor. |
font-size |
0 |
Tamaño de letra del terminal. 0: el del editor. |
line-height |
0 |
Altura de línea del terminal. 0: la del editor |
scrollback |
10000 |
Líneas que se guardan por encima de la pantalla para volver a ellas (como mucho 100000) |
shell-integration |
true |
Que la shell cuente al editor sus comandos (dónde empieza cada uno, cómo acabó, en qué carpeta está) sin tocar los ficheros de tu shell |
copy-on-selection |
false |
Copiar lo que se selecciona en la terminal en cuanto se selecciona |
sticky-scroll |
true |
Mantener en la primera línea de la terminal el comando cuya salida está en pantalla cuando su prompt ya no se ve |
restore-sessions |
true |
Volver a abrir las terminales de la sesión anterior, cada una en su carpeta, con su nombre, color e icono y sus últimas líneas |
suggestions |
true |
Sugerir, en gris tras el cursor, el resto de un comando ya ejecutado que empieza como lo escrito; → lo acepta |
letter-spacing |
0 |
Píxeles que se añaden entre las letras de la terminal (puede ser negativo) |
cursor-blinking |
false |
Hace parpadear el cursor de la terminal mientras tiene el foco, al ritmo del parpadeo del editor |
font-ligatures |
false |
Deja que la fuente una letras en ligaduras en la terminal (=>, !=, ->), si las tiene |
[ui] — Interfaz
Letra y tamaños de la interfaz, los paneles y las pestañas.
| Clave | Por defecto | Qué hace |
|---|---|---|
scale |
+1.0 |
Escala de la interfaz. Por defecto 1.0 |
font-family |
"" |
Letra de la interfaz. Vacía: la del sistema. |
font-size |
13 |
Tamaño de letra base de la interfaz |
icon-size |
0 |
Tamaño de los iconos de la interfaz |
header-height |
36 |
Altura de las cabeceras de panel y de pestañas |
status-height |
25 |
Altura de la barra de estado |
tab-min-width |
100 |
Anchura mínima de las pestañas |
tab-separator-height |
"Content" |
Si el separador de pestañas ocupa toda la altura o solo la del contenido |
scroll-width |
10 |
Anchura de la barra de desplazamiento |
drop-shadow-width |
0 |
Anchura de la sombra en la interfaz |
palette-width |
500 |
Anchura de la paleta de comandos |
hover-font-family |
"" |
Letra de la información flotante. Vacía: la de la interfaz |
hover-font-size |
0 |
Tamaño de la información flotante. 0: el de la interfaz |
trim-search-results-whitespace |
true |
Recortar los espacios de los resultados de búsqueda |
list-line-height |
25 |
Altura de línea de los elementos de las listas |
tab-close-button |
"Right" |
Posición del botón de cerrar en las pestañas |
open-editors-visible |
true |
Mostrar la sección de editores abiertos en el explorador |
density |
"Comfortable" |
Cuánto espacio deja la interfaz: Comfortable (cómoda) o Compact (compacta, para ver más) |
explorer-auto-reveal |
true |
Selecciona el fichero activo en el explorador al cambiar de pestaña, abriendo las carpetas donde está |
explorer-indent-guides |
true |
Dibuja una línea guía por nivel en el árbol del explorador |
explorer-compact-folders |
true |
Mostrar como una sola fila del explorador las carpetas que solo contienen una carpeta (src/main/java) |
language |
"system" |
Idioma de la interfaz: system (el del sistema), en o es |
[ai] — IA
Proveedores de AiloOS, el asistente, el agente y el texto fantasma.
| Clave | Por defecto | Qué hace |
|---|---|---|
ailoos-endpoint |
"https://api.ailoos.com/api/andromeda/v1" |
Dirección de AiloOS en la nube: la base de su API compatible con OpenAI (AndromedaLM está en https://api.ailoos.com/api/andromeda/v1) |
ailoos-api-key |
"" |
Clave de API de AiloOS, enviada como token Bearer. Vacía para usar la variable de entorno AILOOS_API_KEY, o si la dirección no necesita ninguna. |
local-endpoint |
"http://127.0.0.1:8080/v1" |
Dirección local: la base de una API compatible con OpenAI en esta máquina, como ailoos serve con EmpoorioLM (http://127.0.0.1:8080/v1) |
ailoos-model |
"andromedaLM-1b-v1" |
Modelo por defecto con el proveedor AiloOS en la nube |
local-model |
"" |
Modelo por defecto con el proveedor local (vacío: el primero que ofrece el servidor) |
max-tokens |
1024 |
Tokens máximos que puede generar el asistente en cada respuesta |
temperature |
0.7 |
Temperatura de muestreo (0 = determinista, 1 = creativa) |
context-chars |
12000 |
Caracteres del fichero actual que se envían como contexto con cada mensaje (0 lo desactiva) |
rules-chars |
16000 |
Caracteres de las reglas del proyecto (AGENTS.md, .graphoos/rules.md, .graphoos/rules/*.md) y de la memoria del proyecto (.graphoos/memory.md) que se envían con cada mensaje (0 las desactiva) |
offline |
false |
Sin conexión: no contactar nunca con AiloOS en la nube. Solo contesta el servidor local (chat, lista de modelos y agente). |
session-token-limit |
0 |
Tokens (pregunta + respuesta, todos los proveedores) que el asistente puede usar en una sesión del editor; 0 = sin límite. Al llegar, se rechazan las peticiones nuevas hasta que se pulsa el contador del panel para ponerlo a cero. |
ailoos-usd-per-million-input |
0.0 |
USD por millón de tokens de pregunta que cobra AiloOS, para mostrar el coste de la sesión (0 mientras la API sea gratuita) |
ailoos-usd-per-million-output |
0.0 |
USD por millón de tokens de respuesta que cobra AiloOS, para mostrar el coste de la sesión (0 mientras la API sea gratuita) |
inline-completion |
true |
Sugerencias de la IA: proponer código en el cursor cuando ningún servidor de lenguaje ofrece una sugerencia en línea (Tab la acepta) |
inline-completion-provider |
"ailoos" |
Proveedor de las sugerencias: local (EmpoorioLM con ailoos serve, continuación nativa), ailoos (AndromedaLM en la nube, por la API de chat) o custom (el proveedor extra) |
inline-completion-model |
"" |
Modelo de las sugerencias; vacío = el modelo por defecto del proveedor |
inline-completion-delay-ms |
400 |
Milisegundos de espera tras la última tecla antes de pedir una sugerencia |
inline-completion-max-tokens |
48 |
Tokens máximos de una sugerencia |
inline-completion-context-chars |
3000 |
Caracteres antes del cursor que se envían al pedir una sugerencia (y un tercio de esa cantidad después) |
custom-name |
"Custom" |
Un proveedor extra compatible con OpenAI para desarrollo (DeepSeek, OpenRouter, Groq, …): su nombre en el menú de proveedores |
custom-endpoint |
"" |
Dirección base del proveedor extra, terminada en /v1 (p. ej. https://api.deepseek.com/v1); vacía = sin proveedor extra |
custom-api-key |
"" |
Clave de API del proveedor extra (o la variable de entorno GRAPHOOS_AI_API_KEY) |
custom-model |
"" |
Modelo por defecto del proveedor extra |
agent-backend |
"graphoos" |
Quién actúa en el modo agente: graphoos (el agente que trae el editor, con el modelo elegido), claude, codex o gemini (el que esté instalado en esta máquina, con su propia cuenta) o andromeda (el CLI de Ailoos); las mismas tarjetas y diferencias para todos |
auto-context |
true |
Contexto automático: adjuntar a cada mensaje los sitios del proyecto que encuentra el índice (sin necesidad de @) |
auto-context-chunks |
3 |
Cuántos sitios adjunta el índice a cada mensaje |
index-embeddings |
true |
Índice semántico del proyecto con EmpoorioLM local (ailoos serve, /v1/embeddings); desactivado = solo búsqueda léxica |
providers |
Más proveedores compatibles con OpenAI, por nombre, como [ai.providers. |
|
agent-provider |
"" |
Proveedor del agente: vacío = el que usa el chat; ailoos, local, custom o el nombre de uno de [ai.providers] |
chat-provider |
"" |
Proveedor con el que empieza el chat en cada ventana: vacío o ailoos = AiloOS, local, o el nombre de uno de [ai.providers] (lo pone «Elige tu asistente») |
agent-model |
"" |
Modelo del agente; vacío = el modelo por defecto de su proveedor |
[editor.formatters]
Formateadores externos por id de lenguaje: una orden que lee el fichero por la entrada
estándar y escribe el texto formateado por la salida ({file} en la orden se sustituye
por la ruta). Los usan Formatear el documento y el formato al guardar cuando el
servidor de lenguaje no tiene formateador. Si un lenguaje tiene una entrada aquí, se usa
en lugar del servidor de lenguaje.
[editor.formatters]
rust = "rustfmt --edition 2024"
python = "black -q -"
go = "gofmt"
javascript = "prettier --stdin-filepath {file}"
[terminal.profiles] y [terminal.env]
Shells con nombre para el panel de la terminal. [terminal.default-profile] elige uno por
sistema (macos, linux, windows). Cada perfil puede fijar command, arguments,
environment y workdir.
[terminal.default-profile]
macos = "default"
linux = "default"
windows = "default"
[terminal.profiles]
default = {}
[terminal.profiles.cargo]
command = "cargo"
arguments = ["run"]
workdir = "/home/user"
environment = { KEY = "VALUE" }
[terminal.env] se añade a cada terminal. [terminal.env-macos],
[terminal.env-linux] y [terminal.env-windows] mandan en ese sistema, igual que
terminal.integrated.env.* de VS Code. El resto del panel está en
Terminal.
Ajustes de los plugins
Cada plugin añade su propia sección con su nombre (por ejemplo [graphoos-c]), con las
claves que declara su volt.toml; la página del plugin en el panel de plugins las edita.
Cómo escribir uno: Escribir un plugin.
El resto del proyecto
settings.toml es solo el editor. Los desarrolladores también guardan estos ficheros
junto al proyecto. El detalle está en las páginas enlazadas; esta tabla es el mapa.
| Fichero | Qué es |
|---|---|
.graphoos/settings.toml |
Ajustes del proyecto; mandan sobre los tuyos mientras la carpeta está abierta |
keymaps.toml (carpeta de configuración) |
Atajos de esta máquina. Misma forma [[keymaps]] que los de por defecto. Atajos de teclado |
.graphoos/snippets/<lang>.toml, global.toml |
Recortes del proyecto. Los del usuario viven en snippets/ de la carpeta de configuración |
.graphoos/run.toml |
Configuraciones de ejecutar y depurar ([[configs]]). Ejecutar y depurar |
.vscode/launch.json |
Se lee tal cual, junto a run.toml; incluye los compound |
AGENTS.md, .graphoos/rules.md, .graphoos/rules/*.md |
Reglas del proyecto que viajan con el asistente |
.graphoos/memory.md |
Memoria del proyecto; /remember añade una nota con fecha |
.graphoos/agent.toml |
Permisos del agente (read / write / delete / run / network / mcp = allow | ask | deny) y allow-commands |
.graphoos/mcp.toml |
Servidores MCP de este proyecto. Los del usuario: ~/.ailoos/mcp.toml |
.graphoos/mcp-server.toml |
Qué herramientas MCP del propio editor puede llamar un cliente |
.graphoos/tasks.toml |
Trabajo programado del agente ([[tasks]] con name, prompt, schedule) |
.graphoos/skills/ |
Skills en Markdown con frontmatter name / description / triggers. Las del usuario: ~/.ailoos/skills/ |
.graphoos/spec.md |
Especificación que el agente abre como /spec |
.graphoos/first-prompt.md |
Primer mensaje cuando Nuevo proyecto… abre la carpeta |
Asistente, agente, índice y MCP: Asistente e IA.
Markdown para copiar
Pégalos tal cual. El asistente los lee como instrucciones (no como datos adjuntos). Cada bloque es un fichero.
AGENTS.md — raíz del proyecto. Viaja con cada mensaje, antes de .graphoos/rules.
# Agente
- Usa las herramientas del propio proyecto (`cargo`, `npm`, `make`).
- No subas secretos, claves de API ni `.env`.
- Tras un cambio de código, ejecuta la comprobación del proyecto (`cargo test`, `npm test`, …) antes de dar la tarea por hecha.
.graphoos/rules.md — reglas extra de este editor. .graphoos/rules/*.md se concatenan detrás.
Responde en el idioma de la petición.
Diffs pequeños. No refactorices ficheros que no te hayan pedido tocar.
.graphoos/memory.md — /remember <nota> añade una línea con fecha. Edítalo libremente.
# Memoria
<!-- `/remember` escribe aquí. El asistente lee este fichero con las reglas del proyecto. -->
.graphoos/spec.md — /spec crea esta plantilla y la abre. El agente la lee antes de cada tarea.
# Especificación — {project}
<!-- El agente lee este fichero antes de tocar código y pregunta si falta algo. -->
## Objetivo
<!-- Qué problema resuelve el cambio y para quién, en dos frases. -->
## Invariantes
<!-- Lo que NUNCA puede romperse. Una línea por invariante, comprobable. -->
-
## Criterios de aceptación
<!-- Cómo se sabe que está hecho. Cada uno debería poder ser un test. -->
- [ ]
## Fuera de alcance
<!-- Lo que el agente no debe tocar aunque parezca relacionado. -->
-
## Notas
.graphoos/skills/rust-tests.md — una skill. name, description y triggers en el frontmatter; el cuerpo es el procedimiento. Copia de usuario: ~/.ailoos/skills/.
---
name: rust-tests
description: Cómo ejecutar y escribir los tests Rust de este proyecto
triggers: [test, cargo test]
---
1. `cargo test` en la raíz del proyecto.
2. Si un test falla, lee el fichero y la aserción antes de cambiar nada más.
3. No ignores un test que falla para dejar la suite en verde.
.graphoos/first-prompt.md — Nuevo proyecto… → Descríbeselo al agente escribe aquí tu descripción. El fichero es el prompt, sin más.
Haz un CLI que lea una carpeta e imprima el árbol de sus ficheros. Rust, clap, tests.
Claves, fuera del TOML
No subas claves de API en .graphoos/settings.toml.
ai.ailoos-api-keyvacía →AILOOS_API_KEY.ai.custom-api-keyvacía →GRAPHOOS_AI_API_KEY.[ai.providers.<name>]conapi-keyvacía → la clave que guarda IA: guardar una clave de API en el llavero… (el llavero del sistema, no el fichero).ai.offline = trueno contacta nunca con AiloOS en la nube; solo contesta el servidor local (ai.local-endpoint, por defectohttp://127.0.0.1:8080/v1).
El asistente borra secretos reconocibles antes de que el texto salga de la máquina. Las claves van en el entorno o en el llavero, no en un fichero del repositorio.
Véase también
Fuente: docs/es/settings.md