MemoryLake
Volver a todos los artículos
Tutorial20 de septiembre de 2026·11 min de lectura

Cómo dividir los archivos steering de Kiro para que el IDE y la CLI obtengan los correctos (Guía 2026)

Escribiste un archivo steering, le asignaste inclusion: fileMatch y viste cómo se comportaba perfectamente en el IDE de Kiro: cargándose cuando tocas un componente y manteniéndose al margen cuando no lo haces. Luego abriste el mismo repositorio en la CLI de Kiro y el mismo archivo apareció en cada una de las tareas. Nada se rompió, nada te advirtió, y el archivo que delimitaste con tanto cuidado ahora compite por la atención en un trabajo con el que no tiene nada que ver.

Eso no es un error y no es tu YAML. La propia documentación de steering de Kiro lo establece directamente: "On Kiro CLI, inclusion modes are not currently supported. All steering files in the .kiro/steering/ directory are loaded automatically." El front matter que escribiste sigue siendo válido. Simplemente no es el factor decisivo en esa superficie.

Kiro ejecuta un agente en el IDE, la CLI, la aplicación web, el móvil y Kiro Crew, y la documentación es inusualmente honesta sobre qué capacidades se trasladan y cuáles no. Esta guía convierte esa honestidad en una estructura de archivos: qué colocar en el directorio que todo carga, qué restringir detrás de los modos de inclusión y a qué hacer referencia manualmente, para que el mismo repositorio se comporte de manera sensata sin importar dónde lo abras.

Por qué el mismo archivo steering se comporta de manera diferente en cada superficie

La página de steering de Kiro comienza con una tabla de capacidades, y las filas representan todo el diseño. "Workspace steering (.kiro/steering/)" está disponible en el IDE, la CLI, la Web y el Móvil. "Global steering (~/.kiro/steering/)" está disponible en el IDE y la CLI, y marcado como no disponible para Web y Móvil. "Cloud steering managed in Web settings" es solo para Web. "Generate foundation files via UI" es solo para el IDE. "Inclusion modes (always, fileMatch, manual)" está marcado como disponible en los cuatro.

Esa última fila es donde comienza la confusión, porque la nota informativa más abajo en la página la limita: los modos de inclusión no son compatibles actualmente en la CLI, donde todo lo que está en el directorio se carga automáticamente. Por lo tanto, el modelo mental correcto no es "mis reglas me siguen a todas partes". Es más bien: los archivos te siguen, pero la restricción no.

El directorio global tiene su propio límite, escrito con el mismo tono. "On Web, 'Global steering' refers to your local ~/.kiro/steering/ directory, which the cloud sandbox cannot read." La ruta documentada es Configuration Sync: "To reuse personal steering across cloud sessions, upload it through Configuration Sync; the cloud copy then applies to every cloud session."

Hay un cuarto caso que atrapa a quienes han comenzado a construir sus propios agentes. La documentación dice: "When using custom agents, steering files are not automatically included. You must explicitly add them to the agent's resources configuration to load steering context." Un glob como file://.kiro/steering/**/*.md en los resources del agente es lo que los trae de vuelta.

Y un nombre de archivo en particular se excluye por completo de las restricciones. Kiro admite el estándar AGENTS.md, con una advertencia indicada en la página: "AGENTS.md files do not support inclusion modes and are always included." Si mantienes un archivo compartido entre herramientas en la raíz del repositorio, es un archivo siempre activo por definición, sin importar lo disciplinado que hayas sido con el front matter en otros lugares.

Qué intenta la gente en su lugar

Eliminar el front matter y empezar de nuevo. El instinto cuando un archivo condicional se comporta mal es asumir que el YAML es incorrecto. A menudo no lo es. La documentación advierte que "The inclusion configuration must be the first content in the file - no blank lines or content before it", lo cual vale la pena verificar una vez; pero si el archivo funciona en el IDE y no en la CLI, el front matter está bien y la superficie es la variable.

Mover todo a los tres archivos de base (foundation files). product.md, tech.md y structure.md son reales y útiles, y la documentación dice: "These foundation files are included in every interaction by default, forming the baseline of Kiro's project understanding." El modo de fallo es tratar eso como un permiso para consolidar: todo lo que integres se vuelve siempre activo en todas partes, que es exactamente el resultado que intentabas evitar.

