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 carpeta fonts/ 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_DIR mueve 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.] con endpoint, model y api-key (vacía: la clave guardada en el llavero del sistema con «IA: guardar una clave de API en el llavero…»). Se ofrecen en el menú de proveedor junto a AiloOS y el servidor local.
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-key vacía → AILOOS_API_KEY.
  • ai.custom-api-key vacía → GRAPHOOS_AI_API_KEY.
  • [ai.providers.<name>] con api-key vacía → la clave que guarda IA: guardar una clave de API en el llavero… (el llavero del sistema, no el fichero).
  • ai.offline = true no contacta nunca con AiloOS en la nube; solo contesta el servidor local (ai.local-endpoint, por defecto http://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