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.
Files changed (86) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +6 -4
  3. package/agents/audio/audio-director.md +90 -0
  4. package/agents/audio/audio-programmer.md +97 -0
  5. package/agents/audio/audio-qa.md +95 -0
  6. package/agents/audio/composer.md +88 -0
  7. package/agents/audio/technical-sound-designer.md +90 -0
  8. package/agents/audio/voice-director.md +96 -0
  9. package/docs/SKILLS-CATALOG.md +45 -2
  10. package/docs/USER-GUIDE.md +2 -2
  11. package/package.json +1 -1
  12. package/profiles/audio.yaml +45 -0
  13. package/profiles/second-brain.yaml +37 -0
  14. package/rules/gamedev/audio-code.md +45 -0
  15. package/rules/vault-conventions.md +144 -0
  16. package/skills/adaptive-music/SKILL.md +171 -0
  17. package/skills/adaptive-music/references/anti-patterns.md +53 -0
  18. package/skills/audio-audit/SKILL.md +164 -0
  19. package/skills/audio-audit/references/anti-patterns.md +65 -0
  20. package/skills/audio-audit/scripts/check_assets.py +208 -0
  21. package/skills/audio-bible/SKILL.md +119 -0
  22. package/skills/audio-bible/references/anti-patterns.md +39 -0
  23. package/skills/audio-mix/SKILL.md +151 -0
  24. package/skills/audio-mix/references/anti-patterns.md +65 -0
  25. package/skills/audio-spec/SKILL.md +107 -0
  26. package/skills/audio-spec/references/anti-patterns.md +45 -0
  27. package/skills/brain-dump/SKILL.md +53 -0
  28. package/skills/hub-note/SKILL.md +68 -0
  29. package/skills/middleware-integration/SKILL.md +186 -0
  30. package/skills/middleware-integration/references/anti-patterns.md +69 -0
  31. package/skills/midi-compose/SKILL.md +136 -0
  32. package/skills/midi-compose/references/smf-format.md +129 -0
  33. package/skills/midi-compose/scripts/compose_midi.py +326 -0
  34. package/skills/midi-compose/templates/example-composition.json +69 -0
  35. package/skills/music-composition/SKILL.md +106 -0
  36. package/skills/music-composition/references/form.md +57 -0
  37. package/skills/music-composition/references/game-music.md +82 -0
  38. package/skills/music-composition/references/harmony.md +82 -0
  39. package/skills/music-composition/references/melody.md +48 -0
  40. package/skills/music-composition/references/orchestration.md +69 -0
  41. package/skills/music-composition/references/rhythm-groove.md +49 -0
  42. package/skills/obsidian-bases/SKILL.md +85 -0
  43. package/skills/obsidian-bases/references/bases-syntax.md +123 -0
  44. package/skills/obsidian-canvas/SKILL.md +91 -0
  45. package/skills/obsidian-markdown/SKILL.md +110 -0
  46. package/skills/pdf-generator/scripts/fill_inspect.py +2 -0
  47. package/skills/pdf-generator/scripts/render_body.py +2 -0
  48. package/skills/procedural-audio/SKILL.md +157 -0
  49. package/skills/procedural-audio/references/anti-patterns.md +45 -0
  50. package/skills/review-dump/SKILL.md +108 -0
  51. package/skills/review-monthly/SKILL.md +56 -0
  52. package/skills/review-weekly/SKILL.md +91 -0
  53. package/skills/second-brain/SKILL.md +211 -0
  54. package/skills/second-brain/hooks/hooks.json +16 -0
  55. package/skills/second-brain/hooks/validate-note.sh +85 -0
  56. package/skills/second-brain/references/cross-project.md +57 -0
  57. package/skills/second-brain/references/templates/Atomic.md +22 -0
  58. package/skills/second-brain/references/templates/Daily.md +25 -0
  59. package/skills/second-brain/references/templates/Dashboard.base +70 -0
  60. package/skills/second-brain/references/templates/Dump.md +11 -0
  61. package/skills/second-brain/references/templates/Hub.md +22 -0
  62. package/skills/second-brain/references/templates/Monthly.md +29 -0
  63. package/skills/second-brain/references/templates/Weekly.md +29 -0
  64. package/skills/second-brain/references/templates/codebases.md +37 -0
  65. package/skills/second-brain/references/templates/hot.md +37 -0
  66. package/skills/second-brain/references/templates/vault-CLAUDE.md +127 -0
  67. package/skills/sfx-design/SKILL.md +130 -0
  68. package/skills/sfx-design/references/anti-patterns.md +53 -0
  69. package/skills/spatial-audio/SKILL.md +139 -0
  70. package/skills/spatial-audio/references/anti-patterns.md +53 -0
  71. package/skills/ui-sound-design/SKILL.md +133 -0
  72. package/skills/ui-sound-design/references/anti-patterns.md +57 -0
  73. package/skills/vault-audit/SKILL.md +72 -0
  74. package/skills/vault-audit/scripts/vault_audit.py +539 -0
  75. package/skills/vault-clip/SKILL.md +73 -0
  76. package/skills/vault-recall/SKILL.md +82 -0
  77. package/skills/vault-recall/scripts/vault_index.py +626 -0
  78. package/skills/vault-tidy/SKILL.md +76 -0
  79. package/skills/voice-pipeline/SKILL.md +150 -0
  80. package/skills/voice-pipeline/references/anti-patterns.md +69 -0
  81. package/skills/xlsx-generator/scripts/formula_check.py +2 -0
  82. package/skills/xlsx-generator/scripts/libreoffice_recalc.py +2 -0
  83. package/skills/xlsx-generator/scripts/xlsx_add_column.py +2 -0
  84. package/skills/xlsx-generator/scripts/xlsx_insert_row.py +2 -0
  85. package/skills/xlsx-generator/scripts/xlsx_reader.py +2 -0
  86. package/skills/zettel/SKILL.md +66 -0