Poner preferencias personales en el directorio global y asumir que se trasladan. Se trasladan al IDE y a la CLI. Está documentado que el sandbox en la nube no puede leer ese directorio, por lo que las preferencias dejan de aplicarse silenciosamente en las sesiones web, y nada lo anuncia.

Recortar el directorio hasta que la CLI se comporte bien. Esto funciona, en el sentido de que se cargan menos archivos. También despoja al IDE de la guía condicional que lo hacía bueno. Terminas optimizando una superficie degradando otra.

Asumir que este es el mismo problema que los modos de activación de reglas en otros lugares. Parece similar, pero el fallo es de diferente naturaleza. Cuando una herramienta admite modos de activación en todas partes y una regla aún no se activa, la pregunta es qué modo elegiste, que es el tema tratado en how to choose Windsurf rule trigger modes. Aquí el modo es correcto y la superficie lo ignora.

La solución: Clasificar el steering por lo que cada superficie debe cargar y restringir el resto

Paso 1: Dividir el directorio en un nivel siempre activo y un nivel restringido

Toma todo lo que esté en .kiro/steering/ y clasifícalo en dos montones según una pregunta: ¿sería aceptable que esto se cargara en cada tarea, en cada superficie, para siempre?

El montón del "sí" es tu nivel siempre activo: los archivos de base más cualquier cosa genuinamente universal. Las propias descripciones de Kiro son un buen filtro: product.md "Defines your product's purpose, target users, key features, and business objectives," tech.md "Documents your chosen frameworks, libraries, development tools, and technical constraints," y structure.md "Outlines file organization, naming conventions, import patterns, and architectural decisions." Mantén este nivel deliberadamente pequeño, porque en la CLI es el único nivel que existe.

El montón del "no" es tu nivel restringido: convenciones específicas de frameworks, procedimientos de migración, guías de resolución de problemas, cualquier cosa larga. Estos reciben front matter, y aceptas que en la CLI se cargarán de todos modos, que es el punto de evitar que el montón crezca sin límite.

Sigue los consejos de nomenclatura mientras estás en ello. La documentación sugiere nombres que indiquen el alcance, como api-rest-conventions.md, testing-unit-patterns.md y components-form-validation.md, con "One domain per file." Los nombres importan más de lo habitual aquí, porque en las superficies donde todo se carga, el nombre del archivo es la única señal sobre para qué sirve un archivo.

Paso 2: Elegir el modo de inclusión que coincida con cómo debe llegar el archivo

Se documentan cuatro modos, y no son intercambiables.

inclusion: always es el predeterminado y no necesita front matter para comportarse de esa manera. inclusion: fileMatch toma un fileMatchPattern, que acepta un único glob como components/**/*.tsx o un array como ["**/*.ts", "**/*.tsx", "**/tsconfig.*.json"]. inclusion: manual hace que los archivos estén "disponibles bajo demanda al hacerles referencia con #steering-file-name en tus mensajes de chat", y la documentación señala que "Manual steering files also appear as slash commands - type / in chat to see and select them." inclusion: auto requiere dos campos: name ("Identifier for the steering file. Used for display and matching") y description ("When to include this file. Kiro matches this against your requests"), y el archivo se incorpora "when your request matches the description."

Vale la pena seguir los casos de uso documentados en lugar de reinventarlos. Manual es "Best for: Specialized workflows, troubleshooting guides, migration procedures, or context-heavy documentation that's only needed occasionally." Auto es "Best for: Context-heavy guidance that should only load when relevant - like specialized domain knowledge, complex workflows, or detailed reference material that would overwhelm always-on steering."

Un mecanismo más pertenece aquí. En lugar de pegar una especificación en un archivo steering, haz referencia al archivo en vivo con #[[file:<relative_file_name>]]; la documentación ofrece #[[file:api/openapi.yaml]], #[[file:components/ui/button.tsx]] y #[[file:.env.example]] como ejemplos. Un puntero se mantiene actualizado; un pegado comienza a desactualizarse el día que lo escribes. El mismo razonamiento se aplica a delimitar las instrucciones por ruta en lugar de por prosa, como en how to scope Amp instructions to files.

Paso 3: Colocar cada archivo por superficie, luego verificar en la superficie que realmente usas

Ahora decide dónde reside físicamente cada archivo, utilizando la tabla de capacidades en lugar del hábito.

