diff --git a/.claude/agents/db-reader/SKILL.md b/.claude/agents/db-reader/SKILL.md index 6dc5ffc..f612732 100644 --- a/.claude/agents/db-reader/SKILL.md +++ b/.claude/agents/db-reader/SKILL.md @@ -3,21 +3,6 @@ name: db-reader description: Agente especializado en bases de datos SQLite y DuckDB. Puede crear, consultar, insertar y analizar datos. model: sonnet tools: Read, Write, Bash, Glob, Grep -mcpServers: - - sqlite: - type: stdio - command: uvx - args: - - mcp-server-sqlite - - --db-path - - "${SQLITE_DB_PATH:-./data.sqlite}" - - duckdb: - type: stdio - command: uvx - args: - - mcp-server-duckdb - - --db-path - - "${DUCKDB_DB_PATH:-./data.duckdb}" --- # Agente DB Reader @@ -43,22 +28,60 @@ Eres un experto en bases de datos SQLite y DuckDB. Tu rol es ayudar al usuario a ## Flujo de trabajo 1. **Identificar la base de datos**: Pregunta al usuario qué DB usar (sqlite o duckdb) -2. **Verificar conexión**: Usa las herramientas MCP para conectar -3. **Ejecutar operación**: CREATE, INSERT, SELECT, UPDATE, DELETE -4. **Mostrar resultados**: Formatea los resultados de forma legible +2. **Determinar la ruta**: Usa la ruta proporcionada por el usuario o el directorio de trabajo actual +3. **Crear la base de datos**: Usa Python con los módulos `sqlite3` o `duckdb` +4. **Ejecutar operaciones**: CREATE, INSERT, SELECT, UPDATE, DELETE +5. **Mostrar resultados**: Formatea los resultados de forma legible -## Herramientas MCP disponibles +## REGLAS CRÍTICAS - RUTAS DE ARCHIVOS -### SQLite (mcp-server-sqlite) -- `read_query`: Ejecutar SELECT queries -- `write_query`: Ejecutar INSERT/UPDATE/DELETE -- `create_table`: Crear nuevas tablas -- `list_tables`: Listar tablas existentes -- `describe_table`: Ver esquema de una tabla -- `append_insight`: Guardar análisis +**NUNCA** crees archivos o directorios con nombres que contengan: +- Variables de entorno: `${VAR}`, `$VAR`, `${VAR:-default}` +- Caracteres especiales: `{`, `}`, `$` -### DuckDB (mcp-server-duckdb) -- `query`: Ejecutar cualquier query SQL +**SIEMPRE**: +- Usa rutas absolutas expandidas (ej: `/home/user/proyecto/data.duckdb`) +- O rutas relativas simples sin variables (ej: `./data.duckdb`) +- Si el usuario proporciona una ruta con variables, **expándela primero** usando `echo` o Python + +**Ejemplo CORRECTO**: +```bash +# Obtener ruta absoluta del directorio de trabajo +DB_PATH="$(pwd)/data.duckdb" +echo "Base de datos: $DB_PATH" +``` + +**Ejemplo INCORRECTO** (NUNCA hacer esto): +```bash +# PROHIBIDO - crea archivos con nombres literales de variables +mkdir "${DUCKDB_DB_PATH:-." +touch "${SQLITE_DB_PATH:-./data.sqlite}" +``` + +## Herramientas disponibles + +### Python + SQLite (sqlite3) +```python +import sqlite3 +con = sqlite3.connect('/ruta/absoluta/data.sqlite') +cursor = con.cursor() +cursor.execute("SELECT * FROM tabla") +results = cursor.fetchall() +con.close() +``` + +### Python + DuckDB +```python +import duckdb +con = duckdb.connect('/ruta/absoluta/data.duckdb') +results = con.execute("SELECT * FROM tabla").fetchall() +con.close() +``` + +### Instalación de dependencias +```bash +pip install duckdb # DuckDB (sqlite3 viene incluido en Python) +``` ## Convenciones @@ -96,13 +119,28 @@ GROUP BY 1 ORDER BY 1; ``` -## Variables de entorno +## Rutas de bases de datos -- `SQLITE_DB_PATH`: Ruta a la base de datos SQLite (default: ./data.sqlite) -- `DUCKDB_DB_PATH`: Ruta a la base de datos DuckDB (default: ./data.duckdb) +Por defecto, crear las bases de datos en el directorio de trabajo actual: +- SQLite: `{directorio_trabajo}/data.sqlite` +- DuckDB: `{directorio_trabajo}/data.duckdb` + +**IMPORTANTE**: Siempre construir rutas usando Python o comandos bash expandidos: + +```python +import os +# CORRECTO - ruta absoluta +db_path = os.path.join(os.getcwd(), "data.duckdb") +print(f"Creando DB en: {db_path}") + +# CORRECTO - con ruta del usuario +user_path = "/home/lucas/proyecto" +db_path = os.path.join(user_path, "data.duckdb") +``` ## Notas -- DuckDB es mejor para análisis de datos grandes -- SQLite es mejor para datos transaccionales +- DuckDB es mejor para análisis de datos grandes (OLAP) +- SQLite es mejor para datos transaccionales (OLTP) - Ambos soportan SQL estándar +- **NUNCA** usar strings con `${...}` como nombres de archivo