Cómo escribir system prompts efectivos en Markdown para APIs de chatbots de IA y para archivos de configuración como CLAUDE.md, AGENTS.md o .cursorrules.
Un system prompt es una instrucción especial que define el comportamiento de un chatbot de IA o un agente antes de que el usuario empiece a interactuar con él. A diferencia de un mensaje normal, el system prompt se aplica de forma persistente a toda la conversación, lo que lo convierte en la pieza clave para construir asistentes especializados, agentes autónomos y configuraciones reutilizables.
Esta guía está enfocada en quien va a escribir system prompts de verdad, no en consejos generales de formato. Si lo que buscas son fundamentos de Markdown en prompts, mira Markdown en prompts. Si quieres técnicas avanzadas con nombre propio, salta a prompt engineering.
En las APIs de los modelos de lenguaje, cada mensaje tiene un rol. Los tres principales son:
system: define el comportamiento, la personalidad y las restricciones del asistente. Se procesa con mayor peso que los mensajes del usuario y persiste durante toda la conversación.user: contiene la pregunta o instrucción puntual del usuario.assistant: contiene las respuestas que el modelo ha dado previamente en la conversación.Esta jerarquía tiene una consecuencia práctica: las instrucciones del system prompt tienen prioridad sobre las del usuario. Si en el system prompt indicas "responde siempre en español" y el usuario te pide "respond in English", el modelo seguirá respondiendo en español. Por eso el system prompt es donde se ponen las reglas innegociables.
En las APIs de OpenAI, Anthropic, Google y prácticamente cualquier proveedor moderno, el system prompt es uno de los mensajes del array messages. Este es un ejemplo simplificado con la API de OpenAI:
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{
"role": "system",
"content": """Eres un asistente especializado en
revisión de código Python. Sigue estas reglas:
- Responde siempre en español.
- Identifica problemas de rendimiento, seguridad y estilo.
- Para cada problema, indica severidad (Alta/Media/Baja) y propón solución.
- No reescribas todo el código, solo sugiere cambios concretos."""
},
{
"role": "user",
"content": "Revisa esta función: def f(x): return x*2 if x else 0"
}
]
)En la API de Anthropic la diferencia principal es que el system prompt va en un campo aparte (system) en lugar de mezclarse con messages, lo que refuerza la idea de que es algo distinto de los turnos de la conversación.
Un system prompt bien construido suele organizarse con encabezados Markdown que el modelo interpreta como secciones lógicas. La estructura más extendida es:
# Rol
Eres un revisor de código senior con 10 años de experiencia
en aplicaciones web seguras.
# Objetivo
Ayudar al equipo a detectar problemas antes de hacer merge:
seguridad, rendimiento, mantenibilidad.
# Reglas
- Responde siempre en español.
- Cada hallazgo lleva severidad (Alta/Media/Baja).
- Para problemas de seguridad, cita el OWASP top 10 cuando aplique.
# Formato de respuesta
Para cada revisión, genera un bloque con:
- **Resumen** (1 línea)
- **Hallazgos** (lista de problemas)
- **Sugerencias** (lista de cambios concretos)
# Lo que NO debes hacer
- No reescribas todo el código.
- No asumas el stack si no se especifica.
- No respondas a peticiones que estén fuera del ámbito técnico.Esta estructura no es obligatoria, pero los modelos suelen rendir mejor con system prompts que separan claramente rol, reglas y formato esperado. Lo importante es que cada bloque tenga un propósito distinto y no se repita información entre secciones.
En el último año se ha consolidado un patrón muy útil: usar archivos Markdown como system prompt persistente para herramientas de IA. La idea es que el archivo viva en el repositorio del proyecto y la herramienta lo cargue automáticamente en cada sesión. Los archivos más usados son:
CLAUDE.md: archivo de configuración de Claude Code, la herramienta CLI de Anthropic. Se coloca en la raíz del proyecto y define convenciones, comandos habituales, advertencias y cualquier instrucción que el agente deba conocer al arrancar.AGENTS.md: convención emergente para herramientas de agentes (Cursor Composer, Cline, Continue, etc.). El contenido sigue patrones similares a CLAUDE.md pero con el objetivo de ser portable entre herramientas..cursorrules: archivo en texto plano con sintaxis Markdown utilizado por el editor Cursor para personalizar el comportamiento del asistente integrado.Modelfile de Ollama: archivo de configuración para ejecutar modelos locales con un system prompt fijo. Aunque tiene su propia sintaxis, el campo SYSTEM admite Markdown completo.gpts.md o instrucciones de Custom GPTs: campo de texto en la interfaz de OpenAI para definir GPTs personalizados, que acepta Markdown.Estos archivos son, en esencia, system prompts en disco. La diferencia con los system prompts por API es que el archivo se versiona con el código y todo el equipo trabaja con el mismo agente.
Después de leer y escribir cientos de system prompts (incluido el CLAUDE.md de este propio sitio), los patrones que más diferencia marcan son:
system, úsalo. El modelo lo procesa con más peso que un mensaje normal.No siempre hace falta un system prompt elaborado. Estas son las situaciones típicas:
CLAUDE.md que va a usar todo un equipo.Para extender lo aprendido aquí con técnicas concretas, consulta la guía de prompt engineering, donde verás patrones como few-shot, chain-of-thought o role prompting que se integran de forma natural en cualquier system prompt.
Un buen system prompt es la diferencia entre un asistente genérico y uno que parece hecho a medida para tu caso de uso. La clave no está en escribir mucho, sino en escribir lo justo: rol claro, reglas medibles, formato esperado y unos cuantos ejemplos. A partir de ahí, iterar sobre los fallos reales del modelo es lo que más rendimiento aporta.
Esperamos que esta guía te haya resultado útil. Si te interesa entender por qué Markdown ayuda al modelo, mira Markdown en prompts, y si quieres dar el siguiente salto, la guía de prompt engineering cubre las técnicas con nombre propio que se apoyan en lo aprendido aquí.
Esto ha sido todo.
👋 Hola! Soy Edu, me encanta crear cosas y he redactado este tutorial. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirlo en Twitter.
Sígueme en Twitter para estar al día con mi contenido. 😊