Los estándares del repositorio van en .kiro/steering/ y se confirman (commit). Las preferencias personales van en ~/.kiro/steering/, y la regla de conflicto está documentada: "In case of conflicting instructions between global and workspace steering, Kiro will prioritize the workspace steering instructions." Para las sesiones en la nube, carga el steering personal desde Settings y Sync en Kiro Web, luego crea o edita la copia en la nube en Settings y Steering.

Los equipos también tienen una ruta documentada: "The global steering feature can be used to define centralized steering files that apply to entire teams. Team steering files can be pushed to user's PCs via MDM solutions or Group Policies, or downloaded by users to their PCs from a central repository, and placed into the ~/.kiro/steering folder."

Luego verifica donde importa. Abre la superficie en la que pasas la mayor parte del día y ejecuta una tarea que no debería activar un archivo restringido, y una que sí debería. En la CLI, espera que llegue todo lo que está en el directorio del espacio de trabajo; esa expectativa es la verificación. Si usas agentes personalizados, confirma que el glob de resources esté presente, porque sin él, el contexto de steering no se cargará en absoluto para ese agente.

Configuración de esto en MemoryLake

Los archivos steering son el resumen permanente: convenciones, stack, estructura. No se adaptan bien a la otra mitad del conocimiento del proyecto: qué decidiste, cuándo y por qué rechazaste la alternativa. Esa mitad debe poder recuperarse bajo demanda en lugar de cargarse en cada tarea, y no debería cambiar de forma dependiendo de si abriste el IDE o la terminal. Un almacén en el que escribes entradas de MemoryLake a propósito mantiene ese registro en un solo lugar. Tú mismo escribes las entradas, con tus propias palabras. No se lee, escribe ni elimina nada de tus directorios de Kiro.

Paso 1: Crear una clave API

Inicia sesión y genera una clave API desde la configuración de tu espacio de trabajo. Esta es la credencial que usan tus agentes e integraciones, así que créala antes de comenzar a mover cualquier cosa.

La consola de MemoryLake mostrando la pantalla de claves API, donde se crea y copia una nueva clave para su uso en un agente
La consola de MemoryLake mostrando la pantalla de claves API, donde se crea y copia una nueva clave para su uso en un agente

Paso 2: Subir tus primeros recuerdos

Comienza con las decisiones que tus archivos steering implican pero nunca declaran: por qué el stack es el que es, qué enfoque rechazaste y por qué motivos, qué restricción existe por una razón que nadie recuerda. Escribe cada una como una nota breve e independiente para que pueda recuperarse por sí sola.

El espacio de trabajo de MemoryLake con los primeros documentos subidos, enumerando cada archivo a medida que se convierte en memoria de búsqueda
El espacio de trabajo de MemoryLake con los primeros documentos subidos, enumerando cada archivo a medida que se convierte en memoria de búsqueda

Paso 3: Conectar tu IA y agentes

Conecta los asistentes y agentes que utilizas. El registro te seguirá a través de superficies y herramientas, en lugar de depender de qué directorio puede leer una sesión determinada.

La pantalla de integraciones de MemoryLake que enumera los clientes de IA y los frameworks de agentes que se pueden conectar a la capa de memoria
La pantalla de integraciones de MemoryLake que enumera los clientes de IA y los frameworks de agentes que se pueden conectar a la capa de memoria

Qué cambia esto en la práctica

Tu nivel siempre activo se convierte en un presupuesto en lugar de una carpeta. Una vez que aceptas que una superficie lo carga todo, el tamaño de ese directorio es una decisión que tomas a propósito en lugar de algo que se acumula. Ese presupuesto interactúa directamente con cuánto espacio queda más adelante en una sesión larga, que es el mismo compromiso analizado en what survives Kiro compaction.

Las revisiones obtienen un segundo canal. En Kiro Web, los comentarios en las solicitudes de extracción (pull requests) se convierten en steering: comenta con pautas como "always use our standard error handling" y "the agent learns and applies those patterns to future work across all your repositories." Hay un límite importante establecido junto a esto: "Only your feedback (the user who created the task) influences the agent's learnings. Other reviewers' comments don't affect what the agent learns." El comentario de un revisor senior en la tarea de otra persona no le está enseñando nada al agente.

Los archivos compartidos entre herramientas dejan de ser una victoria gratuita. Un AGENTS.md en la raíz es conveniente y siempre se incluye, lo que significa que pertenece a tu presupuesto siempre activo en lugar de estar fuera de él. Si mantienes un archivo en varios agentes, el contrato de carga de cada herramienta difiere, y el archivo compartido es tan útil como el lector menos restringido del mismo.

