claude-code-arcane 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +6 -4
- package/agents/audio/audio-director.md +90 -0
- package/agents/audio/audio-programmer.md +97 -0
- package/agents/audio/audio-qa.md +95 -0
- package/agents/audio/composer.md +88 -0
- package/agents/audio/technical-sound-designer.md +90 -0
- package/agents/audio/voice-director.md +96 -0
- package/docs/SKILLS-CATALOG.md +45 -2
- package/docs/USER-GUIDE.md +2 -2
- package/package.json +1 -1
- package/profiles/audio.yaml +45 -0
- package/profiles/second-brain.yaml +37 -0
- package/rules/gamedev/audio-code.md +45 -0
- package/rules/vault-conventions.md +144 -0
- package/skills/adaptive-music/SKILL.md +171 -0
- package/skills/adaptive-music/references/anti-patterns.md +53 -0
- package/skills/audio-audit/SKILL.md +164 -0
- package/skills/audio-audit/references/anti-patterns.md +65 -0
- package/skills/audio-audit/scripts/check_assets.py +208 -0
- package/skills/audio-bible/SKILL.md +119 -0
- package/skills/audio-bible/references/anti-patterns.md +39 -0
- package/skills/audio-mix/SKILL.md +151 -0
- package/skills/audio-mix/references/anti-patterns.md +65 -0
- package/skills/audio-spec/SKILL.md +107 -0
- package/skills/audio-spec/references/anti-patterns.md +45 -0
- package/skills/brain-dump/SKILL.md +53 -0
- package/skills/hub-note/SKILL.md +68 -0
- package/skills/middleware-integration/SKILL.md +186 -0
- package/skills/middleware-integration/references/anti-patterns.md +69 -0
- package/skills/midi-compose/SKILL.md +136 -0
- package/skills/midi-compose/references/smf-format.md +129 -0
- package/skills/midi-compose/scripts/compose_midi.py +326 -0
- package/skills/midi-compose/templates/example-composition.json +69 -0
- package/skills/music-composition/SKILL.md +106 -0
- package/skills/music-composition/references/form.md +57 -0
- package/skills/music-composition/references/game-music.md +82 -0
- package/skills/music-composition/references/harmony.md +82 -0
- package/skills/music-composition/references/melody.md +48 -0
- package/skills/music-composition/references/orchestration.md +69 -0
- package/skills/music-composition/references/rhythm-groove.md +49 -0
- package/skills/obsidian-bases/SKILL.md +85 -0
- package/skills/obsidian-bases/references/bases-syntax.md +123 -0
- package/skills/obsidian-canvas/SKILL.md +91 -0
- package/skills/obsidian-markdown/SKILL.md +110 -0
- package/skills/pdf-generator/scripts/fill_inspect.py +2 -0
- package/skills/pdf-generator/scripts/render_body.py +2 -0
- package/skills/procedural-audio/SKILL.md +157 -0
- package/skills/procedural-audio/references/anti-patterns.md +45 -0
- package/skills/review-dump/SKILL.md +108 -0
- package/skills/review-monthly/SKILL.md +56 -0
- package/skills/review-weekly/SKILL.md +91 -0
- package/skills/second-brain/SKILL.md +211 -0
- package/skills/second-brain/hooks/hooks.json +16 -0
- package/skills/second-brain/hooks/validate-note.sh +85 -0
- package/skills/second-brain/references/cross-project.md +57 -0
- package/skills/second-brain/references/templates/Atomic.md +22 -0
- package/skills/second-brain/references/templates/Daily.md +25 -0
- package/skills/second-brain/references/templates/Dashboard.base +70 -0
- package/skills/second-brain/references/templates/Dump.md +11 -0
- package/skills/second-brain/references/templates/Hub.md +22 -0
- package/skills/second-brain/references/templates/Monthly.md +29 -0
- package/skills/second-brain/references/templates/Weekly.md +29 -0
- package/skills/second-brain/references/templates/codebases.md +37 -0
- package/skills/second-brain/references/templates/hot.md +37 -0
- package/skills/second-brain/references/templates/vault-CLAUDE.md +127 -0
- package/skills/sfx-design/SKILL.md +130 -0
- package/skills/sfx-design/references/anti-patterns.md +53 -0
- package/skills/spatial-audio/SKILL.md +139 -0
- package/skills/spatial-audio/references/anti-patterns.md +53 -0
- package/skills/ui-sound-design/SKILL.md +133 -0
- package/skills/ui-sound-design/references/anti-patterns.md +57 -0
- package/skills/vault-audit/SKILL.md +72 -0
- package/skills/vault-audit/scripts/vault_audit.py +539 -0
- package/skills/vault-clip/SKILL.md +73 -0
- package/skills/vault-recall/SKILL.md +82 -0
- package/skills/vault-recall/scripts/vault_index.py +626 -0
- package/skills/vault-tidy/SKILL.md +76 -0
- package/skills/voice-pipeline/SKILL.md +150 -0
- package/skills/voice-pipeline/references/anti-patterns.md +69 -0
- package/skills/xlsx-generator/scripts/formula_check.py +2 -0
- package/skills/xlsx-generator/scripts/libreoffice_recalc.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_add_column.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_insert_row.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_reader.py +2 -0
- package/skills/zettel/SKILL.md +66 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Armonía
|
|
2
|
+
|
|
3
|
+
## Armonía funcional
|
|
4
|
+
|
|
5
|
+
Tres funciones, y todo lo demás es sustitución o adorno:
|
|
6
|
+
|
|
7
|
+
| Función | Grados (mayor) | Efecto |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| **Tónica** | I, vi, iii | Reposo, llegada |
|
|
10
|
+
| **Subdominante** | IV, ii | Salida, preparación |
|
|
11
|
+
| **Dominante** | V, vii° | Tensión, exige resolución |
|
|
12
|
+
|
|
13
|
+
El movimiento fuerte es subdominante → dominante → tónica. Todo lo demás es demorar, sustituir o negar esa expectativa.
|
|
14
|
+
|
|
15
|
+
**Ritmo armónico** — la velocidad de cambio de acorde es una palanca independiente de la progresión. La misma secuencia a un acorde por compás vs dos por compás cambia la urgencia sin cambiar una nota.
|
|
16
|
+
|
|
17
|
+
## Cadencias
|
|
18
|
+
|
|
19
|
+
| Cadencia | Movimiento | Efecto |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| Auténtica perfecta | V → I, con tónica en soprano y bajo | Cierre total |
|
|
22
|
+
| Auténtica imperfecta | V → I invertido o sin tónica arriba | Cierre débil, sigue |
|
|
23
|
+
| Plagal | IV → I | Reposo sin tensión previa; sabor modal/himno |
|
|
24
|
+
| Semicadencia | → V | Pausa abierta, pregunta |
|
|
25
|
+
| Rota | V → vi | Sorpresa, evita el cierre esperado |
|
|
26
|
+
| Suspendida (picardía inversa) | resolución a menor donde se esperaba mayor | Ensombrece |
|
|
27
|
+
|
|
28
|
+
## Armonía modal
|
|
29
|
+
|
|
30
|
+
Cuando la progresión no quiere funcionalidad, el modo aporta color por su grado característico:
|
|
31
|
+
|
|
32
|
+
| Modo | Grado característico | Carácter |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| Jónico | — | Neutro, brillante |
|
|
35
|
+
| Dórico | ♮6 (sobre menor) | Menor sin tragedia; folk, aventura |
|
|
36
|
+
| Frigio | ♭2 | Tensión oscura, MENA/flamenco |
|
|
37
|
+
| Lidio | ♯4 | Suspensión luminosa, asombro |
|
|
38
|
+
| Mixolidio | ♭7 | Rock/folk, menos gravedad que jónico |
|
|
39
|
+
| Eólico | ♭6 natural | Menor estándar |
|
|
40
|
+
| Locrio | ♭2 y ♭5 | Inestable, casi inusable como centro |
|
|
41
|
+
|
|
42
|
+
En modal, evitar el V mayor: reintroduce función dominante y colapsa el modo a mayor/menor.
|
|
43
|
+
|
|
44
|
+
## Armonía cromática
|
|
45
|
+
|
|
46
|
+
- **Acordes prestados** — tomar del menor paralelo en un contexto mayor (♭VI, ♭VII, iv). Ensombrece sin modular
|
|
47
|
+
- **Dominantes secundarias** — V/x tonicaliza cualquier grado. `C - E7 - Am` hace de Am un centro momentáneo
|
|
48
|
+
- **Sustitución tritonal** — reemplazar V7 por el ♭II7. `G7 → D♭7` antes de C: mismo tritono, bajo cromático
|
|
49
|
+
- **Napolitana (♭II)** — color dramático de aproximación a la dominante
|
|
50
|
+
- **Acordes de sexta aumentada** — resolución cromática doble hacia V, muy tensa
|
|
51
|
+
|
|
52
|
+
## Modulación
|
|
53
|
+
|
|
54
|
+
De más suave a más abrupta:
|
|
55
|
+
|
|
56
|
+
1. **Directa a tonalidad cercana** (relativo, dominante, subdominante): casi imperceptible
|
|
57
|
+
2. **Por pivote** — un acorde común a las dos tonalidades reinterpretado. La técnica más limpia
|
|
58
|
+
3. **Por dominante secundaria** — introducir el V de la nueva tonalidad
|
|
59
|
+
4. **Cromática por bajo** — mover el bajo por semitonos hasta el nuevo centro
|
|
60
|
+
5. **Enarmónica** — reinterpretar un acorde ambiguo (disminuido, sexta aumentada) hacia otro lado
|
|
61
|
+
6. **Truncada / directa lejana** — cortar y arrancar en la nueva tonalidad. Efecto de corte cinematográfico
|
|
62
|
+
|
|
63
|
+
Para juegos, la modulación por pivote es la única que sobrevive a un cambio de estado en tiempo real sin sonar a error.
|
|
64
|
+
|
|
65
|
+
## Voice leading
|
|
66
|
+
|
|
67
|
+
- Mover cada voz lo mínimo posible; la conducción suave es lo que hace que una progresión "funcione"
|
|
68
|
+
- Resolver las tensiones: 7ª baja por grado, 4ª suspendida baja a 3ª
|
|
69
|
+
- Evitar 5ªs y 8ªs paralelas entre voces exteriores en contexto tonal tradicional (en pop/rock son idiomáticas)
|
|
70
|
+
- Evitar el salto de la voz más aguda junto con el bajo en la misma dirección al llegar a una cadencia
|
|
71
|
+
- Doblar la tónica antes que la 5ª, y la 5ª antes que la 3ª
|
|
72
|
+
|
|
73
|
+
## Reharmonización
|
|
74
|
+
|
|
75
|
+
Palancas, de menor a mayor impacto:
|
|
76
|
+
|
|
77
|
+
1. Cambiar inversiones — mismo acorde, bajo distinto
|
|
78
|
+
2. Agregar extensiones (7, 9, 11, 13) — color sin cambiar función
|
|
79
|
+
3. Sustituir por función equivalente — I → vi, V → iii
|
|
80
|
+
4. Insertar dominantes secundarias entre acordes existentes
|
|
81
|
+
5. Cambiar el modo del acorde — mayor por menor
|
|
82
|
+
6. Reemplazar la progresión entera manteniendo la melodía: cada nota melódica admite varios acordes
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Melodía
|
|
2
|
+
|
|
3
|
+
## Qué hace que una melodía se pegue
|
|
4
|
+
|
|
5
|
+
Cuatro propiedades, y ninguna es "ser linda":
|
|
6
|
+
|
|
7
|
+
1. **Perfil reconocible** — la silueta (sube, se sostiene, cae) es identificable sin el ritmo
|
|
8
|
+
2. **Un gesto memorable** — un salto, una nota fuera de la escala, una síncopa. Un solo evento distintivo, no cinco
|
|
9
|
+
3. **Repetición con variación** — el oído necesita reconocer antes de que le interese lo nuevo
|
|
10
|
+
4. **Relación clara con la armonía** — las notas fuertes caen en tiempos fuertes y son consonantes o tensiones que resuelven
|
|
11
|
+
|
|
12
|
+
Si una melodía no se pega, casi siempre falta el punto 2: es fluida, correcta y sin ningún evento que el oído pueda agarrar.
|
|
13
|
+
|
|
14
|
+
## Construcción
|
|
15
|
+
|
|
16
|
+
**Grados de escala, no notas.** Escribir `5 - 3 - 2 - 1` en vez de `G - E - D - C` la hace portable y expone la estructura.
|
|
17
|
+
|
|
18
|
+
**Balance salto/grado.** Melodía toda por grados conjuntos: suave y anodina. Toda por saltos: instrumental, difícil de cantar. La proporción típica en música vocal memorable es mayoría de grados con 1-2 saltos ubicados en el punto de mayor interés.
|
|
19
|
+
|
|
20
|
+
**Clímax único.** La nota más aguda debería aparecer una vez, y tarde. Si el punto alto llega en el compás 2, no queda a dónde ir.
|
|
21
|
+
|
|
22
|
+
**Registro como recurso finito.** Cada octava que subís es un recurso que se gasta. Guardá el registro alto para el momento que lo necesita.
|
|
23
|
+
|
|
24
|
+
## Desarrollo motívico
|
|
25
|
+
|
|
26
|
+
Un motivo es una célula de 2-5 notas. Las transformaciones, de más a menos reconocible:
|
|
27
|
+
|
|
28
|
+
| Transformación | Qué hace |
|
|
29
|
+
|---|---|
|
|
30
|
+
| **Repetición literal** | Establece |
|
|
31
|
+
| **Secuencia** | Mismo motivo, otra altura. La herramienta más eficiente |
|
|
32
|
+
| **Transposición diatónica** | Igual pero adaptado a la escala; cambia intervalos |
|
|
33
|
+
| **Inversión** | Espeja los intervalos. Mismo ADN, otro carácter |
|
|
34
|
+
| **Retrogradación** | Al revés. Reconocible solo si el motivo es rítmicamente distintivo |
|
|
35
|
+
| **Aumentación / disminución** | Duplicar o dividir las duraciones. Aumentación = épico; disminución = urgencia |
|
|
36
|
+
| **Fragmentación** | Quedarse con un trozo y repetirlo. Genera desarrollo/tensión |
|
|
37
|
+
| **Ornamentación** | Rellenar con notas de paso. Cuidado: diluye |
|
|
38
|
+
|
|
39
|
+
En música de juego, la aumentación y la fragmentación de un mismo motivo son la forma más barata de tener 4 variantes de un tema con una sola idea.
|
|
40
|
+
|
|
41
|
+
## Estructura de frase
|
|
42
|
+
|
|
43
|
+
- **Antecedente / consecuente** — 4+4 compases: la primera termina abierta (semicadencia), la segunda cierra. El patrón de pregunta-respuesta más usado
|
|
44
|
+
- **Sentence** — presentación (2), continuación con fragmentación (2), cadencia (4)
|
|
45
|
+
- **Frases asimétricas** (3, 5, 7 compases) — inquietan, útiles para tensión
|
|
46
|
+
- **Elisión** — la última nota de una frase es la primera de la siguiente. Elimina la respiración, encadena
|
|
47
|
+
|
|
48
|
+
**Prosodia (si hay letra):** las sílabas acentuadas caen en tiempos fuertes y en notas largas. Una melodía que pelea con el acento natural de la palabra suena mal aunque la armonía sea perfecta. Las vocales abiertas soportan notas agudas y largas; las cerradas no.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Orquestación
|
|
2
|
+
|
|
3
|
+
## Rangos y carácter
|
|
4
|
+
|
|
5
|
+
Rangos prácticos (no extremos virtuosos). El **carácter cambia por registro** en el mismo instrumento — es lo que más se ignora.
|
|
6
|
+
|
|
7
|
+
| Instrumento | Rango práctico | Registro grave | Registro agudo |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| Flauta | C4 – C7 | Aireado, débil, se tapa | Brillante, penetrante |
|
|
10
|
+
| Clarinete | D3 – C6 | Oscuro, cálido, único | Estridente si se fuerza |
|
|
11
|
+
| Oboe | B♭3 – G6 | Nasal, presente | Tenso |
|
|
12
|
+
| Fagot | B♭1 – E5 | Sombrío, cómico | Vulnerable, expresivo |
|
|
13
|
+
| Corno | F2 – F5 | Noble, difuso | Heroico, esfuerzo audible |
|
|
14
|
+
| Trompeta | E3 – C6 | Sólido | Brillante, corta cualquier textura |
|
|
15
|
+
| Trombón | E2 – F4 | Grave, potente | Cantabile |
|
|
16
|
+
| Violín | G3 – E7 | Cálido (cuerda G) | Brillante; muy agudo = tensión |
|
|
17
|
+
| Viola | C3 – E6 | Ronco, melancólico | Delgado |
|
|
18
|
+
| Cello | C2 – C6 | Profundo | El registro más expresivo de la orquesta |
|
|
19
|
+
| Contrabajo | E1 – G4 | Fundamento | Raro, tenso |
|
|
20
|
+
| Voz (soprano) | C4 – A5 | Débil | Potente, esfuerzo audible |
|
|
21
|
+
| Voz (barítono) | A2 – F4 | Cómodo | Intenso |
|
|
22
|
+
|
|
23
|
+
## Densidad de arreglo
|
|
24
|
+
|
|
25
|
+
**La regla que resuelve el 80% de los problemas: menos elementos, mejor definidos.**
|
|
26
|
+
|
|
27
|
+
| Nivel | Elementos simultáneos | Uso |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| Íntimo | 1-2 | Momentos de máxima atención |
|
|
30
|
+
| Cámara | 3-5 | Estándar de gameplay sostenido |
|
|
31
|
+
| Pleno | 6-10 | Clímax |
|
|
32
|
+
| Tutti | todo | Una vez, y corto |
|
|
33
|
+
|
|
34
|
+
En música de juego, el nivel de densidad es la palanca adaptativa más eficiente: subir y bajar capas sin cambiar el material.
|
|
35
|
+
|
|
36
|
+
## Voicing y textura
|
|
37
|
+
|
|
38
|
+
- **Espaciado natural** — intervalos amplios abajo, cerrados arriba. Copia la serie armónica; suena limpio automáticamente
|
|
39
|
+
- **No apilar en el mismo registro** — cuatro instrumentos entre C4 y C5 producen barro. Separar por octavas
|
|
40
|
+
- **Doblar con intención** — al unísono para peso, a la octava para brillo, en 3ªs/6ªs para dulzura. Doblar todo es no doblar nada
|
|
41
|
+
- **Registro medio saturado** — 500 Hz-2 kHz es donde vive el diálogo. En un juego, la música debería *dejar ese rango relativamente libre* si hay VO simultáneo (ver `/audio-mix`)
|
|
42
|
+
|
|
43
|
+
## Combinaciones que funcionan
|
|
44
|
+
|
|
45
|
+
| Combinación | Efecto |
|
|
46
|
+
|---|---|
|
|
47
|
+
| Cello + corno (unísono) | Calidez con peso |
|
|
48
|
+
| Clarinete grave + viola | Oscuridad ambigua |
|
|
49
|
+
| Flauta + violín (octava) | Brillo aireado |
|
|
50
|
+
| Pizzicato + arpa/mallets | Puntillismo, curiosidad |
|
|
51
|
+
| Cuerdas con sordina + coro suave | Distancia, memoria |
|
|
52
|
+
| Trompas en 5ªs abiertas | Épica; cliché si se abusa |
|
|
53
|
+
| Solo + silencio | Máxima atención |
|
|
54
|
+
|
|
55
|
+
## Escritura coral / vocal
|
|
56
|
+
|
|
57
|
+
- Rango cómodo, no extremo: la tesitura sostenida importa más que la nota más alta
|
|
58
|
+
- Voice leading estricto: las voces internas se mueven lo mínimo
|
|
59
|
+
- Texto inteligible pide notas más largas y registro medio
|
|
60
|
+
- Vocales abiertas (a, o) para agudos y notas largas; cerradas (i, u) suenan tensas arriba
|
|
61
|
+
|
|
62
|
+
## Producción-aware
|
|
63
|
+
|
|
64
|
+
Si el material va a un mix con SFX y diálogo encima:
|
|
65
|
+
|
|
66
|
+
- Dejar espacio en 500 Hz-2 kHz cuando puede haber VO
|
|
67
|
+
- El sub (20-60 Hz) suele estar reservado a impactos — no llenarlo con música
|
|
68
|
+
- Los transientes agudos compiten con feedback de UI: si el arreglo tiene mucho hi-hat/percusión brillante, el UI se pierde
|
|
69
|
+
- Arreglos densos sobreviven mal a la compresión lossy de plataforma: el detalle en 6-20 kHz es lo primero que se va
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Ritmo y Groove
|
|
2
|
+
|
|
3
|
+
## Qué es el groove
|
|
4
|
+
|
|
5
|
+
La relación entre una grilla implícita y dónde caen los eventos reales. Sin grilla no hay groove; sin desvío tampoco.
|
|
6
|
+
|
|
7
|
+
Tres capas independientes:
|
|
8
|
+
|
|
9
|
+
1. **Pulso** — el tempo y su subdivisión
|
|
10
|
+
2. **Patrón** — qué subdivisiones se atacan
|
|
11
|
+
3. **Feel** — cuánto se corren los ataques respecto de la grilla, y cómo se acentúan
|
|
12
|
+
|
|
13
|
+
Un patrón correcto con feel plano suena a máquina. El mismo patrón con los backbeats 8-15 ms atrasados y acentuados suena a banda.
|
|
14
|
+
|
|
15
|
+
## Recursos rítmicos
|
|
16
|
+
|
|
17
|
+
| Recurso | Qué hace |
|
|
18
|
+
|---|---|
|
|
19
|
+
| **Síncopa** | Acentuar una subdivisión débil. El motor de casi todo groove popular |
|
|
20
|
+
| **Anticipación** | Adelantar un ataque medio pulso antes del tiempo fuerte |
|
|
21
|
+
| **Hemiola** | Agrupar 3 donde el metro dice 2 (o al revés). Tensión sin cambiar tempo |
|
|
22
|
+
| **Desplazamiento** | Correr un patrón entero N subdivisiones. Mismo material, otro lugar |
|
|
23
|
+
| **Aumentación / disminución** | Duplicar o partir las duraciones del patrón |
|
|
24
|
+
| **Silencio en el downbeat** | El recurso más fuerte y el menos usado |
|
|
25
|
+
| **Polirritmia** | Dos ciclos de distinta longitud simultáneos (3:2, 4:3). El compuesto se repite cada MCM |
|
|
26
|
+
| **Cross-rhythm** | El acento contradice el metro sostenidamente |
|
|
27
|
+
|
|
28
|
+
## Feel y microtiming
|
|
29
|
+
|
|
30
|
+
- **Swing** — la primera corchea del par se alarga. Cuantificable como ratio (50:50 recto, ~60:40 swing suave, 66:33 swing fuerte, hasta tresillo)
|
|
31
|
+
- **Laid back** — atacar unos ms después de la grilla. Sensación de relajación, peso
|
|
32
|
+
- **Push** — atacar antes. Urgencia, ansiedad
|
|
33
|
+
- **Flam** — dos instrumentos casi al unísono, corridos unos ms. Engorda el ataque
|
|
34
|
+
|
|
35
|
+
Un desvío de 10-30 ms es feel. Arriba de ~50 ms se percibe como error o como otra subdivisión.
|
|
36
|
+
|
|
37
|
+
## Métricas impares
|
|
38
|
+
|
|
39
|
+
- **5/4, 7/8** — se sienten como agrupaciones asimétricas (5 = 3+2 o 2+3; 7 = 2+2+3, 3+2+2...). La agrupación importa más que el número
|
|
40
|
+
- **Métrica mixta** — alternar compases. Funciona si el patrón de alternancia es reconocible
|
|
41
|
+
- **Metro aditivo** — construir por células (2+2+3) en vez de dividir el compás
|
|
42
|
+
|
|
43
|
+
Para juegos, las métricas impares complican la sincronización de música adaptativa: los sync points en compás/beat asumen un metro estable. Si el metro cambia, definir los puntos de transición en cues explícitos.
|
|
44
|
+
|
|
45
|
+
## Groove en el arreglo
|
|
46
|
+
|
|
47
|
+
- **Interlock** — cada instrumento ocupa subdivisiones que los otros dejan libres. El groove emerge del conjunto, no de una parte
|
|
48
|
+
- **Densidad como dinámica** — más subdivisiones atacadas = más energía, sin subir volumen
|
|
49
|
+
- **Espacio** — el groove vive en los silencios. Un patrón con todas las subdivisiones llenas no groovea, machaca
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obsidian-bases
|
|
3
|
+
description: "Crea y edita archivos .base de Obsidian: vistas table/cards/list/map, filtros, formulas y summaries sobre las propiedades de las notas. Incluye migracion desde queries de Dataview. Triggers: obsidian bases, archivo .base, base de datos en obsidian, vista de notas, dashboard obsidian, migrar dataview."
|
|
4
|
+
argument-hint: "[create <descripcion> | explain <archivo.base> | migrate <query dataview>]"
|
|
5
|
+
category: "pkm"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Write, Edit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Obsidian Bases - Vistas nativas
|
|
11
|
+
|
|
12
|
+
Bases es el core plugin de Obsidian (1.9+) que convierte las propiedades de las notas en tablas y cards vivas. No se instala nada. Adaptado de `kepano/obsidian-skills` al formato de este repo.
|
|
13
|
+
|
|
14
|
+
Modo: `$ARGUMENTS`
|
|
15
|
+
|
|
16
|
+
La referencia completa de sintaxis está en `references/bases-syntax.md`. Leela antes de escribir un `.base`: la mitad de los errores son de quoting de YAML, no de lógica.
|
|
17
|
+
|
|
18
|
+
## Fase 1 - Verificar que Bases esté disponible
|
|
19
|
+
|
|
20
|
+
Leer `.obsidian/core-plugins.json` del vault. Si `bases` no está habilitado, decirlo y ofrecer las dos salidas: habilitarlo (es core, no requiere instalar) o resolver la vista con una tabla markdown estática. **Nunca escribir un `.base` en un vault que no lo tiene habilitado:** queda como un archivo que Obsidian muestra en crudo.
|
|
21
|
+
|
|
22
|
+
## Fase 2 - Modos
|
|
23
|
+
|
|
24
|
+
### `create` - Vista nueva
|
|
25
|
+
1. Entender qué pregunta responde la vista. Una vista sin pregunta concreta termina siendo una tabla de todo el vault que nadie mira.
|
|
26
|
+
2. **Verificar que las propiedades existan**: `Grep` en el frontmatter del vault por los campos que vas a filtrar. Filtrar por una propiedad que ninguna nota declara produce una vista vacía y parece un bug de Bases.
|
|
27
|
+
3. Escribir el `.base` en `Bases/`, con approval antes de crear el archivo.
|
|
28
|
+
4. Avisar que hay que abrirlo en Obsidian para confirmar que renderiza: la sintaxis se valida ahí, no acá.
|
|
29
|
+
|
|
30
|
+
### `explain` - Leer un `.base` existente
|
|
31
|
+
Traducir el archivo a lenguaje llano: qué notas entran, qué columnas muestra, qué calcula cada fórmula. Read-only.
|
|
32
|
+
|
|
33
|
+
### `migrate` - Desde Dataview
|
|
34
|
+
Traducir la query, y **decir explícitamente qué no se puede traducir**. Bases no cubre campos inline (`campo:: valor` en medio de la nota) ni texto computado ni `dataviewjs`. Si la query depende de eso, la respuesta honesta es que se quede en Dataview: una migración a medias deja al usuario con una vista que miente.
|
|
35
|
+
|
|
36
|
+
## Estructura de un `.base`
|
|
37
|
+
|
|
38
|
+
```yaml
|
|
39
|
+
filters:
|
|
40
|
+
and:
|
|
41
|
+
- file.inFolder("03_Resources")
|
|
42
|
+
- 'type == "atomic"'
|
|
43
|
+
|
|
44
|
+
formulas:
|
|
45
|
+
edad_dias: '(now() - file.mtime).days'
|
|
46
|
+
|
|
47
|
+
properties:
|
|
48
|
+
formula.edad_dias:
|
|
49
|
+
displayName: "Dias sin tocar"
|
|
50
|
+
|
|
51
|
+
views:
|
|
52
|
+
- type: table
|
|
53
|
+
name: "Notas atomicas"
|
|
54
|
+
filters:
|
|
55
|
+
not:
|
|
56
|
+
- file.hasTag("archivada")
|
|
57
|
+
order:
|
|
58
|
+
- file.name
|
|
59
|
+
- created
|
|
60
|
+
- formula.edad_dias
|
|
61
|
+
summaries:
|
|
62
|
+
formula.edad_dias: Average
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Los cinco bloques top-level son `filters`, `formulas`, `properties`, `summaries` y `views`. Los filtros globales aplican a todas las vistas; cada vista puede agregar los suyos.
|
|
66
|
+
|
|
67
|
+
## Los tres errores que se repiten
|
|
68
|
+
|
|
69
|
+
1. **Quoting de YAML.** Cualquier expresión con `:`, `{`, `}`, `[`, `]` va entre comillas. Si la expresión ya tiene comillas dobles adentro, el string va en comillas simples: `'if(done, "Si", "No")'`.
|
|
70
|
+
2. **Duraciones.** Restar dos fechas da una `Duration`, no un número: hay que acceder al campo antes de operar (`.days`, `.hours`). `round(now() - file.mtime)` falla; `(now() - file.mtime).days` funciona.
|
|
71
|
+
3. **Nulls.** Una propiedad ausente rompe la fórmula. Envolver en `if(propiedad, ...)` cuando el campo puede faltar, que en un vault real es casi siempre.
|
|
72
|
+
|
|
73
|
+
Una fórmula referenciada en `order` que no está declarada en `formulas` falla en silencio: la columna simplemente no aparece.
|
|
74
|
+
|
|
75
|
+
## Reglas
|
|
76
|
+
|
|
77
|
+
- `file.backlinks` es caro: no lo pongas en una vista que se abre seguido.
|
|
78
|
+
- No crear una vista que dependa de una propiedad que el vault todavía no usa: primero se agrega al contrato de frontmatter del `CLAUDE.md`.
|
|
79
|
+
- Un `.base` por pregunta. Un archivo con ocho vistas es un dashboard que nadie lee.
|
|
80
|
+
- Pedí approval antes de escribir o sobrescribir un `.base`.
|
|
81
|
+
- Sin guiones largos.
|
|
82
|
+
|
|
83
|
+
## Handoff
|
|
84
|
+
|
|
85
|
+
Base READY cuando el archivo existe y el usuario confirmó que renderiza en Obsidian. Si la vista necesitaba campos que las notas no tienen, el siguiente paso es actualizar el contrato de frontmatter con `/second-brain` y completar las notas con `/vault-tidy frontmatter`.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Bases Syntax Reference
|
|
2
|
+
|
|
3
|
+
Referencia de la sintaxis de los archivos `.base` de Obsidian (core plugin, 1.9+). Fuente: `https://obsidian.md/help/bases/syntax`.
|
|
4
|
+
|
|
5
|
+
## Bloques top-level
|
|
6
|
+
|
|
7
|
+
| Bloque | Qué hace |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `filters` | Condiciones globales, aplican a todas las vistas. Opcional. |
|
|
10
|
+
| `formulas` | Propiedades calculadas, disponibles en todas las vistas. |
|
|
11
|
+
| `properties` | Configuración de display de una propiedad (`displayName`). |
|
|
12
|
+
| `summaries` | Fórmulas de agregación propias. |
|
|
13
|
+
| `views` | Lista de vistas: cómo se renderizan los datos. |
|
|
14
|
+
|
|
15
|
+
Sin `filters`, la base incluye **todos** los archivos del vault.
|
|
16
|
+
|
|
17
|
+
## Filtros
|
|
18
|
+
|
|
19
|
+
Un objeto de filtro contiene `and`, `or` o `not`, y cada uno una lista de objetos de filtro o de statements (strings). Se anidan.
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
filters:
|
|
23
|
+
or:
|
|
24
|
+
- file.hasTag("tag")
|
|
25
|
+
- and:
|
|
26
|
+
- file.hasTag("book")
|
|
27
|
+
- file.hasLink("Textbook")
|
|
28
|
+
- not:
|
|
29
|
+
- file.hasTag("book")
|
|
30
|
+
- file.inFolder("Required Reading")
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Operadores:
|
|
34
|
+
|
|
35
|
+
- Aritméticos: `+`, `-`, `*`, `/`, `%`, `()`
|
|
36
|
+
- Comparación: `==`, `!=`, `>`, `<`, `>=`, `<=`
|
|
37
|
+
- Booleanos: `!`, `&&`, `||`
|
|
38
|
+
- Fechas: sumar o restar duraciones con `+` y `-`. Unidades: `y/year/years`, `M/month/months`, `w/week/weeks`, `d/day/days`, `h/hour/hours`, `m/minute/minutes`, `s/second/seconds`
|
|
39
|
+
|
|
40
|
+
## Propiedades
|
|
41
|
+
|
|
42
|
+
Tres orígenes:
|
|
43
|
+
|
|
44
|
+
| Forma | Origen |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `note.propiedad` o `propiedad` | frontmatter de la nota |
|
|
47
|
+
| `file.*` | metadata del archivo |
|
|
48
|
+
| `formula.nombre` | fórmula declarada en `formulas` |
|
|
49
|
+
|
|
50
|
+
Propiedades de archivo: `file.name`, `file.path`, `file.folder`, `file.ext`, `file.size`, `file.ctime`, `file.mtime`, `file.tags`, `file.links`, `file.embeds`, `file.backlinks`.
|
|
51
|
+
|
|
52
|
+
`file.backlinks` es costoso de calcular: evitarlo en vistas de uso frecuente.
|
|
53
|
+
|
|
54
|
+
Tipos de dato: strings (entre comillas), números, booleanos (`true`/`false`), fechas, duraciones, objetos, listas, y files/links.
|
|
55
|
+
|
|
56
|
+
## Fórmulas
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
formulas:
|
|
60
|
+
formatted_price: 'if(price, price.toFixed(2) + " dollars")'
|
|
61
|
+
ppu: "(price / age).toFixed(2)"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Funciones habituales: `if()`, `date()`, `now()`, `duration()`, además de los métodos de cada tipo (`toFixed`, `round`, `mean`).
|
|
65
|
+
|
|
66
|
+
Tres trampas:
|
|
67
|
+
|
|
68
|
+
1. **Duraciones:** una resta de fechas devuelve `Duration`. Hay que acceder al campo numérico antes de operar: `(now() - file.mtime).days`, no `round(now() - file.mtime)`.
|
|
69
|
+
2. **Nulls:** una propiedad ausente rompe la fórmula. Envolver en `if(propiedad, ...)`.
|
|
70
|
+
3. **Referencias:** una `formula.x` usada en `order` pero no declarada en `formulas` falla en silencio, la columna no aparece.
|
|
71
|
+
|
|
72
|
+
## Vistas
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
views:
|
|
76
|
+
- type: table
|
|
77
|
+
name: "My table"
|
|
78
|
+
limit: 10
|
|
79
|
+
groupBy:
|
|
80
|
+
property: note.age
|
|
81
|
+
direction: DESC
|
|
82
|
+
filters:
|
|
83
|
+
and:
|
|
84
|
+
- 'status != "done"'
|
|
85
|
+
- or:
|
|
86
|
+
- "formula.ppu > 5"
|
|
87
|
+
- "price > 2.1"
|
|
88
|
+
order:
|
|
89
|
+
- file.name
|
|
90
|
+
- note.age
|
|
91
|
+
- formula.ppu
|
|
92
|
+
summaries:
|
|
93
|
+
formula.ppu: Average
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Claves de una vista: `type`, `name`, `limit`, `groupBy`, `filters`, `order`, `summaries`.
|
|
97
|
+
|
|
98
|
+
Tipos: `table` (columnas), `cards` (galería), `list` (lista simple), `map` (geográfico).
|
|
99
|
+
|
|
100
|
+
## Summaries por default
|
|
101
|
+
|
|
102
|
+
- Numéricos: Average, Min, Max, Sum, Range, Median, Stddev
|
|
103
|
+
- Fechas: Earliest, Latest
|
|
104
|
+
- Booleanos: Checked, Unchecked
|
|
105
|
+
- Cualquier tipo: Empty, Filled, Unique
|
|
106
|
+
|
|
107
|
+
Propios:
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
summaries:
|
|
111
|
+
customAverage: 'values.mean().round(3)'
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Quoting de YAML
|
|
115
|
+
|
|
116
|
+
Cualquier expresión que contenga `:`, `{`, `}`, `[`, `]` va entre comillas. Si la expresión tiene comillas dobles adentro, el string va entre comillas simples:
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
formulas:
|
|
120
|
+
label: 'if(done, "Yes", "No")'
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Es la causa número uno de un `.base` que no carga.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obsidian-canvas
|
|
3
|
+
description: "Crea y edita archivos .canvas (JSON Canvas): nodos de nota, texto, archivo y link, grupos y edges con direccion y color. Triggers: obsidian canvas, json canvas, mapa visual, diagrama de notas, archivo .canvas, pizarra obsidian."
|
|
4
|
+
argument-hint: "[create <descripcion> | explain <archivo.canvas> | edit <archivo.canvas>]"
|
|
5
|
+
category: "pkm"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Write, Edit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Obsidian Canvas - JSON Canvas
|
|
11
|
+
|
|
12
|
+
Un `.canvas` es JSON plano con dos arrays: `nodes` y `edges`. El formato es JSON Canvas, un spec abierto, así que el archivo se puede generar y leer sin Obsidian. Adaptado de `kepano/obsidian-skills` al formato de este repo.
|
|
13
|
+
|
|
14
|
+
Modo: `$ARGUMENTS`
|
|
15
|
+
|
|
16
|
+
## Modos
|
|
17
|
+
|
|
18
|
+
- **`create`**: generar un canvas nuevo desde una descripción o desde un conjunto de notas del vault.
|
|
19
|
+
- **`explain`**: leer un canvas y describir su estructura en texto. Read-only.
|
|
20
|
+
- **`edit`**: agregar o reacomodar nodos de un canvas existente. Pedí approval antes de escribir, y avisá que un canvas abierto en Obsidian sobrescribe el archivo al guardar: hay que cerrarlo antes.
|
|
21
|
+
|
|
22
|
+
## Estructura
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"nodes": [
|
|
27
|
+
{
|
|
28
|
+
"id": "n1",
|
|
29
|
+
"type": "file",
|
|
30
|
+
"file": "03_Resources/Indices parciales.md",
|
|
31
|
+
"x": 0, "y": 0, "width": 400, "height": 300
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "n2",
|
|
35
|
+
"type": "text",
|
|
36
|
+
"text": "Hipotesis: el costo esta en las lecturas",
|
|
37
|
+
"x": 480, "y": 0, "width": 300, "height": 120,
|
|
38
|
+
"color": "4"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "g1",
|
|
42
|
+
"type": "group",
|
|
43
|
+
"label": "Investigacion",
|
|
44
|
+
"x": -40, "y": -60, "width": 900, "height": 440
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"edges": [
|
|
48
|
+
{
|
|
49
|
+
"id": "e1",
|
|
50
|
+
"fromNode": "n1", "fromSide": "right",
|
|
51
|
+
"toNode": "n2", "toSide": "left",
|
|
52
|
+
"label": "sugiere"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Nodos.** Campos obligatorios: `id`, `type`, `x`, `y`, `width`, `height`. Tipos:
|
|
59
|
+
|
|
60
|
+
| `type` | Campo propio |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `text` | `text` (markdown) |
|
|
63
|
+
| `file` | `file` (ruta en el vault), `subpath` opcional para un heading o bloque |
|
|
64
|
+
| `link` | `url` |
|
|
65
|
+
| `group` | `label`, `background`, `backgroundStyle` opcionales |
|
|
66
|
+
|
|
67
|
+
**Edges.** Obligatorio `id`, `fromNode`, `toNode`. Opcionales: `fromSide` y `toSide` (`top`, `right`, `bottom`, `left`), `fromEnd`/`toEnd` (`none`, `arrow`), `label`, `color`.
|
|
68
|
+
|
|
69
|
+
**Color.** Un preset `"1"` a `"6"` (rojo, naranja, amarillo, verde, cyan, violeta) o un hex `"#ff0000"`.
|
|
70
|
+
|
|
71
|
+
**Coordenadas.** El eje Y crece hacia abajo. Un grupo no contiene nodos por referencia: los contiene **geométricamente**, por solaparse con su rectángulo. Si movés un nodo fuera del rectángulo, sale del grupo.
|
|
72
|
+
|
|
73
|
+
## Reglas para generar uno usable
|
|
74
|
+
|
|
75
|
+
- **Los `id` tienen que ser únicos.** Si se repiten, Obsidian se queda con uno solo y el resto desaparece sin error.
|
|
76
|
+
- **Layout en grilla, no apilado en el origen.** Separar los nodos al menos 60px: un canvas con todo en `x: 0, y: 0` se abre como una pila ilegible y reacomodarlo a mano cuesta más que generarlo de nuevo.
|
|
77
|
+
- **Verificar que cada `file` exista** antes de escribir el canvas: un nodo que apunta a una nota inexistente renderiza vacío.
|
|
78
|
+
- Un canvas es para pensar visualmente, no para almacenar conocimiento. Lo que se aprende en un canvas se escribe después como nota atómica.
|
|
79
|
+
|
|
80
|
+
Canvas READY cuando el JSON es válido, los ids son únicos, las rutas existen y el usuario confirmó que abre bien en Obsidian.
|
|
81
|
+
|
|
82
|
+
## Reglas
|
|
83
|
+
|
|
84
|
+
- No inventar campos que el spec no define: Obsidian los ignora y ensucia el archivo.
|
|
85
|
+
- No reescribir un canvas entero para agregar un nodo: `Edit` sobre el array.
|
|
86
|
+
- Pedí approval antes de escribir o sobrescribir un `.canvas`, y verificá que no esté abierto en Obsidian.
|
|
87
|
+
- Sin guiones largos en labels ni en nodos de texto.
|
|
88
|
+
|
|
89
|
+
## Handoff
|
|
90
|
+
|
|
91
|
+
Si lo que hacía falta era una vista tabular y no un mapa visual, el skill correcto es `/obsidian-bases`. Cuando el canvas dejó una conclusión, el siguiente paso es `/zettel` para escribirla como nota atómica: el canvas es el andamio, la nota es lo que queda.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obsidian-markdown
|
|
3
|
+
description: "Sintaxis de Obsidian Flavored Markdown: wikilinks, embeds, callouts, block IDs, propiedades, tags, highlights, math y mermaid. Valida o corrige una nota. Triggers: sintaxis obsidian, wikilink, callout, embed, block id, obsidian markdown, esto renderiza bien en obsidian, frontmatter obsidian."
|
|
4
|
+
argument-hint: "[reference | check <archivo> | fix <archivo>]"
|
|
5
|
+
category: "pkm"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Write, Edit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Obsidian Markdown - Sintaxis nativa
|
|
11
|
+
|
|
12
|
+
Obsidian extiende CommonMark y GFM. Este skill cubre **solo las extensiones propias de Obsidian**: el markdown estándar (títulos, negrita, listas, tablas, código) se da por sabido. Adaptado de `kepano/obsidian-skills` al formato de este repo.
|
|
13
|
+
|
|
14
|
+
Modo y archivo: `$ARGUMENTS`
|
|
15
|
+
|
|
16
|
+
## Modos
|
|
17
|
+
|
|
18
|
+
- **`reference`** (default): responder la duda de sintaxis con la tabla de abajo, sin tocar archivos.
|
|
19
|
+
- **`check <archivo>`**: leer la nota y reportar qué no va a renderizar. Read-only.
|
|
20
|
+
- **`fix <archivo>`**: corregir lo que `check` encontró. Pedí approval antes de escribir, mostrando el diff propuesto.
|
|
21
|
+
|
|
22
|
+
## Links y embeds
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
[[Nota]] link interno
|
|
26
|
+
[[Nota|Texto visible]] alias
|
|
27
|
+
[[Nota#Titulo]] link a un heading
|
|
28
|
+
[[Nota#^block-id]] link a un bloque
|
|
29
|
+
[[#Titulo en esta nota]] link interno a la misma nota
|
|
30
|
+
|
|
31
|
+
![[Nota]] embed de la nota completa
|
|
32
|
+
![[Nota#Titulo]] embed de una seccion
|
|
33
|
+
![[imagen.png|300]] embed con ancho
|
|
34
|
+
![[doc.pdf#page=3]] embed de una pagina de PDF
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Un block ID se define agregando `^mi-id` al final del párrafo. En listas y citas va en una línea aparte después del bloque.
|
|
38
|
+
|
|
39
|
+
**`[[wikilinks]]` para lo interno, `[texto](url)` solo para URLs externas.** No es estilo: Obsidian actualiza los wikilinks cuando renombrás una nota dentro de la app, y no toca los markdown links.
|
|
40
|
+
|
|
41
|
+
## Callouts
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
> [!note]
|
|
45
|
+
> Callout basico.
|
|
46
|
+
|
|
47
|
+
> [!warning] Titulo propio
|
|
48
|
+
> Con titulo custom.
|
|
49
|
+
|
|
50
|
+
> [!faq]- Colapsado por default
|
|
51
|
+
> El `-` lo colapsa, el `+` lo abre.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Tipos: `note`, `tip`, `info`, `warning`, `danger`, `bug`, `example`, `quote`, `success`, `failure`, `question`, `abstract`, `todo`. Un tipo inventado renderiza como `note` sin avisar, y ese es el error de callout más común.
|
|
55
|
+
|
|
56
|
+
## Propiedades (frontmatter)
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
---
|
|
60
|
+
title: Mi nota
|
|
61
|
+
date: 2026-07-27
|
|
62
|
+
tags:
|
|
63
|
+
- proyecto
|
|
64
|
+
- activo
|
|
65
|
+
aliases:
|
|
66
|
+
- Nombre alternativo
|
|
67
|
+
cssclasses:
|
|
68
|
+
- custom
|
|
69
|
+
---
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`tags`, `aliases` y `cssclasses` son las tres propiedades que Obsidian entiende de forma nativa. El resto son campos propios y los consume Bases o Dataview.
|
|
73
|
+
|
|
74
|
+
## Resto de la sintaxis propia
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
#tag #anidado/tag tags inline (no pueden empezar con numero)
|
|
78
|
+
==resaltado== highlight
|
|
79
|
+
%%comentario%% invisible en lectura
|
|
80
|
+
$e^{i\pi}+1=0$ y $$...$$ math LaTeX inline y en bloque
|
|
81
|
+
texto[^1] / ^[nota inline] footnotes
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Los bloques ` ```mermaid ` renderizan diagramas nativamente.
|
|
85
|
+
|
|
86
|
+
## Qué revisa `check`
|
|
87
|
+
|
|
88
|
+
| Check | Qué busca | Verdict |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| Tipo de callout | `> [!tipo]` con un tipo que no existe | FAIL: renderiza como `note` |
|
|
91
|
+
| Links externos como wikilink | `[[https://...]]` | FAIL: no resuelve |
|
|
92
|
+
| Links internos como markdown | `[texto](Nota.md)` dentro del vault | CONCERNS: se rompe al renombrar |
|
|
93
|
+
| Frontmatter | Abre con `---` en la primera línea y cierra | FAIL si no cierra: Obsidian lo muestra como texto |
|
|
94
|
+
| `tags` con `#` en frontmatter | `tags: [#foo]` | CONCERNS: el `#` no va en frontmatter |
|
|
95
|
+
| Block IDs | Duplicados en la misma nota | FAIL: el link resuelve al primero |
|
|
96
|
+
| Embeds de imagen | Ancho no numérico (`![[img.png|grande]]`) | CONCERNS: se ignora |
|
|
97
|
+
| Espacios en `[[ Nota ]]` | Espacios internos al principio o final del target | CONCERNS: puede no resolver |
|
|
98
|
+
|
|
99
|
+
Nota COMPLIANT cuando ninguna de estas falla.
|
|
100
|
+
|
|
101
|
+
## Reglas
|
|
102
|
+
|
|
103
|
+
- No reformatear la nota entera cuando el pedido es arreglar un detalle: `Edit` sobre citas textuales, no `Write` del archivo completo.
|
|
104
|
+
- No convertir markdown links externos a wikilinks: los externos van como markdown link.
|
|
105
|
+
- No inventar tipos de callout ni propiedades que Obsidian no reconoce.
|
|
106
|
+
- Sin guiones largos en lo que agregues.
|
|
107
|
+
|
|
108
|
+
## Handoff
|
|
109
|
+
|
|
110
|
+
Si la duda era de vistas agregadas y no de sintaxis de nota, el skill correcto es `/obsidian-bases`; si era de un canvas, `/obsidian-canvas`. Cuando la nota queda COMPLIANT, seguí con el flujo que la produjo (`/zettel`, `/review-dump` o `/vault-clip`).
|