Un prompt. Un botón. Un sistema completamente implementado. Así es la ingeniería de IA en 2026

@0xWast3
INGLÉShace 2 días · 15 jul 2026
129K
111
15
20
263

TL;DR

Una guía completa sobre la arquitectura de aplicaciones generativas, que detalla cómo los agentes de IA ahora construyen, implementan y gestionan sistemas de software completos utilizando Claude y Obsidian.

Hace seis meses, esto requería un desarrollador backend, un ingeniero de DevOps y dos semanas. Hoy, basta con una sola frase y Claude. Aquí está la arquitectura completa, y por qué la mayoría de los desarrolladores aún no lo han descubierto.

El modelo mental que la mayoría de la gente tiene sobre la IA es incorrecto.

Piensan: Asistente de IA → tú haces preguntas → él responde.

La realidad en 2026: Agente de IA → tú describes un sistema → él construye, despliega y conecta ese sistema a tu entorno. No un prototipo. No un fragmento de código. Una aplicación en funcionamiento.

Este cambio tiene un nombre: Arquitectura de Aplicaciones Generativas. Y el stack que lo hace práctico —Claude + Obsidian + MCP— está disponible para cualquier persona en este momento.

1. Qué significa realmente la Arquitectura de Aplicaciones Generativas

Desarrollo de software tradicional:

text
1Idea → Especificación → Diseño → Desarrollo Frontend → Desarrollo Backend
2→ Configuración de Base de Datos → Integración de API → Pruebas → Despliegue
3Duración: semanas. Costo: miles.

Arquitectura de Aplicaciones Generativas:

text
1Idea → Prompt → Sistema en funcionamiento
2Duración: minutos. Costo: tokens de API.

El agente de IA no solo escribe código. Ejecuta un Ciclo de Agente completo bajo el capó:

Paso 1 - Descomposición

Tu solicitud abstracta ("construye un CRM para un lavadero de autos") se divide en decenas de subtareas atómicas: esquema de base de datos, componentes de UI, lógica de notificaciones, flujo de autenticación, endpoints de API.

Paso 2 - Mapeo del entorno vía MCP

A través del Protocolo de Contexto de Modelo, el agente entiende instantáneamente a qué herramientas tiene acceso: tu sistema de archivos, paquetes instalados, servicios en ejecución, APIs disponibles.

Paso 3 - Construcción y prueba iterativa

El agente escribe código, lo ejecuta, detecta errores de compilación, los corrige y vuelve a probar —de forma autónoma— hasta que el sistema funciona correctamente.

Paso 4 - Despliegue contextual

El resultado no es un archivo de texto con código. Es un entorno local en vivo o una aplicación web desplegable.

Esta es la diferencia entre una herramienta que asiste a desarrolladores y un sistema que reemplaza por completo el pipeline de construcción.

2. Claude como motor - tres modos de despliegue

Modo 1 - Artefactos de Claude

El camino más rápido de un prompt a una aplicación en funcionamiento. Cuando le pides a Claude que construya algo, abre una ventana de Artefacto interactiva y ensambla, compila y ejecuta una aplicación web completa en tiempo real —React, HTML, JavaScript— mientras tú observas.

Puedes interactuar con la aplicación en ejecución dentro del Artefacto, iterar sobre ella en lenguaje natural y exportar el archivo completo.

Prompt que produce un rastreador financiero listo para producción:

text
1Construye una aplicación de seguimiento financiero personal con:
2
3CARACTERÍSTICAS:
4- Registro de transacciones (agregar/editar/eliminar con categorías)
5- Vista de presupuesto mensual con barras de progreso
6- Rastreador de portafolio de criptomonedas que obtenga precios en vivo de la API de CoinGecko
7- Cálculo de patrimonio neto actualizado en tiempo real
8- Alternancia de modo oscuro
9
10REQUISITOS TÉCNICOS:
11- Aplicación React de un solo archivo
12- Solo useState + useEffect (sin gestión de estado externa)
13- Tailwind CSS para el estilo
14- Fetch de APIs públicas (sin autenticación requerida)
15- Responsive para móviles
16
17DATOS:
18- Persistir en localStorage entre sesiones
19- Exportar transacciones como CSV
20
21Salida: aplicación autónoma completa lista para desplegar.