@@ -27,6 +27,8 @@ Block types:
27
27
  Exit codes: 0 success, 1 bad args/missing file, 2 missing dep, 3 render error
28
28
  """
29
29
 
30
+ from __future__ import annotations
31
+
30
32
  import argparse
31
33
  import io
32
34
  import json
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: procedural-audio
3
+ description: "Audio procedural: footsteps, viento, ambientes y superficies por sintesis en vez de samples. Decidir cuando conviene, disenar el modelo y presupuestar CPU. Usar para: sonido procedural, footsteps sinteticos, ambiente generativo, reducir memoria de audio."
4
+ category: "audio"
5
+ argument-hint: "[decide | footsteps | wind | ambience | budget]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # procedural-audio — Síntesis en vez de Samples
10
+
11
+ Resuelve por generación los sistemas de audio donde samplear no escala: alta frecuencia de disparo cruzada con muchas dimensiones de variación.
12
+
13
+ ## Cuándo usar
14
+
15
+ - El conteo de assets explota: superficies × intensidades × variantes
16
+ - El presupuesto de memoria no da para la variación que el sistema necesita
17
+ - La repetición se escucha aunque haya muchas variantes
18
+ - El sonido tiene que responder de forma continua a un parámetro (velocidad, material, tamaño)
19
+
20
+ ## Cuándo NO usar
21
+
22
+ Síntesis no es gratis: cuesta CPU por frame y trabajo de tuning. No la uses para sonidos hero (el arma principal, el tema de victoria) — ahí un sample bien diseñado gana en calidad y control. La síntesis rinde en lo frecuente y variable, no en lo memorable y único.
23
+
24
+ ---
25
+
26
+ ## Modos
27
+
28
+ | Modo | Qué hace |
29
+ |---|---|
30
+ | `decide` | Solo la evaluación: ¿conviene sintetizar o samplear? Cuenta de assets y presupuesto |
31
+ | `footsteps` | Diseña el modelo de pasos con resonancias por superficie |
32
+ | `wind` | Diseña el modelo de viento por capas |
33
+ | `ambience` | Diseña el ambiente híbrido: bed sampleado + detalle procedural |
34
+ | `budget` | Solo el presupuesto de CPU y dónde corre cada modelo |
35
+
36
+ ## La decisión
37
+
38
+ Evaluar dos ejes: **frecuencia de disparo** y **dimensiones de variación**.
39
+
40
+ | | Pocas dimensiones | Muchas dimensiones |
41
+ |---|---|---|
42
+ | **Baja frecuencia** | Sample. Siempre | Sample con layer swapping |
43
+ | **Alta frecuencia** | Sample + round-robin | **Procedural** |
44
+
45
+ El caso canónico: footsteps sobre 6 superficies × 3 intensidades, con 20 variantes cada uno, son **360 archivos (~180 MB)** — y a pesar de eso la repetición se escucha en sesiones largas. Un modelo procedural son **~50 KB** y variación infinita.
46
+
47
+ Antes de comprometerte, hacé la cuenta explícita:
48
+
49
+ ```
50
+ assets = superficies × intensidades × variantes
51
+ memoria ≈ assets × tamaño_promedio
52
+ ```
53
+
54
+ Si el resultado es de tres dígitos en archivos, la síntesis ya se justifica sola.
55
+
56
+ ---
57
+
58
+ ## Presupuesto de CPU
59
+
60
+ Esto es lo que decide si el modelo entra o no. Costos de referencia por fuente:
61
+
62
+ | Operación | Costo |
63
+ |---|---|
64
+ | Footstep procedural | ~1-2 ms |
65
+ | Síntesis de viento | ~0.5 ms/frame |
66
+ | Convolución HRTF (512 taps) | ~2 ms/fuente |
67
+ | Encode ambisónico | ~0.1 ms/fuente |
68
+ | Decode ambisónico a binaural | ~1 ms total |
69
+
70
+ **El presupuesto total de audio es 5-10% del frame time.** A 60 fps el frame son 16.6 ms, así que el audio entero dispone de ~0.8-1.7 ms. Un footstep procedural de 1-2 ms **no entra en un solo frame**: hay que amortizarlo (generar por adelantado, cachear el resultado, o generar en un thread de audio con buffer).
71
+
72
+ Ese es el error de cálculo más común: leer "1-2 ms por footstep" y asumir que se puede hacer inline en el update. En un callback de audio de 5-10 ms a 48 kHz / 512 samples hay margen; en el frame de render no.
73
+
74
+ ---
75
+
76
+ ## Modelo de footsteps
77
+
78
+ Tres componentes, cada uno con parámetros expuestos:
79
+
80
+ 1. **Impacto** — burst de ruido filtrado en la frecuencia de resonancia del material, envolvente muy corta
81
+ 2. **Resonancia del material** — filtro resonante en la frecuencia característica
82
+ 3. **Textura** — ruido con envolvente más larga: grava que se mueve, hojas, agua
83
+
84
+ **Frecuencias de resonancia por superficie:**
85
+
86
+ | Superficie | Frecuencia | Textura |
87
+ |---|---|---|
88
+ | Concreto | 150 Hz | Mínima, ataque seco |
89
+ | Madera | 250 Hz | Resonancia larga, crujido |
90
+ | Metal | 500 Hz | Cola muy larga, armónicos |
91
+ | Grava | 300 Hz | Ruido dominante, larga |
92
+
93
+ **Parámetros de entrada** desde gameplay, todos normalizados 0-1:
94
+
95
+ | Parámetro | Efecto |
96
+ |---|---|
97
+ | Material | Selecciona frecuencia y perfil de textura |
98
+ | Intensidad (velocidad) | Amplitud, brillo, duración del ataque |
99
+ | Peso del personaje | Frecuencia base, cantidad de sub |
100
+ | Humedad de superficie | Capa de agua, amortiguación de la resonancia |
101
+
102
+ La variación sale de randomizar levemente cada parámetro por paso, no de elegir entre archivos. Eso es lo que hace la variación infinita.
103
+
104
+ ## Modelo de viento
105
+
106
+ Ruido filtrado con modulación lenta, en capas:
107
+
108
+ - **Base** — ruido rosa con low-pass, cutoff modulado lento (0.05-0.2 Hz)
109
+ - **Ráfagas** — amplitud modulada por ruido de baja frecuencia, con picos ocasionales
110
+ - **Silbido** — filtro resonante en 800 Hz-2 kHz, solo cuando la intensidad supera un umbral
111
+ - **Detalle** — high-pass sutil que aparece con la intensidad
112
+
113
+ Parámetro principal: intensidad 0-1, mapeada a cutoff, profundidad de modulación y presencia de silbido. Un solo parámetro maneja de brisa a tormenta.
114
+
115
+ ## Ambientes
116
+
117
+ La síntesis pura de ambiente suele sonar sintética. El enfoque híbrido gana:
118
+
119
+ - **Bed** — sample loopeado largo (el único sample del sistema)
120
+ - **Detalle** — one-shots posicionados por lógica procedural: qué sonido, cada cuánto, desde dónde
121
+ - **Modulación** — filtro y volumen del bed manejados por parámetros de entorno (interior/exterior, clima, hora)
122
+
123
+ La sensación de "vivo" viene de la **distribución temporal y espacial** de los detalles, no de sintetizarlos. Un pájaro sampleado que aparece en posiciones y momentos impredecibles suena más vivo que uno sintetizado en loop fijo.
124
+
125
+ ---
126
+
127
+ ## Proceso
128
+
129
+ 1. **Hacer la cuenta** de assets y memoria; si no justifica, parar y usar samples
130
+ 2. **Presupuestar CPU** contra el 5-10% del frame, y decidir dónde corre (frame vs thread de audio vs precomputado)
131
+ 3. **Diseñar el modelo** por componentes con parámetros expuestos
132
+ 4. **Mapear los parámetros** de gameplay, normalizados y clampeados en el boundary
133
+ 5. **Definir el fallback** — qué suena si el modelo se desactiva por presupuesto en plataforma baja
134
+ 6. **Escribir** — preguntar "¿Escribo el diseño a `<path>`?" antes de usar Write
135
+
136
+ ### Fallback obligatorio
137
+
138
+ Toda plataforma tiene un piso. Si el modelo procedural no entra en la plataforma más baja del target, hace falta un camino de samples reducido. Decidirlo en el diseño, no cuando falla la certificación.
139
+
140
+ ---
141
+
142
+ ## Verdict
143
+
144
+ - **READY** — la cuenta justifica la síntesis, el presupuesto de CPU cierra con dónde corre, los parámetros están mapeados y hay fallback
145
+ - **CONCERNS** — el modelo está diseñado pero el presupuesto de CPU no se verificó en la plataforma más baja, o falta el fallback
146
+ - **BLOCKED** — no está claro el conteo de assets ni la frecuencia de disparo, así que no se puede decidir si conviene
147
+
148
+ ## Anti-patterns
149
+
150
+ > → Read references/anti-patterns.md
151
+
152
+ ## Next steps
153
+
154
+ - `/sfx-design` para los sonidos hero, que siguen siendo samples
155
+ - `/audio-audit` para medir el costo real de CPU en runtime, no el estimado
156
+ - `/middleware-integration` para exponer los parámetros como RTPCs
157
+ - `/spatial-audio` si las fuentes procedurales además se posicionan en 3D
@@ -0,0 +1,45 @@
1
+ # Audio Procedural — Anti-patterns
2
+
3
+ ## Síntesis por elegancia
4
+
5
+ Procedural no es mejor por ser procedural. Para un sonido hero, un sample bien diseñado gana en calidad, en control y en tiempo de producción. La síntesis rinde donde samplear no escala; en el resto es trabajo extra con peor resultado.
6
+
7
+ ## Confundir el presupuesto de frame con el de callback
8
+
9
+ "1-2 ms por footstep" leído como "se puede hacer inline en el update" es el error de cálculo más frecuente. El audio entero dispone de 0.8-1.7 ms por frame a 60 fps. El footstep hay que amortizarlo: precomputar, cachear, o generarlo en el thread de audio con buffer.
10
+
11
+ ## No medir, estimar
12
+
13
+ Los costos de referencia son puntos de partida, no promesas. El costo real depende de plataforma, compilador y qué más corre. Medir con el profiler del middleware antes de comprometer la arquitectura.
14
+
15
+ ## Un solo parámetro sin curva
16
+
17
+ Mapear intensidad 0-1 linealmente a amplitud produce una respuesta que se siente muerta en la mitad del rango. La percepción de volumen y de brillo es logarítmica: la curva importa tanto como el rango.
18
+
19
+ ## Parámetros sin clamp
20
+
21
+ Un valor de velocidad que llega en 3.7 cuando el modelo espera 0-1 produce ruido blanco a todo volumen. Normalizar y clampear en el boundary, del lado de gameplay.
22
+
23
+ ## Sintetizar el ambiente entero
24
+
25
+ El ambiente puramente sintético suena sintético. La sensación de "vivo" viene de la distribución temporal y espacial de los detalles, no de generarlos. Bed sampleado + detalles posicionados proceduralmente gana.
26
+
27
+ ## Variación sin límites perceptuales
28
+
29
+ Randomizar los parámetros con rango amplio produce pasos que suenan a materiales distintos entre sí. La variación tiene que ser suficiente para no repetir y chica para no romper la identidad.
30
+
31
+ ## Sin fallback de plataforma
32
+
33
+ El modelo entra cómodo en PC y no entra en el target más bajo. Si eso se descubre en certificación, hay que rehacer el sistema contra reloj. El camino de samples reducido se decide en el diseño.
34
+
35
+ ## Reemplazar todo de golpe
36
+
37
+ Migrar el sistema de audio entero a procedural en un paso hace imposible saber qué regresión vino de dónde. Un sistema por vez, midiendo antes y después.
38
+
39
+ ## Ignorar que sigue siendo una fuente 3D
40
+
41
+ Un footstep procedural igual necesita posición, atenuación y — si son varios personajes — límite de voces. La síntesis resuelve la memoria, no la gestión de voces.
42
+
43
+ ## Modelo sin parámetros expuestos
44
+
45
+ Si el modelo está hardcodeado, no es procedural: es un sample generado en runtime, con todos los costos y ninguna ventaja. El valor está en que gameplay pueda modularlo.
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: review-dump
3
+ description: "Procesa el dump del dia en el vault: clasifica item por item con confirmacion, actualiza hub files, rutea tareas a su nota y crea el daily con la sintesis. Triggers: review dump, procesar el dump, cerrar el dia, revisar el inbox, clasificar lo que capture, crear el daily."
4
+ argument-hint: "[today | YYYY-MM-DD]"
5
+ category: "pkm"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+
10
+ # Review Dump - Clasificar el día
11
+
12
+ Convertís el dump crudo en estructura. Es la sesión donde el vault se ordena, y la única del ciclo diario que escribe en varios lugares: por eso va item por item, con confirmación, y nunca en batch silencioso.
13
+
14
+ Día a procesar: `$ARGUMENTS` (default: hoy)
15
+
16
+ Aplica la rule `vault-conventions`.
17
+
18
+ **Rutas por rol:** los destinos se nombran por rol y la ruta real de cada uno sale del `## Rutas` del `CLAUDE.md` del vault. Los defaults entre paréntesis solo aplican si el vault no declara otra cosa.
19
+
20
+ ## Fase 1 - Preparación
21
+
22
+ 1. **Ubicar el vault** (`--vault`, env `OBSIDIAN_VAULT`, o directorio actual con `.obsidian/`) y leer su `CLAUDE.md`: de ahí salen la estructura real, el contrato de frontmatter y los plugins disponibles. Si no hay `CLAUDE.md`, ofrecer `/second-brain adopt` y parar.
23
+ 2. **Verificar git.** Si el vault es un repo y el árbol está sucio, avisarlo antes de escribir: esta corrida toca varias notas y git es el undo.
24
+ 3. **Leer el dump** `<inbox>/YYYY-MM-DD dump.md` (default `_inbox/`), aceptando también el nombre sin sufijo si el vault viene de antes. Si no existe, decirlo y ofrecer `/brain-dump`. Si ya existe el daily de ese día, avisar que se va a actualizar y no duplicar secciones.
25
+ 4. **Inventariar el vault una sola vez**, desde el índice cacheado y no con `Glob`:
26
+
27
+ ```bash
28
+ python .claude/skills/vault-recall/scripts/vault_index.py "<vault>" inventory --format text
29
+ ```
30
+
31
+ Devuelve hubs con sus alias, proyectos, areas, los dumps sin daily y las fechas del último weekly y monthly. Es lo que necesitás para proponer destinos reales, y su costo no crece con el vault: un `Glob` de cuatro carpetas sobre miles de notas mete un listado enorme en contexto en cada corrida. Si el vault usa otra estructura, pasar `--role nombre=ruta` con lo que diga el contrato. Sin el script, `Glob` de los roles `hubs`, `projects`, `areas` y `atomic`.
32
+
33
+ ## Fase 2 - Clasificación item por item
34
+
35
+ Para cada línea del dump, proponer un destino y esperar confirmación. Una línea por propuesta, agrupando las obvias para no hacer 30 preguntas:
36
+
37
+ | Lo que es | Destino |
38
+ |---|---|
39
+ | Tarea de un proyecto existente | La nota del proyecto en `<projects>` (default `01_Projects/`) |
40
+ | Tarea del día sin proyecto | Se queda en el dump |
41
+ | Idea que se sostiene sola | Nota atómica nueva en `<atomic>` (default `03_Resources/`), delegar a `/zettel` |
42
+ | Mención de una entidad con hub existente | Entrada en `## Historial` de ese hub |
43
+ | Mención de una entidad recurrente sin hub | Proponer hub nuevo (delegar a `/hub-note`) |
44
+ | URL para leer después | Se queda en el dump, o `/vault-clip` si el usuario lo quiere ahora |
45
+ | Ruido, duplicado, ya resuelto | Nada: se deja en el dump y se marca resuelto |
46
+
47
+ **Taxonomía de la captura.** Antes de decidir destino, clasificá qué **tipo** de captura es. Adaptado del patrón de organización por tipo en vez de por tema: el tema crea silos (una nota de psicología de la atención y una de por qué el contenido corto rinde nunca se cruzan), el tipo crea colisiones, y las colisiones son de donde sale lo original.
48
+
49
+ | Tipo | Qué es | Suele terminar en |
50
+ |---|---|---|
51
+ | observación | algo que noté, sin conclusión todavía | dump, o `atomic` si se sostiene sola |
52
+ | reacción | mi respuesta honesta a algo que leí o escuché | dump, o `## Historial` del hub del tema |
53
+ | patrón | el mismo principio apareciendo en dos dominios distintos | casi siempre `atomic`: es la materia prima del conocimiento |
54
+ | pregunta | algo que genuinamente no sé | dump, y al weekly como hilo abierto |
55
+ | número | un dato concreto, con su fuente | hub del tema, o `atomic` si el número prueba algo |
56
+
57
+ **Afilado.** Cada item que se mueve del dump se reescribe en una línea que se entienda sola: si todavía necesita explicación, no está afilada. "las notas sin links no se encuentran" es flojo; "una nota sin link entrante es invisible desde el día que se escribe" se sostiene sin contexto. El afilado se muestra al usuario para que confirme, porque es su idea y sus palabras.
58
+
59
+ Reglas de la clasificación:
60
+
61
+ - **Proponé, no decidas.** Cada movimiento se confirma. Si el usuario dice que no, el item se queda en el dump: quedarse es un destino válido y no es un fracaso.
62
+ - **Una entidad merece hub cuando aparece en tres dumps distintos**, no la primera vez. Antes de eso es una mención, no un tema.
63
+ - **Una idea merece nota atómica cuando el usuario podría querer linkearla desde otra cosa.** Si solo tiene sentido dentro del día en que se escribió, se queda en el dump.
64
+ - No inventes destinos: las carpetas y los hubs propuestos tienen que existir en el inventario, o crearse explícitamente.
65
+
66
+ ## Fase 3 - Tareas
67
+
68
+ Aplicar la regla de arrastre sin excepción:
69
+
70
+ 1. Buscar tareas abiertas en los dumps de días anteriores (últimos 7 días alcanza).
71
+ 2. Las que sigan abiertas se marcan `- [-]` (canceladas) **en su día original**, con el motivo si el usuario lo dice. No se mueven.
72
+ 3. Si la tarea sigue vigente, se crea de nuevo: en la nota del proyecto si tiene uno, o en el dump de hoy.
73
+ 4. Si hay plugin `obsidian-tasks-plugin`, usar su sintaxis de fecha y prioridad; si no, checkbox plano. No mezclar.
74
+
75
+ Verdict de esta fase: PASS cuando ninguna tarea quedó duplicada entre un día viejo y el nuevo.
76
+
77
+ ## Fase 4 - Escribir
78
+
79
+ Con approval sobre lo recolectado, en este orden:
80
+
81
+ 1. Notas atómicas nuevas y hubs nuevos (para que existan antes de que algo los linkee).
82
+ 2. Actualización de hubs existentes: entrada en `## Historial`, y reescritura de `## Estado actual` solo si cambió de verdad.
83
+ 3. Tareas en las notas de proyecto.
84
+ 4. El daily en `<daily>/YYYY-MM-DD.md` (default `Reflect/Daily/`) desde `<templates>/Daily.md`: link al dump, síntesis de 3 a 5 líneas, links a las notas creadas, y el estado real de las tareas del día.
85
+ 5. El dump queda como está, salvo las marcas de tarea. **El dump no se borra ni se vacía nunca:** es el registro crudo de lo que pasó ese día.
86
+
87
+ Los links van hacia arriba: el daily linkea al dump y a las notas creadas; ninguna nota atómica linkea de vuelta al daily.
88
+
89
+ ## Fase 5 - Cierre
90
+
91
+ 1. **Reescribir `hot.md`** en la raíz del vault (desde `Templates/hot.md` la primera vez): dónde está el usuario, las notas que cambiaron con un link cada una, los hilos abiertos y las tareas vivas. Techo de 40 líneas, sin secretos, sin transcripciones crudas, y ninguna afirmación sin su link. **Se reescribe completo, no se le agrega al final.** Es el archivo que hace que la próxima sesión abra sabiendo dónde estabas, y es descartable: si contradice a una nota, la nota gana.
92
+ 2. Reportar en una tabla qué se creó, qué se actualizó y qué quedó en el dump.
93
+ 3. La sección `## Reflexión` del daily queda vacía: la escribe el usuario. No la completes ni la sugieras.
94
+ 4. Si el vault es un repo git, recordar el commit.
95
+
96
+ Review COMPLETE cuando existe el daily, `hot.md` refleja el estado de hoy, los hubs tocados quedaron consistentes y ninguna tarea quedó duplicada.
97
+
98
+ ## Reglas
99
+
100
+ - Escribir los hechos, no interpretarlos: la síntesis dice qué pasó, no qué significa.
101
+ - Idempotente: correr el review dos veces sobre el mismo día no duplica entradas de historial ni secciones del daily.
102
+ - Nunca borrar contenido del dump.
103
+ - Sin guiones largos en nada de lo que escribas.
104
+ - Si el dump tiene más de 40 items, proponer procesar por bloques temáticos en vez de item por item, y decir por qué.
105
+
106
+ ## Handoff
107
+
108
+ Con el daily listo, el siguiente paso depende del día: durante la semana volver a `/brain-dump`, y al cierre `/review-weekly` para extraer los temas de la semana. Si la corrida dejó varias entidades sin hub o varias ideas sin nota, `/hub-note` y `/zettel` son los pasos puntuales.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: review-monthly
3
+ description: "Retrospectiva mensual del vault: lee los weeklies del mes, detecta patrones que no se ven en una semana, registra logros con evidencia y deja semillas para el mes siguiente. Triggers: review mensual, cerrar el mes, retrospectiva del mes, monthly review, patrones del mes."
4
+ argument-hint: "[current | YYYY-MM]"
5
+ category: "pkm"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Bash, Write, Edit
8
+ ---
9
+
10
+ # Review Monthly - Cerrar el mes
11
+
12
+ El nivel más alto del ciclo. El daily registra, el weekly detecta temas, el monthly detecta lo que ninguna semana sola muestra: qué avanzó de verdad, qué se repite sin moverse y qué merece atención el mes que viene.
13
+
14
+ Mes a procesar: `$ARGUMENTS` (default: el mes en curso)
15
+
16
+ Aplica la rule `vault-conventions`.
17
+
18
+ **Rutas por rol:** los destinos se nombran por rol y la ruta real de cada uno sale del `## Rutas` del `CLAUDE.md` del vault. Los defaults entre paréntesis solo aplican si el vault no declara otra cosa.
19
+
20
+ ## Fase 1 - Leer el mes
21
+
22
+ 1. **Ubicar el vault** y leer su `CLAUDE.md`.
23
+ 2. **Leer los weeklies del mes (rol `weekly`).** Los weeklies son la fuente: no releas los dailies ni los dumps, ese trabajo ya está hecho y releerlo quema contexto sin agregar nada. Si faltan weeklies, listarlos y ofrecer `/review-weekly` para esas semanas antes de seguir.
24
+ 3. **Correr `/vault-audit`** para tener las métricas de salud del vault del mes (huérfanas, notas stale, semillas que no crecieron, notas `contested`, tareas viejas abiertas). El monthly es el momento natural del ciclo para mirarlas.
25
+ 4. **Presupuesto de lectura:** los weeklies del mes más el reporte del audit. Techo de 15 lecturas. Si faltan weeklies, se listan y se para: un monthly sobre dailies crudos cuesta diez veces más y sale peor.
26
+
27
+ ## Fase 2 - Extraer
28
+
29
+ 1. **Patrones:** lo que se repite a lo largo de varias semanas. Distinto de un tema semanal: un patrón es un tema que sobrevivió al mes.
30
+ 2. **Logros:** lo que efectivamente se cerró, cada uno con link a la nota que lo respalda. Sin evidencia linkeable no es un logro, es una impresión.
31
+ 3. **Lo que no se movió:** proyectos abiertos sin actividad en el mes, hilos que siguen abiertos desde la primera semana. Se nombran.
32
+ 4. **Semillas:** lo que apareció este mes y merece seguimiento, con el link a donde apareció.
33
+ 5. **Salud del vault:** las tres o cuatro métricas del audit que cambiaron respecto del mes anterior, si hay un monthly previo para comparar.
34
+ 6. **Contradicciones sin resolver:** las notas que el audit reporta como `contested`, cada una con el bloque `> [!warning] Contradicción sin resolver` que trae las dos posiciones y su fuente (mismo formato que usa `/review-weekly`). No las resuelvas: mostralas, con desde cuándo están abiertas. Que el vault te avise cuándo se contradice consigo mismo es una función, no un defecto. Si el usuario resuelve una en el momento, la resolución es una nota atómica nueva que linkea a las dos, y recién ahí se les saca el `contested`.
35
+
36
+ ## Fase 3 - Escribir
37
+
38
+ Con approval sobre lo extraído, crear `<monthly>/YYYY-MM.md` (default `Reflect/Monthly/`) desde `<templates>/Monthly.md`, con links a los weeklies del mes. Si ya existe, actualizarlo sin duplicar secciones.
39
+
40
+ Los links van hacia arriba: el monthly linkea a los weeklies y a las notas que respaldan los logros. No se edita ningún weekly desde acá.
41
+
42
+ La sección `## Reflexión` queda vacía para el usuario.
43
+
44
+ Review COMPLETE cuando existe el monthly con patrones, logros con evidencia y el estado de salud del vault.
45
+
46
+ ## Reglas
47
+
48
+ - Un logro sin link no se escribe.
49
+ - Lo que no avanzó se reporta con el mismo detalle que lo que avanzó.
50
+ - Sin coaching: no proponés objetivos ni planes de mejora salvo que el usuario los pida.
51
+ - Idempotente: correrlo dos veces sobre el mismo mes no duplica nada.
52
+ - Sin guiones largos.
53
+
54
+ ## Handoff
55
+
56
+ Con el monthly listo, si el audit reportó problemas el siguiente paso es `/vault-tidy` para aplicar los arreglos con approval. Si el mes dejó semillas que ya son ideas formadas, `/zettel`. Si no, se vuelve al ciclo diario con `/brain-dump`.
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: review-weekly
3
+ description: "Retrospectiva semanal del vault: lee los dumps y dailies de la semana, extrae temas recurrentes e hilos abiertos, cuenta tareas hechas y no hechas, y crea el weekly. Triggers: review semanal, cerrar la semana, retrospectiva de la semana, weekly review, que paso esta semana."
4
+ argument-hint: "[current | YYYY-Www | YYYY-MM-DD]"
5
+ category: "pkm"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+
10
+ # Review Weekly - Cerrar la semana
11
+
12
+ Subís un nivel de abstracción: el daily registra, el weekly detecta patrones. Lo que buscás son los temas que se repitieron y los hilos que quedaron abiertos, no un resumen de siete resúmenes.
13
+
14
+ Semana a procesar: `$ARGUMENTS` (default: la semana en curso, lunes a domingo)
15
+
16
+ Aplica la rule `vault-conventions`.
17
+
18
+ **Rutas por rol:** los destinos se nombran por rol y la ruta real de cada uno sale del `## Rutas` del `CLAUDE.md` del vault. Los defaults entre paréntesis solo aplican si el vault no declara otra cosa.
19
+
20
+ ## Fase 1 - Leer la semana
21
+
22
+ 1. **Ubicar el vault** y leer su `CLAUDE.md`.
23
+ 2. **Resolver el rango**: si el argumento es una fecha, la semana ISO que la contiene; si es `YYYY-Www`, esa; si no hay argumento, la semana en curso.
24
+ 3. **Leer los dailies del rango (rol `daily`) y sus dumps (rol `inbox`).** Los dailies dan la síntesis, los dumps dan lo que no llegó a la síntesis. Faltan dailies casi siempre: anotá qué días quedaron sin procesar y ofrecé `/review-dump` para esos días antes de seguir, porque un weekly sobre dumps crudos es peor.
25
+ 4. **Presupuesto de lectura:** los 7 dailies del rango, sus dumps, y hasta 10 hubs de los que esos dailies linkean. Techo duro de 25 lecturas. Si el material no alcanza para sacar conclusiones, **decilo y pará** en vez de entregar un weekly a medias con cara de completo.
26
+
27
+ ## Fase 2 - Extraer
28
+
29
+ 1. **Temas:** de 3 a 5 asuntos que aparecen en dos días o más. Cada tema con los dailies donde aparece. Un tema que aparece un solo día no es un tema, es un evento.
30
+
31
+ Una conexión califica solo si es de uno de estos cuatro tipos (rúbrica adaptada del patrón de sesiones de conexión):
32
+
33
+ | Tipo | Qué buscar |
34
+ |---|---|
35
+ | **A** | El mismo principio en dos dominios distintos |
36
+ | **B** | Dos notas que se contradicen y la contradicción es productiva |
37
+ | **C** | Un patrón que solo aparece juntando tres notas o más, y todavía no tiene nombre |
38
+ | **D** | Una pregunta de una nota que otra nota responde sin proponérselo |
39
+
40
+ Para no depender solo de lo que recordás de la semana, pedile candidatos al índice: `vault_index.py "<vault>" related "<nota de la semana>"` devuelve las notas más cercanas por vocabulario compartido, y ahí suelen estar las del tipo A y C. El criterio de si califican sigue siendo tuyo: el script propone vecinos, no conexiones.
41
+
42
+ **Si la conexión es obvia, no califica.** El test es: ¿el usuario la habría encontrado solo, eventualmente? Si sí, sobra. Este paso se gana el lugar encontrando lo que él se pierde. Mínimo 3, máximo 5: por encima de eso la lista deja de leerse.
43
+
44
+ Las del tipo B se marcan: las dos notas involucradas van al weekly como contradicción, y si el usuario confirma que sigue sin resolverse, se les pone `status: contested` en el frontmatter con approval. La contradicción se preserva, no se resuelve sola.
45
+
46
+ ### El artefacto de una contradicción
47
+
48
+ Cuando una conexión tipo B se confirma, el weekly lleva un bloque con **las dos posiciones enfrentadas y su fuente**, no una síntesis que las promedie:
49
+
50
+ ```markdown
51
+ > [!warning] Contradicción sin resolver
52
+ > **[[Nota A]]** dice: <la afirmación, textual o parafraseada fielmente>
53
+ > **[[Nota B]]** dice: <la otra>
54
+ > Sin resolver desde YYYY-MM-DD. Las dos quedan `status: contested`.
55
+ ```
56
+
57
+ Se usa `[!warning]` con título propio y no `[!contradiction]`: ese tipo no existe en Obsidian y renderizaría como un `note` cualquiera sin avisar (ver `/obsidian-markdown`).
58
+
59
+ Tres reglas del artefacto:
60
+
61
+ - **No la resuelvas.** Si te parece obvio cuál de las dos gana, decilo como comentario aparte; la nota no elige.
62
+ - **No borres ninguna de las dos.** Una contradicción resuelta borrando la mitad no se resolvió, se tapó.
63
+ - **Cuando el usuario la resuelve**, se le saca el `contested` a las dos y la resolución va como nota atómica propia, linkeando a ambas. Eso es conocimiento nuevo: es el caso donde la contradicción produjo algo.
64
+ 2. **Hilos abiertos:** preguntas o decisiones pendientes, distintas de una tarea. "Definir si migramos" es un hilo; "mandar el mail" es una tarea.
65
+ 3. **Tareas:** conteo de hechas y de no hechas, con las no hechas nombradas una por una. No suavizar el número ni omitirlas.
66
+ 4. **Notas que crecieron:** hubs y notas atómicas que recibieron contenido en la semana.
67
+ 5. **Señales, si aparecen:** un tema que se repite tres semanas seguidas sin avanzar, o un proyecto sin una sola mención en toda la semana. Reportarlas como observación, sin diagnóstico ni consejo.
68
+
69
+ ## Fase 3 - Escribir
70
+
71
+ Refrescar también `hot.md` con los hilos abiertos de la semana, respetando su techo de 40 líneas.
72
+
73
+ Con approval sobre lo extraído, crear `<weekly>/YYYY-Www.md` (default `Reflect/Weekly/`) desde `<templates>/Weekly.md`, con links a los dailies de la semana. Si el weekly ya existe, actualizarlo sin duplicar secciones.
74
+
75
+ Los links van hacia arriba: el weekly linkea a los dailies. Ningún daily se edita para linkear al weekly.
76
+
77
+ La sección `## Reflexión` queda vacía para el usuario.
78
+
79
+ Review COMPLETE cuando existe el weekly con temas, hilos y el conteo real de tareas.
80
+
81
+ ## Reglas
82
+
83
+ - Sin interpretación: reportás lo que pasó y lo que se repitió, no qué significa ni qué debería hacer el usuario.
84
+ - Las tareas no hechas se nombran. Un weekly que las esconde no sirve para nada.
85
+ - Idempotente: correrlo dos veces sobre la misma semana no duplica nada.
86
+ - Solo el rango de la semana: nunca reescribir dailies ni dumps pasados desde acá.
87
+ - Sin guiones largos.
88
+
89
+ ## Handoff
90
+
91
+ Con el weekly listo, el siguiente paso es seguir con `/brain-dump` la semana que viene, y al cierre del mes `/review-monthly`, que lee los weeklies y no los dailies. Si el weekly dejó al descubierto un tema que ya merece nota propia, `/zettel` o `/hub-note`.