Moverse entre herramientas se vuelve más fácil de planificar. Cuando la restricción reside en el front matter en lugar de en una interfaz de usuario específica de la herramienta, puedes ver de un vistazo qué necesitaría expresarse de otra manera en otro lugar, que es la parte práctica de how to migrate from Kiro to Claude Code.

Buenas prácticas para el steering que cruza superficies

Escribe la suposición de la superficie dentro del archivo. Una línea en la parte superior de un archivo restringido que diga "expected to load only for src/components" no cuesta nada y le dice a la siguiente persona qué verificar cuando aparezca en otro lugar.

Mantén el nivel siempre activo bajo revisión programada. Es el nivel que cuesta algo en cada tarea en cada superficie, y es el que crece por accidente.

Prefiere las referencias de archivos al contenido pegado. Un puntero #[[file:...]] a una especificación en vivo no puede quedar obsoleto de la forma en que lo hace un extracto copiado.

Asigna a los archivos de inclusión automática descripciones que parezcan activadores, no resúmenes. El trabajo documentado del campo es "When to include this file", por lo que una descripción redactada como una condición ("Use when creating or modifying API endpoints") hace más trabajo que una etiqueta de tema. Los archivos de contexto compartido se comportan de la misma manera en otras herramientas, como en how Cursor Projects share context files.

Audita lo que realmente está disponible en lugar de lo que recuerdas haber escrito. Una lista de directorios no es lo mismo que una lista de carga, y la brecha entre ambas es el mismo problema descrito en how to find Zed skills missing from your catalog.

Conclusión

Kiro te ofrece cuatro modos de inclusión, dos directorios y un agente en cinco superficies, y documenta claramente dónde se aplican las restricciones y dónde no. La CLI carga todo en el directorio del espacio de trabajo. El sandbox en la nube no puede leer tu directorio global. Los agentes personalizados no cargan ningún steering a menos que lo indiques en resources. Un AGENTS.md en la raíz siempre se incluye.

Clasifica tus archivos en un nivel siempre activo que aceptarías en todas partes y un nivel restringido que mantengas deliberadamente pequeño, coloca las preferencias personales donde la superficie que usas realmente pueda leerlas y verifica en esa superficie en lugar de en aquella donde funcionó primero. Luego, mantén las decisiones detrás de esas convenciones en algún lugar recuperable, para que el razonamiento sobreviva la próxima vez que cambie la estructura de archivos.

Preguntas frecuentes

¿Por qué mis modos de inclusión de steering de Kiro funcionan en el IDE pero no en la CLI?

Porque la CLI aún no los aplica. La documentación establece: "On Kiro CLI, inclusion modes are not currently supported. All steering files in the .kiro/steering/ directory are loaded automatically." Tu front matter sigue siendo válido; simplemente no es el factor decisivo allí.

¿A dónde van los archivos steering de Kiro y cuál tiene prioridad?

El steering del espacio de trabajo reside en .kiro/steering/ en la raíz de tu proyecto, y el steering global en ~/.kiro/steering/. Cuando no coinciden, el comportamiento documentado es que "Kiro will prioritize the workspace steering instructions."

¿Por qué mi steering global no se aplica en Kiro Web?

La documentación dice que en la Web, el steering global "refers to your local ~/.kiro/steering/ directory, which the cloud sandbox cannot read." La ruta documentada es cargarlo a través de Configuration Sync, después de lo cual "the cloud copy then applies to every cloud session."

¿Cuáles son los cuatro modos de inclusión de steering de Kiro?

always (el predeterminado, y el comportamiento cuando no hay front matter), fileMatch con un glob o array de globs fileMatchPattern, manual para archivos que incorporas con #steering-file-name o un comando de barra diagonal, y auto, que requiere name y description y se incluye "when your request matches the description."

¿Se cargan los archivos steering para los agentes personalizados de Kiro?

No automáticamente. La documentación establece: "When using custom agents, steering files are not automatically included. You must explicitly add them to the agent's resources configuration to load steering context." Un glob como file://.kiro/steering/**/*.md cubre todo el directorio.

¿Cómo interactúa AGENTS.md con el steering de Kiro?

Kiro admite el estándar, con una diferencia declarada: "AGENTS.md files do not support inclusion modes and are always included." Trata un AGENTS.md en la raíz como parte de tu presupuesto siempre activo en lugar de como contenido restringido.

Lecturas relacionadas