Lo que devuelven los Artefactos de Claude —una aplicación React completa:

javascript
1import { useState, useEffect } from "react";
2
3const CATEGORIES = ["Housing","Food","Transport","Entertainment","Health","Savings","Income","Crypto","Other"];
4const CRYPTO_IDS = { BTC: "bitcoin", ETH: "ethereum", SOL: "solana" };
5
6export default function FinanceTracker() {
7 const [transactions, setTransactions] = useState(() =>
8 JSON.parse(localStorage.getItem("transactions") || "[]")
9 );
10 const [cryptoPrices, setCryptoPrices] = useState({});
11 const [form, setForm] = useState({ description:"", amount:"", category:"Other", type:"expense", date:"" });
12 const [darkMode, setDarkMode] = useState(false);
13
14 useEffect(() => {
15 const ids = Object.values(CRYPTO_IDS).join(",");
16 fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`)
17 .then(r => r.json())
18 .then(data => {
19 const prices = {};
20 Object.entries(CRYPTO_IDS).forEach(([sym, id]) => { prices[sym] = data[id]?.usd || 0; });
21 setCryptoPrices(prices);
22 });
23 }, []);
24
25 useEffect(() => {
26 localStorage.setItem("transactions", JSON.stringify(transactions));
27 }, [transactions]);
28
29 const addTransaction = () => {
30 if (!form.description || !form.amount) return;
31 setTransactions(prev => [...prev, { ...form, id: Date.now(), amount: parseFloat(form.amount),
32 date: form.date || new Date().toISOString().split("T")[0] }]);
33 setForm({ description:"", amount:"", category:"Other", type:"expense", date:"" });
34 };
35
36 const totalIncome = transactions.filter(t => t.type === "income").reduce((s,t) => s + t.amount, 0);
37 const totalExpenses = transactions.filter(t => t.type === "expense").reduce((s,t) => s + t.amount, 0);
38 const netWorth = totalIncome - totalExpenses;
39
40 const bg = darkMode ? "#0D0D0D" : "#F9F7F4";
41 const card = darkMode ? "#1A1A1A" : "#FFF";
42 const text = darkMode ? "#F0F0F0" : "#1A1A1A";
43 const border = darkMode ? "#2A2A2A" : "#E8E8E8";
44
45 return (
46 <div style={{ minHeight:"100vh", background:bg, color:text, fontFamily:"system-ui, sans-serif" }}>
47 <div style={{ maxWidth:800, margin:"0 auto", padding:"24px 16px" }}>
48
49 <div style={{ display:"flex", justifyContent:"space-between", marginBottom:24 }}>
50 <div>
51 <h1 style={{ fontSize:22, fontWeight:500, margin:0 }}>Finance Tracker</h1>
52 <p style={{ margin:"4px 0 0", fontSize:13, color: netWorth >= 0 ? "#22C55E" : "#EF4444" }}>
53 Net worth: ${netWorth.toFixed(2)}
54 </p>
55 </div>
56 <button onClick={() => setDarkMode(!darkMode)}
57 style={{ padding:"8px 14px", borderRadius:8, border:`1px solid ${border}`,
58 background:card, color:text, cursor:"pointer" }}>
59 {darkMode ? "Light" : "Dark"}
60 </button>
61 </div>
62
63 <div style={{ display:"grid", gridTemplateColumns:"1fr 1fr", gap:10, marginBottom:20 }}>
64 {[["Income","#22C55E",totalIncome],["Expenses","#EF4444",totalExpenses]].map(([label,color,val]) => (
65 <div key={label} style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:14 }}>
66 <p style={{ margin:0, fontSize:12, color:"#999" }}>{label}</p>
67 <p style={{ margin:"4px 0 0", fontSize:20, fontWeight:600, color }}>${val.toFixed(2)}</p>
68 </div>
69 ))}
70 </div>
71
72 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:16, marginBottom:20 }}>
73 <div style={{ display:"grid", gridTemplateColumns:"2fr 1fr 1fr", gap:8, marginBottom:8 }}>
74 <input placeholder="Description" value={form.description}
75 onChange={e => setForm(p => ({ ...p, description: e.target.value }))}
76 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />
77 <input type="number" placeholder="Amount" value={form.amount}
78 onChange={e => setForm(p => ({ ...p, amount: e.target.value }))}
79 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />
80 <select value={form.type} onChange={e => setForm(p => ({ ...p, type: e.target.value }))}
81 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>
82 <option value="expense">Expense</option>
83 <option value="income">Income</option>
84 </select>
85 </div>
86 <div style={{ display:"grid", gridTemplateColumns:"2fr auto", gap:8 }}>
87 <select value={form.category} onChange={e => setForm(p => ({ ...p, category: e.target.value }))}
88 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>
89 {CATEGORIES.map(c => <option key={c}>{c}</option>)}
90 </select>
91 <button onClick={addTransaction}
92 style={{ padding:"9px 20px", borderRadius:8, background:"#E8692A",
93 color:"#fff", border:"none", cursor:"pointer", fontSize:13, fontWeight:500 }}>
94 Add
95 </button>
96 </div>
97 </div>
98
99 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, overflow:"hidden" }}>
100 <p style={{ margin:0, padding:"12px 16px", borderBottom:`1px solid ${border}`, fontSize:13, fontWeight:500 }}>
101 Transactions ({transactions.length})
102 </p>
103 {transactions.slice().reverse().map(t => (
104 <div key={t.id} style={{ display:"flex", justifyContent:"space-between",
105 alignItems:"center", padding:"11px 16px", borderBottom:`1px solid ${border}` }}>
106 <div>
107 <p style={{ margin:0, fontSize:13, fontWeight:500 }}>{t.description}</p>
108 <p style={{ margin:"2px 0 0", fontSize:12, color:"#999" }}>{t.category} · {t.date}</p>
109 </div>
110 <span style={{ fontSize:14, fontWeight:600, color: t.type==="income" ? "#22C55E" : "#EF4444" }}>
111 {t.type==="income" ? "+" : "-"}${t.amount.toFixed(2)}
112 </span>
113 </div>
114 ))}
115 </div>
116 </div>
117 </div>
118 );
119}

Esta es la aplicación completa. Un solo prompt. Se ejecuta al instante dentro de los Artefactos de Claude.

Modo 2 - Claude + MCP (despliegue local)

MCP (Protocolo de Contexto de Modelo) le da a Claude acceso directo a tu entorno local. Un solo prompt no solo genera código, sino que crea carpetas en tu disco duro, instala paquetes vía terminal, escribe archivos de configuración e inicia un servidor local.

La configuración de MCP que conecta a Claude con tu sistema de archivos:

json
1{
2 "mcpServers": {
3 "filesystem": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "@modelcontextprotocol/server-filesystem",
8 "/Users/tunombre/Projects"
9 ]
10 },
11 "terminal": {
12 "command": "npx",
13 "args": ["-y", "@modelcontextprotocol/server-terminal"]
14 },
15 "sqlite": {
16 "command": "npx",
17 "args": [
18 "-y",
19 "@modelcontextprotocol/server-sqlite",
20 "--db-path",
21 "/Users/tunombre/Projects/app.db"
22 ]
23 }
24 }
25}

Con esta configuración activa, un solo prompt:

text
1Construye y despliega un sistema CRM local para un negocio de lavado de autos.
2
3Crea el proyecto en ~/Projects/carwash-crm/
4Instala las dependencias automáticamente.
5Configura una base de datos SQLite con tablas para:
6- clientes (nombre, teléfono, correo, vehículo, notas)
7- visitas (id_cliente, fecha, servicio, precio, estado)
8- personal (nombre, rol, horario)
9
10Construye una interfaz web con:
11- Búsqueda y perfiles de clientes
12- Historial de visitas por cliente
13- Panel de ingresos por mes
14- Sistema de recordatorios SMS (integración Twilio, solo configuración)
15
16Inicia el servidor de desarrollo cuando esté completo.
17Reporta la URL de localhost cuando esté listo.

Claude ejecuta esto de principio a fin a través de MCP —creando la estructura de directorios, instalando paquetes de Node, escribiendo el esquema de la base de datos, construyendo la interfaz de usuario e iniciando el servidor. Obtienes una URL de localhost.

Modo 3 - Proyectos de Claude con estándares de la empresa

Sube tu kit de UI, tokens de diseño, documentación de API y requisitos de seguridad a un Proyecto de Claude una vez. Cada sistema que Claude genere a partir de entonces se ajustará automáticamente a tu stack interno.

text
1[El contexto del Proyecto de Claude contiene:]
2- design-system.md (colores, tipografía, espaciado)
3- api-standards.md (patrones de autenticación, códigos de error)
4- security-policy.md (reglas de validación de entrada, configuración CORS)
5- stack.md (React 18, TypeScript, Tailwind, Prisma, PostgreSQL)
6
7Prompt:
8"Construye un formulario de registro de clientes con verificación de correo
9y entrada automática en la base de datos de Notion al enviarlo."
10
11Salida: código listo para producción que coincide exactamente
12con tu stack —sin necesidad de limpieza.

3. Obsidian como centro de comando de IA

Obsidian en 2026 no es una aplicación para tomar notas. Es un centro de comando de IA personal donde tu base de conocimientos acumulada se convierte en la capa de contexto para cada sistema que construyes.

El cambio de arquitectura: tu bóveda ya no es almacenamiento. Es RAG (Generación Aumentada por Recuperación) —una base de conocimientos viva que los agentes de IA consultan antes de ejecutar cualquier tarea.

El stack de plugins que hace que esto funcione:

Smart Connections —indexa toda tu bóveda y envía notas relevantes como contexto con cada llamada de IA.

Obsidian Copilot —conecta tu bóveda directamente a la API de Claude. Configúralo una vez:

javascript
1
2 "provider": "anthropic",
3 "model": "claude-opus-4-8",
4 "apiKey": "TU_CLAVE_ANTHROPIC",
5 "systemPrompt": "Eres un arquitecto de sistemas. Tienes acceso a la bóveda de conocimientos completa del usuario como contexto. Al construir sistemas, referencia sus notas existentes, decisiones pasadas y patrones establecidos. Salida: código funcional + estructura de archivos de Obsidian.",
6 "contextWindow": {
7 "includeActiveFile": true,
8 "includeLinkedFiles": true,
9 "includeRecentFiles": 10,
10 "includeFolders": ["Projects", "Systems", "Decisions"]
11 }
12}

Canvas como interfaz de diseño de sistemas

Un solo prompt crea un Canvas interactivo de Obsidian donde Claude presenta la arquitectura completa del sistema como bloques conectados.

text
1Prompt en el Canvas de Obsidian:
2"Diseña un pipeline de producción de contenido para mi cuenta de Twitter.
3Publico 3 artículos por semana y gestiono 5 acuerdos de patrocinio.
4Consulta mis notas existentes del calendario de contenido."
5
6Salida: Canvas con bloques conectados para:
7→ Ideación de contenido (toma de tus notas de intereses)
8→ Flujo de trabajo Borrador → Revisión → Publicación
9→ Seguimiento de patrocinadores con alertas de fecha límite
10→ Panel de análisis
11→ Lógica de publicación cruzada automatizada
12→ Cada bloque enlaza al archivo de Obsidian relevante

La salida del Canvas que Claude genera como un archivo estructurado:

json
1{
2 "nodes": [
3 {
4 "id": "ideation",
5 "type": "file",
6 "file": "Systems/ContentPipeline/Ideation.md",
7 "x": 0, "y": 0, "width": 300, "height": 200,
8 "color": "1"
9 },
10 {
11 "id": "draft",
12 "type": "file",
13 "file": "Systems/ContentPipeline/Draft.md",
14 "x": 400, "y": 0, "width": 300, "height": 200,
15 "color": "3"
16 },
17 {
18 "id": "sponsors",
19 "type": "file",
20 "file": "Systems/ContentPipeline/SponsorTracker.md",
21 "x": 0, "y": 300, "width": 300, "height": 200,
22 "color": "5"
23 },
24 {
25 "id": "analytics",
26 "type": "file",
27 "file": "Systems/ContentPipeline/Analytics.md",
28 "x": 400, "y": 300, "width": 300, "height": 200,
29 "color": "6"
30 }
31 ],
32 "edges": [
33 {
34 "id": "e1",
35 "fromNode": "ideation", "fromSide": "right",
36 "toNode": "draft", "toSide": "left",
37 "label": "conceptos aprobados"
38 },
39 {
40 "id": "e2",
41 "fromNode": "sponsors", "fromSide": "right",
42 "toNode": "draft", "toSide": "bottom",
43 "label": "integración de brief"
44 }
45 ]
46}

4. LLMs locales para privacidad total

Para datos sensibles —sistemas de clientes, herramientas financieras, herramientas internas— enruta a través de un modelo local en lugar de una API en la nube. Cero datos salen de tu máquina.

bash
1# Instalar Ollama
2curl -fsSL https://ollama.com/install.sh | sh
3
4# Obtener un modelo capaz de programar
5ollama pull llama3.2:latest
6# o para una generación de código más potente:
7ollama pull qwen2.5-coder:32b
8
9# Iniciar el servidor local
10ollama serve
11# Se ejecuta en localhost:11434

Configura Obsidian Copilot para usar el endpoint local:

javascript
1{
2 "provider": "ollama",
3 "model": "qwen2.5-coder:32b",
4 "baseUrl": "http://localhost:11434",
5 "systemPrompt": "Eres un constructor de sistemas local con acceso al sistema de archivos del usuario a través de MCP. Construye sistemas completos y funcionales. Nunca envíes datos a APIs externas sin una instrucción explícita."
6}

El puente entre el modelo local y MCP:

python
1import requests
2import json
3from pathlib import Path
4from watchdog.observers import Observer
5from watchdog.events import FileSystemEventHandler
6
7OBSIDIAN_INBOX = Path.home() / "Obsidian" / "AI-Inbox"
8PROJECTS_DIR = Path.home() / "Projects"
9OLLAMA_URL = "http://localhost:11434/api/generate"
10
11class InboxWatcher(FileSystemEventHandler):
12 """
13 Observa la carpeta AI-Inbox de Obsidian.
14 Cuando aparece un nuevo archivo .md, lo trata como un prompt de construcción.
15 Lo pasa al LLM local -> lo ejecuta vía MCP -> informa el resultado.
16 """
17
18 def on_created(self, event):
19 if not event.src_path.endswith(".md"):
20 return
21
22 prompt_file = Path(event.src_path)
23 prompt = prompt_file.read_text()
24
25 print(f"[Inbox] Nuevo prompt: {prompt_file.name}")
26 self.execute_prompt(prompt, prompt_file.stem)
27
28 def execute_prompt(self, prompt: str, project_name: str):
29 response = requests.post(OLLAMA_URL, json={
30 "model": "qwen2.5-coder:32b",
31 "prompt": f"""Eres un constructor de sistemas.
32 Construye este sistema: {prompt}
33
34 Genera un plan JSON con:
35 {{
36 "project_dir": "ruta relativa",
37 "files": [
38 {{"path": "ruta relativa", "content": "contenido del archivo"}}
39 ],
40 "commands": ["npm install", "etc"],
41 "summary": "lo que se construyó"
42 }}""",
43 "stream": False
44 })
45
46 plan = json.loads(response.json()["response"])
47 project_dir = PROJECTS_DIR / plan["project_dir"]
48 project_dir.mkdir(parents=True, exist_ok=True)
49
50 for file_spec in plan["files"]:
51 file_path = project_dir / file_spec["path"]
52 file_path.parent.mkdir(parents=True, exist_ok=True)
53 file_path.write_text(file_spec["content"])
54 print(f"[Build] Creado: {file_path}")
55
56 result_file = OBSIDIAN_INBOX / f"{project_name}-result.md"
57 result_file.write_text(
58 f"# Build Completo: {project_name}\n\n"
59 f"**Ubicación:** {project_dir}\n\n"
60 f"**Resumen:** {plan['summary']}\n\n"
61 f"**Archivos creados:** {len(plan['files'])}\n"
62 )
63 print(f"[Hecho] Resultado escrito en Obsidian")
64
65if __name__ == "__main__":
66 OBSIDIAN_INBOX.mkdir(exist_ok=True)
67 observer = Observer()
68 observer.schedule(InboxWatcher(), str(OBSIDIAN_INBOX), recursive=False)
69 observer.start()
70 print(f"[Observando] {OBSIDIAN_INBOX}")
71
72 try:
73 while True:
74 import time; time.sleep(1)
75 except KeyboardInterrupt:
76 observer.stop()
77 observer.join()

Coloca un archivo .md en tu carpeta AI-Inbox de Obsidian con un prompt de construcción. El puente lo recoge, lo enruta a través del modelo local, construye el sistema en tu carpeta de Proyectos y escribe una nota de finalización de vuelta a Obsidian.

5. El flujo de trabajo completo - desde la idea hasta el sistema desplegado

text
1PASO 1 - Entrada
2En Obsidian, en tu panel de IA, escribe:
3"Sistema financiero personal con integración de criptomonedas
4y seguimiento de presupuesto mensual."
5Presiona Generar.
6
7PASO 2 - Ensamblaje de contexto
8El plugin Smart Connections escanea tu bóveda.
9Encuentra tus notas financieras de los últimos 3 meses.
10Las envía como contexto a la API de Claude.
11
12PASO 3 - Arquitectura
13Claude (Opus 4.8) diseña el sistema:
14- Esquema de base de datos
15- Componentes de UI
16- Integraciones de API
17- Estructura de archivos
18
19PASO 4 - Construcción
20Claude (Sonnet 5) implementa vía MCP:
21- Crea ~/Projects/finance-tracker/
22- Instala dependencias
23- Escribe todos los archivos
24- Inicia el servidor de desarrollo en localhost:3000
25
26PASO 5 - Resultado
27Obsidian crea la carpeta: Finance System/
28Dentro: paneles enlazados, notas de configuración,
29y un enlace directo a la aplicación en ejecución.

Tiempo total desde el paso 1 hasta la aplicación en funcionamiento: 4-12 minutos.

El cambio que esto representa

Esto no es una forma más rápida de escribir código.

Es una relación diferente entre la idea y la ejecución.

La limitación sobre lo que podías construir solía ser la habilidad técnica y el tiempo. Un no desarrollador no podía construir un CRM. Un desarrollador solitario no podía construir cinco sistemas simultáneamente. Un equipo no podía lanzar en horas en lugar de semanas.

Esas tres limitaciones han desaparecido.

La nueva limitación es la claridad de pensamiento —la capacidad de describir precisamente lo que necesitas, entender cómo se ve un buen resultado e iterar sobre él. Esa es una habilidad de pensamiento, no técnica.

La Arquitectura de Aplicaciones Generativas no vuelve obsoletos a los desarrolladores. Hace que la capacidad de pensar en sistemas —de razonar sobre lo que necesitas antes de construirlo— sea dramáticamente más valiosa que la capacidad de escribir el código que lo implementa.

El stack está aquí. Los modelos son capaces. La única variable restante es si estás construyendo con él o leyendo sobre personas que lo están haciendo.

Este artículo describe las capacidades disponibles en Claude, Obsidian y MCP a partir de julio de 2026. Las versiones específicas de los plugins y las configuraciones de API pueden cambiar. Siempre verifica la documentación actual antes de la implementación.

Gracias por leer.

Recrear en YouMind

Turn one viral article into a full content workflow

Collect the source, decode the pattern, create assets, draft the story, and distribute from one AI workspace.

Explore YouMind
Para creadores

Convierte tu Markdown en un artículo de 𝕏 impecable

Cuando publicas tus propios textos largos, dar formato en 𝕏 a imágenes, tablas y bloques de código es un fastidio. YouMind convierte un borrador completo en Markdown en un artículo de 𝕏 impecable y listo para publicar.

Prueba Markdown a 𝕏

Más patrones por descifrar

Artículos virales recientes

Explorar más artículos virales