| name | bases |
| description | Crea y edita archivos Obsidian Bases (.base) para vistas de base de datos sobre las notas del vault. Usar para dashboards, indices de proyecto, trackers de recursos y cualquier vista filtrada o calculada.
|
| tools | ["read","edit","obsidian-mcp"] |
| updated | "2026-06-09T00:00:00.000Z" |
Obsidian Bases
Skill para crear archivos .base que funcionan como vistas de base de datos sobre las notas del vault. Ideales para notas de tipo indice y dashboards.
Cuando usar esta skill
Cuando el usuario quiera:
- Crear un dashboard o indice de proyecto
- Ver notas filtradas por tipo, estado, tags o fechas
- Montar un tracker de recursos o tareas
- Crear una vista calculada (dias hasta vencimiento, contadores, etc.)
[!CAUTION]
Antes de crear o editar notas, lee las [[.agents/REGLAS_GLOBALES|Reglas Globales]].
Estructura de un archivo .base
Los archivos .base contienen YAML valido con esta estructura:
filters:
formulas:
properties:
summaries:
views:
Filtros
Los filtros seleccionan que notas aparecen. Se pueden aplicar globalmente o por vista.
Estructura de filtros
filters: 'status == "completo"'
filters:
and:
- 'status == "completo"'
- 'type == "conocimiento"'
filters:
or:
- file.hasTag("python")
- file.hasTag("java")
filters:
not:
- file.hasTag("archivo")
filters:
and:
- file.hasTag("proyecto")
- or:
- 'status == "en_proceso"'
- 'status == "borrador"'
Operadores
| Operador | Descripcion |
|---|
== | Igual |
!= | Distinto |
> | Mayor que |
< | Menor que |
>= | Mayor o igual |
<= | Menor o igual |
&& | Y logico |
|| | O logico |
! | Negacion |
Propiedades
Tres tipos de propiedades
- De la nota — del frontmatter:
type, status, tags, created
- Del archivo — metadatos del fichero:
file.name, file.mtime, etc.
- Formulas — valores calculados:
formula.mi_formula
Propiedades de archivo
| Propiedad | Tipo | Descripcion |
|---|
file.name | String | Nombre del archivo |
file.basename | String | Nombre sin extension |
file.path | String | Ruta completa |
file.folder | String | Carpeta padre |
file.ext | String | Extension |
file.size | Number | Tamano en bytes |
file.ctime | Date | Fecha de creacion |
file.mtime | Date | Fecha de modificacion |
file.tags | List | Tags del archivo |
file.links | List | Enlaces internos |
file.backlinks | List | Notas que enlazan a esta |
Formulas
Las formulas calculan valores a partir de propiedades.
formulas:
total: "precio * cantidad"
icono_estado: 'if(status == "completo", "OK", "Pendiente")'
creado: 'file.ctime.format("YYYY-MM-DD")'
dias_antiguo: '(now() - file.ctime).days'
dias_hasta_due: 'if(due_date, (date(due_date) - today()).days, "")'
Funciones principales
| Funcion | Firma | Descripcion |
|---|
date() | date(string): date | Parsear string a fecha (YYYY-MM-DD HH:mm:ss) |
now() | now(): date | Fecha y hora actuales |
today() | today(): date | Fecha actual (hora = 00:00:00) |
if() | if(cond, verdadero, falso?) | Condicional |
duration() | duration(string): duration | Parsear duracion |
file() | file(path): file | Obtener objeto de archivo |
link() | link(path, display?): Link | Crear enlace |
Aritmetica de fechas
"now() + \"1 day\""
"today() + \"7d\""
"(now() - file.ctime).days"
[!WARNING]
Restar fechas devuelve un tipo Duration, no un numero. Siempre acceder a .days, .hours, etc. antes de aplicar .round().
"(now() - file.ctime).days.round(0)"
"(now() - file.ctime).round(0)"
Null checks
Las propiedades pueden no existir en todas las notas. Usar if() para proteger:
'if(due_date, (date(due_date) - today()).days, "")'
"(date(due_date) - today()).days"
Tipos de vista
Table
views:
- type: table
name: "Mi Tabla"
order:
- file.name
- status
- created
summaries:
precio: Sum
Cards
views:
- type: cards
name: "Galeria"
order:
- file.name
- cover
- tags
List
views:
- type: list
name: "Lista Simple"
order:
- file.name
- status
Resumenes predefinidos
| Nombre | Tipo input | Descripcion |
|---|
Average | Number | Media |
Sum | Number | Suma |
Min / Max | Number | Minimo / Maximo |
Median | Number | Mediana |
Earliest / Latest | Date | Mas antigua / reciente |
Checked / Unchecked | Boolean | Conteo de verdadero/falso |
Empty / Filled | Any | Conteo de vacios/llenos |
Unique | Any | Conteo de valores unicos |
Incrustar bases en notas
![[MiBase.base]]
![[MiBase.base#Nombre de Vista]]
Reglas YAML
- Usar comillas simples para formulas con comillas dobles:
'if(done, "Si", "No")'
- Usar comillas dobles para strings simples:
"Mi Vista"
- Escapar comillas anidadas correctamente
Ejemplos para nuestro vault
Dashboard de proyecto
Ubicacion: 02_Proyectos/<proyecto>/Dashboard.base
filters:
and:
- file.inFolder("02_Proyectos/Alpha")
- 'file.ext == "md"'
formulas:
dias_sin_editar: '(now() - file.mtime).days.round(0)'
tipo_label: 'if(type == "adr", "ADR", if(type == "doc-proyecto", "Doc", if(type == "reunion", "Reunion", type)))'
properties:
formula.dias_sin_editar:
displayName: "Dias sin editar"
formula.tipo_label:
displayName: "Tipo"
views:
- type: table
name: "Todas las notas"
order:
- file.name
- status
- formula.tipo_label
- formula.dias_sin_editar
- file.mtime
groupBy:
property: status
direction: ASC
- type: table
name: "ADRs"
filters:
and:
- 'type == "adr"'
order:
- file.name
- status
- created
Tracker de recursos
Ubicacion: 04_Recursos/Tracker.base
filters:
and:
- 'type == "recurso"'
- 'file.ext == "md"'
formulas:
dias_desde_captura: '(now() - file.ctime).days.round(0)'
procesado: 'if(status == "completo", "Si", if(status == "en_proceso", "En curso", "Pendiente"))'
properties:
source_type:
displayName: "Tipo de fuente"
formula.procesado:
displayName: "Procesado"
formula.dias_desde_captura:
displayName: "Dias"
views:
- type: table
name: "Pendientes de procesar"
filters:
and:
- 'status == "borrador"'
order:
- file.name
- source_type
- formula.dias_desde_captura
- tags
- type: table
name: "Todos los recursos"
order:
- file.name
- formula.procesado
- source_type
- tags
summaries:
formula.dias_desde_captura: Average
- type: cards
name: "Galeria"
order:
- file.name
- source_type
- formula.procesado
Indice de conocimiento
Ubicacion: 03_Conocimiento/Indice.base
filters:
and:
- file.inFolder("03_Conocimiento")
- 'file.ext == "md"'
formulas:
backlink_count: 'file.backlinks.length'
dias_sin_editar: '(now() - file.mtime).days.round(0)'
necesita_revision: 'if((now() - file.mtime).days > 180, "Revisar", "")'
properties:
formula.backlink_count:
displayName: "Backlinks"
formula.necesita_revision:
displayName: "Estado"
views:
- type: table
name: "Por popularidad"
order:
- file.name
- tags
- formula.backlink_count
- formula.dias_sin_editar
- formula.necesita_revision
groupBy:
property: file.folder
direction: ASC
- type: table
name: "Necesitan revision"
filters:
and:
- 'formula.necesita_revision != ""'
order:
- file.name
- file.mtime
- formula.dias_sin_editar
Notas estancadas (para lint del organizador)
Ubicacion: 00_Sistema/Estancadas.base
filters:
and:
- 'file.ext == "md"'
- or:
- 'status == "borrador"'
- 'status == "en_proceso"'
formulas:
dias_sin_editar: '(now() - file.mtime).days.round(0)'
urgencia: 'if((now() - file.mtime).days > 90, "Critico", if((now() - file.mtime).days > 30, "Revisar", "OK"))'
properties:
formula.urgencia:
displayName: "Urgencia"
views:
- type: table
name: "Notas estancadas"
filters:
and:
- 'formula.dias_sin_editar > 30'
order:
- file.name
- status
- type
- formula.dias_sin_editar
- formula.urgencia
- file.folder
groupBy:
property: formula.urgencia
direction: DESC