Gestión de Sitios Astro — Conocimiento del Agente
Capacidades
Puedes gestionar un sitio estático Astro mediante estas operaciones:
- Crear, editar y eliminar entradas de blog (markdown/MDX en colecciones de contenido)
- Importar documentos (.docx, .pdf) y convertirlos a markdown
- Subir y organizar imágenes en
src/assets/ - Editar componentes (.astro), layouts y páginas
- Editar archivos MDX con componentes interactivos
- Modificar estilos globales y de ámbito de componente
- Enviar cambios a Git para el despliegue automatizado en Cloudflare Workers (o ejecutar
npx wrangler deploy) - Ejecutar comandos npm (build, dev, add packages)
Colecciones de Contenido
Las colecciones de contenido usan src/content/ con un esquema definido en src/content/config.ts.
Entradas de Blog
Ubicación: src/content/blog/*.md o *.mdx
Frontmatter requerido:
---
title: "Título de la Entrada"
description: "Descripción SEO"
pubDate: 2024-01-15
---
Campos opcionales: updatedDate, heroImage, draft, tags
Crear una Entrada
- Escribe el archivo markdown con frontmatter en
src/content/blog/<slug>.md - Coloca las imágenes en
src/assets/<slug>/ - Referencia las imágenes:
 - Git add, commit, push para desplegar
Consultar Colecciones
En páginas .astro:
---
import { getCollection } from "astro:content";
const posts = await getCollection("blog");
const sorted = posts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
---
Patrones de Componentes
Componente .astro Básico
---
const { title, class: className } = Astro.props;
---
<section class:list={["section", className]}>
<h2>{title}</h2>
<slot />
</section>
<style>
.section { padding: 2rem; }
</style>
Patrón de Layout
---
import BaseHead from "../components/BaseHead.astro";
import Header from "../components/Header.astro";
import Footer from "../components/Footer.astro";
const { title, description } = Astro.props;
---
<html lang="es">
<head><BaseHead title={title} description={description} /></head>
<body>
<Header />
<main><slot /></main>
<Footer />
</body>
</html>
Rutas Dinámicas
Archivo: src/pages/blog/[...slug].astro
---
import { getCollection } from "astro:content";
export async function getStaticPaths() {
const posts = await getCollection("blog");
return posts.map((post) => ({ params: { slug: post.slug }, props: post }));
}
const post = Astro.props;
const { Content } = await post.render();
---
<Content />
Reglas de Seguridad
- NUNCA borrar el directorio
.git - NUNCA borrar
node_modules/opackage-lock.jsona menos que se reinstale - NUNCA hacer push forzado (
git push --force) - NUNCA hacer push a ramas distintas a la rama de despliegue configurada
- NO modificar
astro.config.mjsowrangler.tomlsin una solicitud explícita del usuario - NUNCA ejecutar
rm -rfen la raíz del proyecto - Preguntar confirmación antes de borrar cualquier archivo de componente o página
Tareas Comunes
Añadir una entrada de blog
write_filepara crearsrc/content/blog/<slug>.mdcon frontmatter + contenidogit_operationsstatus → add → commit → push
Importar un documento
convert_documentcon la ruta del archivo subidoread_fileel markdown generado para revisarlo- Editar el frontmatter si es necesario con
write_file git_operationsadd → commit → push
Editar un componente
read_fileel componente para entender el código actualwrite_filecon el componente actualizadogit_operationsadd → commit → push
Cambiar el estilo del sitio
read_fileel archivo CSS relevante o el componentewrite_filecon los estilos actualizadosgit_operationsadd → commit → push
Subir una imagen
- Guardar la imagen en
src/assets/<carpeta>/usandowrite_fileorun_command - Referencia en markdown:
 - O en .astro:
import img from "~/assets/<carpeta>/image.jpg"

