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
@@ -1,6 +1,8 @@
1
1
  # Skills Catalog — Claude Code Arcane
2
2
 
3
- Catalogo completo de los 337 skills disponibles para proyectos consumidores. Organizados por division.
3
+ Los 388 skills disponibles para proyectos consumidores, organizados por division.
4
+
5
+ La tabla cubre 346: hay 42 skills instalables que todavia no estan catalogados aca. Un test de CI (`src/__tests__/doc-counts.test.ts`) verifica que estos numeros coincidan con el filesystem y que el header de cada seccion coincida con sus filas.
4
6
 
5
7
  ## Como ejecutar un skill
6
8
 
@@ -98,7 +100,27 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
98
100
 
99
101
  ---
100
102
 
101
- ## General (55 skills)
103
+ ## Audio (13 skills)
104
+
105
+ | Skill | Descripcion | Uso |
106
+ |-------|-------------|-----|
107
+ | `/audio-bible` | Identidad sonora: paleta, emotional targets por game state, frequency allocation, standards | `[full\|core\|standards]` |
108
+ | `/audio-spec` | SFX spec sheets y event lists con concurrencia, cooldown y prioridad | `[system-name \| all \| events]` |
109
+ | `/music-composition` | Armonia, melodia, forma, groove, orquestacion con salida accionable | `[harmony\|melody\|form\|groove\|orchestration\|analyze]` |
110
+ | `/adaptive-music` | Musica interactiva: layering, re-secuenciacion, stingers, sync points, histeresis | `[design\|layers\|transitions\|stingers\|map]` |
111
+ | `/midi-compose` | Genera `.mid` desde spec JSON con scripts Python stdlib-only | `[spec-path \| new \| validate]` |
112
+ | `/sfx-design` | Capas attack/body/tail, variacion, round-robin, anti-repeticion | `[sound-name \| layers \| variation \| review]` |
113
+ | `/procedural-audio` | Footsteps, viento y ambientes por sintesis; decision y presupuesto de CPU | `[decide \| footsteps \| wind \| ambience \| budget]` |
114
+ | `/ui-sound-design` | Feedback de UI: duraciones y niveles por tipo, jerarquia, haptics, accesibilidad | `[set \| event-name \| review \| haptics]` |
115
+ | `/spatial-audio` | HRTF vs Ambisonics vs panning, atenuacion, oclusion vs obstruccion, presupuesto | `[decide \| hrtf \| ambisonics \| occlusion \| budget]` |
116
+ | `/audio-mix` | Jerarquia de buses, ducking, mix states, masking, loudness | `[buses \| ducking \| states \| loudness \| review]` |
117
+ | `/middleware-integration` | Wwise/FMOD: containers, eventos, Switch/State/RTPC, banks, contrato con codigo | `[structure \| events \| rtpc \| banks \| contract]` |
118
+ | `/voice-pipeline` | VO: naming, script con contexto, casting, barks, localizacion, batch | `[script \| casting \| naming \| loc \| barks]` |
119
+ | `/audio-audit` | QA: voice count, CPU, memoria, leaks, loudness ASWG-R001, conformidad de assets | `[full \| perf \| loudness \| assets \| platform]` |
120
+
121
+ ---
122
+
123
+ ## General (54 skills)
102
124
 
103
125
  | Skill | Descripcion | Uso |
104
126
  |-------|-------------|-----|
@@ -455,6 +477,27 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
455
477
 
456
478
  ---
457
479
 
480
+ ## Second Brain (14 skills)
481
+
482
+ | Skill | Descripcion | Uso |
483
+ |-------|-------------|-----|
484
+ | `/second-brain` | Entry point: crea o adopta el vault (PARA + Zettelkasten + hub files), escribe su CLAUDE.md y su cache hot.md, detecta plugins, conecta otros proyectos al mismo vault y rutea | `[setup\|adopt\|status\|next\|link]` |
485
+ | `/brain-dump` | Captura sin friccion al dump del dia: sin tags, sin clasificar, sin decidir donde va | `[texto a capturar]` |
486
+ | `/review-dump` | Procesa el dump: clasifica item por item con confirmacion, actualiza hubs, rutea tareas y crea el daily | `[today\|YYYY-MM-DD]` |
487
+ | `/review-weekly` | Retrospectiva semanal: temas recurrentes, hilos abiertos y tareas hechas vs no hechas | `[current\|YYYY-Www\|YYYY-MM-DD]` |
488
+ | `/review-monthly` | Retrospectiva mensual: patrones, logros con evidencia, semillas y salud del vault | `[current\|YYYY-MM]` |
489
+ | `/zettel` | Nota atomica con el criterio de cuando una idea pasa de nota de proyecto a permanente | `[idea\|ruta#seccion\|dump YYYY-MM-DD]` |
490
+ | `/hub-note` | Hub file (MOC) por entidad que importa: el tejido entre PARA y Zettelkasten | `[entidad] [--update]` |
491
+ | `/vault-recall` | Busqueda con ranking (BM25, acentos plegados, expansion por alias) y notas relacionadas por vocabulario compartido, via indice cacheado | `<consulta> \| related <nota> [-n N]` |
492
+ | `/vault-clip` | URL a nota limpia: contenido sin menus ni banners, con resumen propio y fuente | `<url> [--full\|--summary]` |
493
+ | `/vault-audit` | Reporte de salud via script Python: huerfanas, links roto, stale, semillas que no crecieron, contradicciones, tag sprawl, nombres duplicados. Read-only | `[--vault <path>] [--stale-days N]` |
494
+ | `/vault-tidy` | Aplica los arreglos del audit con approval item por item. Nunca borra, archiva | `[orphans\|broken\|duplicates\|tasks\|frontmatter\|archive\|all]` |
495
+ | `/obsidian-markdown` | Sintaxis Obsidian: wikilinks, embeds, callouts, block IDs, propiedades. Valida o corrige una nota | `[reference\|check <archivo>\|fix <archivo>]` |
496
+ | `/obsidian-bases` | Archivos .base: vistas, filtros, formulas y summaries. Incluye migracion desde Dataview | `[create <desc>\|explain <archivo>\|migrate <query>]` |
497
+ | `/obsidian-canvas` | Archivos .canvas (JSON Canvas): nodos, grupos y edges con direccion y color | `[create <desc>\|explain <archivo>\|edit <archivo>]` |
498
+
499
+ ---
500
+
458
501
  ## E-Commerce (12 skills)
459
502
 
460
503
  | Skill | Descripcion | Uso |
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## What is Arcane?
4
4
 
5
- Arcane is a configuration harness for [Claude Code](https://docs.anthropic.com/en/docs/claude-code). It provides a curated library of **337 skills**, **87 agents**, **15 hooks**, and **20 rules** that you selectively deploy into any project. Instead of shipping everything to every project (wasting tokens and degrading performance), you pick a **profile** that matches your stack and only the relevant tools get installed.
5
+ Arcane is a configuration harness for [Claude Code](https://docs.anthropic.com/en/docs/claude-code). It provides a curated library of **388 skills**, **98 agents**, **16 hooks**, and **26 rules** that you selectively deploy into any project. Instead of shipping everything to every project (wasting tokens and degrading performance), you pick a **profile** that matches your stack and only the relevant tools get installed.
6
6
 
7
7
  ## Table of Contents
8
8
 
@@ -536,7 +536,7 @@ Yes, and it's recommended. This way everyone on the team gets the same Claude Co
536
536
 
537
537
  ### How many tokens does a profile consume?
538
538
 
539
- Each skill adds ~30-100 tokens to the system prompt. A typical base profile (20-30 skills) adds ~1-2k tokens. The core profile adds ~500 tokens. Compare that to loading all 333 skills, which is why selective deploy matters.
539
+ Each skill adds ~30-100 tokens to the system prompt. A typical base profile (20-30 skills) adds ~1-2k tokens. The core profile adds ~500 tokens. Compare that to loading all 388 skills, which is why selective deploy matters.
540
540
 
541
541
  ### Why replace instead of merge on install?
542
542
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-arcane",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "Skills, agents, hooks and rules for Claude Code — installable via npx arcane",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,45 @@
1
+ name: audio
2
+ description: "Game Audio — direccion sonora, composicion, sound design, middleware, VO y QA"
3
+ type: base
4
+
5
+ skills:
6
+ - audio-bible
7
+ - audio-spec
8
+ - music-composition
9
+ - adaptive-music
10
+ - midi-compose
11
+ - sfx-design
12
+ - procedural-audio
13
+ - ui-sound-design
14
+ - spatial-audio
15
+ - audio-mix
16
+ - middleware-integration
17
+ - voice-pipeline
18
+ - audio-audit
19
+
20
+ rules:
21
+ universal:
22
+ []
23
+ gamedev:
24
+ - audio-code
25
+
26
+ agents:
27
+ - audio
28
+
29
+ permissions:
30
+ allow:
31
+ - "Bash(python *)"
32
+ - "Bash(python3 *)"
33
+ - "Bash(git status*)"
34
+ - "Bash(git add*)"
35
+ - "Bash(git commit*)"
36
+ - "Bash(git diff*)"
37
+ - "Bash(git log*)"
38
+ - "Bash(ls *)"
39
+ - "Bash(find *)"
40
+ - "Read(*)"
41
+ - "Glob(*)"
42
+ - "Grep(*)"
43
+ deny:
44
+ - "Bash(rm -rf *)"
45
+ - "Bash(git push --force*)"
@@ -0,0 +1,37 @@
1
+ name: second-brain
2
+ description: "Second Brain — vault de Obsidian gestionado con Claude Code: captura sin friccion, reviews diario/semanal/mensual, notas atomicas y hub files (PARA + Zettelkasten), busqueda con ranking, captura web, auditoria de salud del vault y sintaxis nativa de Obsidian (markdown, Bases, Canvas)"
3
+ type: addon
4
+
5
+ skills:
6
+ - second-brain
7
+ - brain-dump
8
+ - review-dump
9
+ - review-weekly
10
+ - review-monthly
11
+ - zettel
12
+ - hub-note
13
+ - vault-recall
14
+ - vault-clip
15
+ - vault-audit
16
+ - vault-tidy
17
+ - obsidian-markdown
18
+ - obsidian-bases
19
+ - obsidian-canvas
20
+
21
+ rules:
22
+ universal:
23
+ - vault-conventions
24
+ gamedev:
25
+ []
26
+
27
+ agents:
28
+ []
29
+
30
+ permissions:
31
+ allow:
32
+ - "Bash(python *vault_audit.py*)"
33
+ - "Bash(python3 *vault_audit.py*)"
34
+ - "Bash(python *vault_index.py*)"
35
+ - "Bash(python3 *vault_index.py*)"
36
+ deny:
37
+ []
@@ -0,0 +1,45 @@
1
+ ---
2
+ paths:
3
+ - "src/audio/**"
4
+ ---
5
+
6
+ # Audio Code Rules
7
+
8
+ - NEVER hardcode asset paths or clip references in gameplay code — post middleware events by name/ID
9
+ - Gameplay code MUST NOT call `Play()`/`PlayOneShot()` directly — raise an audio event, let the audio layer resolve it
10
+ - Concurrency limits (max instances, priority, cooldown) MUST be declared in data, never enforced with ad-hoc counters in gameplay
11
+ - Use delta time for ALL fades, ducking ramps and RTPC interpolation (frame-rate independence)
12
+ - NO static singletons for audio state — inject the audio service
13
+ - Every RTPC/parameter driven from gameplay must be normalized and clamped at the boundary before it reaches the middleware
14
+ - Voice budget is a hard limit: define max simultaneous voices per category and drop by priority, never let it grow unbounded
15
+ - Audio must degrade silently — a missing bank or failed event NEVER throws into the gameplay frame
16
+ - Keep the audio update off the render-critical path; audio work budget is 5-10% of frame time
17
+ - Reference the audio bible section each event implements in code comments
18
+
19
+ ## Examples
20
+
21
+ **Correct** (event-driven, data-declared):
22
+
23
+ ```csharp
24
+ // Gameplay raises intent; the audio layer owns resolution and limits.
25
+ audioService.Post(AudioEvent.PlayerFootstep, transform.position);
26
+
27
+ float wetness = Mathf.Clamp01(surface.Wetness); // clamped at the boundary
28
+ audioService.SetParameter(AudioParam.SurfaceWetness, wetness);
29
+
30
+ // Fade driven by delta time, not frame count.
31
+ currentVolume = Mathf.MoveTowards(currentVolume, targetVolume, fadeRate * Time.deltaTime);
32
+ ```
33
+
34
+ **Incorrect** (hardcoded, direct, frame-dependent):
35
+
36
+ ```csharp
37
+ AudioSource.PlayClipAtPoint(
38
+ Resources.Load<AudioClip>("SFX/footstep_concrete_01"), // VIOLATION: hardcoded path
39
+ transform.position); // VIOLATION: direct playback from gameplay
40
+
41
+ AudioManager.Instance.Play("footstep"); // VIOLATION: static singleton
42
+
43
+ currentVolume -= 0.02f; // VIOLATION: no delta time
44
+ audioService.SetParameter(AudioParam.SurfaceWetness, rawSensorValue); // VIOLATION: unclamped
45
+ ```
@@ -0,0 +1,144 @@
1
+ # Vault Conventions Rule (second brain en Obsidian)
2
+
3
+ Reglas que gobiernan toda escritura dentro de un vault de Obsidian. Existen porque un agente que escribe notas sin restricciones degrada el vault mas rapido de lo que lo construye: linkea todo con todo, arrastra tareas en silencio y renombra archivos rompiendo `[[wikilinks]]`.
4
+
5
+ Las rutas son relativas al vault (`--vault`, env `OBSIDIAN_VAULT`, o el directorio actual si contiene `.obsidian/`).
6
+
7
+ ## Cuando aplica
8
+
9
+ - Cualquier skill del profile `second-brain` que cree o edite notas.
10
+ - Cualquier escritura en un directorio que contenga `.obsidian/`, incluso desde otro skill.
11
+ - NO aplica a los archivos de configuracion del vault (`.obsidian/**`): no se tocan nunca sin pedido explicito del usuario.
12
+
13
+ ## Quién escribe cada archivo
14
+
15
+ Antes de tocar cualquier cosa, la pregunta es de quién es ese archivo. Hay tres clases y el permiso de escritura es distinto en cada una. Adaptado de la distinción **autorado / proyectado** de la base de conocimiento de producto de Educabot, que es la que hace que un agente y una persona escriban en el mismo repositorio sin pisarse.
16
+
17
+ | Clase | Quién escribe | Qué puede hacer el agente | Ejemplos |
18
+ |---|---|---|---|
19
+ | **Autorado** | La persona. Cambia lento | **Nada sin approval.** Ni reformatear, ni "mejorar" | Dumps, notas atómicas, hubs, clips, proyectos, el `CLAUDE.md` del vault, la sección `## Reflexión` de los reviews |
20
+ | **Sintetizado** | El agente, con approval, y queda como nota permanente | Proponer y escribir tras el OK. Idempotente: correr dos veces no duplica | Dailies, weeklies, monthlies, el `## Historial` de un hub |
21
+ | **Proyectado** | El agente, sin preguntar. Derivado y descartable | Reescribir completo cuando corresponda | `hot.md`, el índice `.vault-index.json`, las vistas `.base` |
22
+
23
+ Tres consecuencias que resuelven las dudas que aparecen en la práctica:
24
+
25
+ - **Lo proyectado no se edita a mano.** Si el usuario lo edita, el próximo review lo pisa. Por eso `hot.md` lleva la advertencia adentro.
26
+ - **Lo proyectado no es fuente de verdad.** Si contradice a una nota, la nota gana. Se puede borrar sin perder nada.
27
+ - **Lo autorado no se toca ni para arreglarlo.** Si una nota del usuario tiene el frontmatter roto, se propone el arreglo; no se aplica solo. La excepción son las categorías que `/vault-tidy` aplica con approval item por item.
28
+
29
+ Si no sabés en qué clase cae un archivo, es autorado. El default es no escribir.
30
+
31
+ ## El vault apunta, no copia
32
+
33
+ Cuando algo ya tiene una fuente de verdad afuera, el vault guarda **el puntero y el porqué**, nunca una copia:
34
+
35
+ | Contenido | Fuente de verdad | En el vault |
36
+ |---|---|---|
37
+ | Código y arquitectura | El repo | `repos:` en el frontmatter, y `codebases.md` con el path local |
38
+ | Tickets, estados, sprints | Jira, ClickUp, Linear | Link, y la decisión que salió de ahí |
39
+ | Diseños | Figma | Link en la nota del tema |
40
+ | Artículos, papers | La web | El clip, con `source:` y **tu** resumen |
41
+
42
+ Una copia se desactualiza en silencio y después hay dos verdades y ninguna gana. Lo que sí acumula el vault es lo que ninguna de esas fuentes tiene: **qué decidiste, por qué, y qué aprendiste**. Eso no vive en Jira ni en el código.
43
+
44
+ ## Resolución de rutas: roles, no carpetas
45
+
46
+ Ningún skill escribe en una ruta literal. Escribe en un **rol**, y el `## Rutas` del `CLAUDE.md` del vault dice qué carpeta es ese rol en este vault. Es lo que hace que un vault adoptado con otra estructura funcione sin tocar los skills.
47
+
48
+ | Rol | Qué contiene | Default del `setup` |
49
+ |---|---|---|
50
+ | `inbox` | captura cruda del día | `_inbox` |
51
+ | `daily` | síntesis diaria | `Reflect/Daily` |
52
+ | `weekly` | retrospectiva semanal | `Reflect/Weekly` |
53
+ | `monthly` | balance mensual | `Reflect/Monthly` |
54
+ | `atomic` | notas atómicas | `03_Resources` |
55
+ | `hubs` | hub files por entidad | `Hubs` |
56
+ | `projects` | proyectos con deadline | `01_Projects` |
57
+ | `areas` | responsabilidades continuas | `02_Areas` |
58
+ | `archive` | cerrado, nunca borrado | `04_Archive` |
59
+ | `templates` | plantillas del usuario | `Templates` |
60
+
61
+ Orden de resolución, sin excepciones:
62
+
63
+ 1. El `## Rutas` del `CLAUDE.md` del vault.
64
+ 2. Si el vault no lo declara, el default de la tabla, **avisándole al usuario que se está asumiendo**.
65
+ 3. Si el rol no existe en este vault (no todos tienen `areas`), preguntar antes de crear la carpeta.
66
+
67
+ Los scripts reciben el mapeo por flag (`--role hubs=People`), nunca lo adivinan. **Si el `CLAUDE.md` del vault declara rutas distintas del default y un skill escribe en el default igual, eso es un bug del skill, no una preferencia.**
68
+
69
+ ## Las tres reglas de estructura
70
+
71
+ ### 1. Los links van hacia arriba, nunca hacia abajo
72
+
73
+ Cada nota linkea a su contexto, no a su detalle:
74
+
75
+ | Desde | Linkea a | Nunca a |
76
+ |---|---|---|
77
+ | Nota de `_inbox/` (dump) | hub files, proyectos, areas | otros dumps |
78
+ | Daily | el dump del dia, notas creadas ese dia | otros dailies |
79
+ | Weekly | los dailies de la semana | notas atomicas sueltas |
80
+ | Monthly | los weeklies del mes | dailies |
81
+ | Hub file | notas atomicas y proyectos del tema | dumps ni dailies |
82
+
83
+ Sin esta regla el agente crea links bidireccionales en todas las direcciones y el grafo se vuelve ruido: cada nota apunta a todo y ninguna relacion significa nada. Los backlinks de Obsidian ya dan la direccion inversa gratis, no hay que escribirla.
84
+
85
+ ### 2. Ninguna nota se cierra sin al menos un `[[wikilink]]`
86
+
87
+ Es la unica regla que previene las huerfanas de raiz. Si al terminar una nota no hay a que linkearla, esa es la senal de que falta un hub file: crear el hub (ver `/hub-note`) antes de cerrar la nota, o dejarla en `_inbox/` en vez de archivarla en `03_Resources/`.
88
+
89
+ Excepcion: los dumps crudos de `_inbox/` pueden nacer sin links, porque los agrega `/review-dump`.
90
+
91
+ ### 3. Las tareas no hechas no se arrastran en silencio
92
+
93
+ Una tarea abierta en el dump del lunes que sigue abierta el martes **se queda en el lunes**, marcada como cancelada (`- [-]`), y se crea de nuevo en el martes. No se mueve.
94
+
95
+ No haber hecho algo un dia determinado es informacion. Arrastrar la tarea hacia adelante produce una lista limpia y una historia falsa.
96
+
97
+ ## Que no puede hacer el agente
98
+
99
+ - **Nunca borrar una nota.** Mover a `04_Archive/` preservando el nombre. El borrado es decision del usuario, siempre.
100
+ - **Nunca renombrar ni mover una nota sin approval explicito.** Rompe `[[wikilinks]]` en silencio: Obsidian solo los actualiza cuando el rename ocurre dentro de la app.
101
+ - **Nunca editar en masa.** Una corrida toca las notas de esa corrida. Los cambios que afectan a muchas notas se proponen como plan y los aplica `/vault-tidy` con approval item por item.
102
+ - **Nunca tocar `Templates/`** salvo pedido explicito: son el contrato del usuario, no del agente.
103
+ - **Nunca reescribir la seccion de reflexion del usuario.** Los reviews sintetizan hechos; la interpretacion la escribe el usuario.
104
+
105
+ ## Contrato de frontmatter
106
+
107
+ Todo campo que un skill escriba tiene que estar declarado en el `CLAUDE.md` del vault. Un campo que no esta en el contrato no se inventa: se propone y se agrega al contrato primero.
108
+
109
+ Minimo por tipo de nota:
110
+
111
+ ```yaml
112
+ ---
113
+ created: 2026-07-27 # ISO, nunca se reescribe
114
+ type: daily # daily | weekly | monthly | dump | atomic | hub | project | area | clip
115
+ tags: []
116
+ ---
117
+ ```
118
+
119
+ Los tipos con campos propios (`status` en proyectos, `source` en clips) los declara el skill que los crea.
120
+
121
+ ## Convenciones de escritura
122
+
123
+ - Nada de guiones largos: si un texto generado trae em-dash o en-dash, normalizar a `-` antes de escribir.
124
+ - `[[wikilinks]]` para todo lo interno, `[texto](url)` solo para URLs externas. Obsidian trackea renames de wikilinks, no de markdown links.
125
+ - Fechas ISO (`YYYY-MM-DD`) en frontmatter y en nombres de archivo de notas periodicas.
126
+ - Una idea por nota atomica. Si una nota necesita dos titulos de nivel `##` que no se relacionan, son dos notas.
127
+
128
+ ## La estructura no la sostiene este archivo
129
+
130
+ Una convención que solo vive en un documento se muere en tres meses. Lo que la sostiene es lo que corre:
131
+
132
+ | Convención | Qué la hace cumplir |
133
+ |---|---|
134
+ | Frontmatter completo, notas con al menos un link | El hook `PostToolUse` de `second-brain`, al escribir |
135
+ | Huérfanas, links roto, nombres duplicados, semillas que no crecen | `/vault-audit`, cada vez que se corre |
136
+ | Contradicciones sin resolver | `status: contested`, que el audit lista y el monthly mira |
137
+ | Rutas por rol | El `## Rutas` del contrato, que los skills leen antes de escribir |
138
+ | Tareas que no se arrastran | El paso de tareas de `/review-dump`, y `stale_open_tasks` en el audit |
139
+
140
+ Si una regla nueva de este archivo no tiene una columna derecha, es una intención, no una regla. Antes de agregarla, preguntá qué la va a hacer cumplir.
141
+
142
+ ## Git como red de seguridad
143
+
144
+ El vault deberia ser un repo git. Antes de una corrida que escribe varias notas (`/review-dump`, `/vault-tidy`), verificar que el arbol este limpio y avisar al usuario si no lo esta. Es lo que permite deshacer una corrida completa sin revisar nota por nota.
@@ -0,0 +1,171 @@
1
+ ---
2
+ name: adaptive-music
3
+ description: "Musica interactiva para juegos: layering vertical, re-secuenciacion horizontal, stingers, reglas de transicion con sync points, y mapeo de estados de gameplay a musica. Usar para: musica adaptativa, sistema de musica dinamica, transiciones musicales, combat music."
4
+ category: "audio"
5
+ argument-hint: "[design|layers|transitions|stingers|map]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # adaptive-music — Sistemas de Música Interactiva
10
+
11
+ Diseña el sistema que decide **qué música suena cuándo** y **cómo pasa de un estado a otro sin que se escuche la costura**.
12
+
13
+ Esta skill diseña el sistema. El material musical lo escribe `/music-composition`; la implementación en middleware la baja `/middleware-integration`.
14
+
15
+ ## Cuándo usar
16
+
17
+ - Cuando la música tiene que responder a gameplay y no alcanza con reproducir un track
18
+ - Cuando las transiciones entre estados (exploración → combate → victoria) suenan a corte
19
+ - Cuando el loop fatiga y necesitás variación estructural, no otro track
20
+ - Antes de que el compositor escriba una nota: el sistema condiciona cómo se compone
21
+
22
+ ## Modos
23
+
24
+ | Modo | Qué hace |
25
+ |---|---|
26
+ | `design` | El sistema completo: eje dominante, capas/segmentos, matriz, stingers, parámetros |
27
+ | `layers` | Solo la arquitectura vertical: qué capas, qué rol, qué restricción compositiva |
28
+ | `transitions` | Solo la matriz de transiciones con sync points y segmentos de transición |
29
+ | `stingers` | Solo los stingers: armonía, sincronización, cooldown |
30
+ | `map` | Solo la tabla estado de gameplay → música, con triggers e histéresis |
31
+
32
+ ## Input
33
+
34
+ 1. Leer audio bible, sección 2 (emotional targets por game state) y 6 (music direction). Si no existe, avisar y ofrecer `/audio-bible`
35
+ 2. Listar los estados de gameplay reales — del código o del GDD, no inventados
36
+ 3. Preguntar al usuario: middleware target (Wwise / FMOD / engine nativo / sin definir), budget de memoria para música, y si hay material compuesto o se parte de cero
37
+
38
+ ---
39
+
40
+ ## Los dos ejes
41
+
42
+ Todo sistema de música adaptativa es una combinación de estos dos. Elegir cuál domina es la primera decisión.
43
+
44
+ ### Vertical — layering
45
+
46
+ Un mismo bloque temporal, capas que entran y salen. Todas suenan sincronizadas porque comparten grid y armonía.
47
+
48
+ - **Fuerte en:** respuesta inmediata a parámetros continuos (proximidad de enemigo, salud, intensidad de combate)
49
+ - **Débil en:** cambiar de material. Todo suena a la misma pieza
50
+ - **Costo:** memoria (N stems simultáneos) y una restricción compositiva real — cada capa debe funcionar sola y en toda combinación
51
+
52
+ ### Horizontal — re-secuenciación
53
+
54
+ Segmentos distintos que se concatenan según reglas, con transiciones en puntos musicalmente válidos.
55
+
56
+ - **Fuerte en:** cambiar de material y de forma; estructura no repetitiva
57
+ - **Débil en:** respuesta inmediata. La transición espera el sync point
58
+ - **Costo:** latencia de respuesta (hasta un compás o más) y complejidad de reglas
59
+
60
+ **Recomendación:** vertical para intensidad continua, horizontal para cambios de estado discretos. La mayoría de los juegos necesitan los dos: capas dentro de cada segmento, re-secuenciación entre segmentos.
61
+
62
+ ---
63
+
64
+ ## Sync points — dónde se puede cortar
65
+
66
+ Una transición suena bien o mal según **dónde** ocurre, no según el crossfade. De más responsivo a más musical:
67
+
68
+ | Sync point | Latencia | Cuándo usarlo |
69
+ |---|---|---|
70
+ | **Inmediato** | 0 | Emergencias (muerte del jugador). Suena a corte, y a veces eso está bien |
71
+ | **Siguiente beat** | hasta 1 beat | Reacción rápida que igual respeta el pulso |
72
+ | **Siguiente compás (bar)** | hasta 1 compás | El default sano para la mayoría de los casos |
73
+ | **Siguiente grid** | variable | Cuando definís una grilla más gruesa (2 o 4 compases) |
74
+ | **Exit cue** | hasta el fin del segmento | Máxima musicalidad, máxima latencia |
75
+ | **Entry cue del destino** | — | Define desde dónde arranca el segmento destino |
76
+
77
+ **Segmento de transición** — un fragmento corto que se inserta entre origen y destino. Resuelve los saltos que ningún sync point salva: cambio de tonalidad, de tempo o de métrica. Es la herramienta que más mejora un sistema y la que menos se usa.
78
+
79
+ En Wwise esto es la Transition Matrix del Music Switch Container: origen × destino, con Exit Cue del origen, Entry Cue del destino, fade in/out, y segmento de transición opcional. En FMOD el equivalente son transition regions y transition timelines. El concepto es el mismo; la nomenclatura cambia.
80
+
81
+ ---
82
+
83
+ ## Stingers
84
+
85
+ Frases cortas que se superponen sin interrumpir la música de fondo, sincronizadas al grid para que no suenen encima del tiempo equivocado.
86
+
87
+ - Uso: eventos puntuales que merecen puntuación musical — descubrimiento, kill, item raro, fallo
88
+ - **Deben compartir armonía con el material de fondo**, o sonar deliberadamente disonantes. Un stinger en la tonalidad equivocada es el error más audible del sistema
89
+ - Sincronizar a beat o compás, nunca inmediato
90
+ - Definir cooldown: dos stingers superpuestos suenan a error
91
+ - Si el fondo modula, el stinger necesita versiones por tonalidad o tiene que ser tonalmente neutro (percusión, cluster, ruido)
92
+
93
+ ---
94
+
95
+ ## Diseño del mapeo
96
+
97
+ El entregable central: la tabla estado → música.
98
+
99
+ | Estado de gameplay | Trigger | Segmento / capas | Sync point | Notas |
100
+ |---|---|---|---|---|
101
+ | Explore calm | default | bed + pulse | bar | loop indefinido |
102
+ | Explore alert | enemigo a <30 m | + harmony | beat | vuelve a calm con 5 s de histéresis |
103
+ | Combat | combate iniciado | segmento combat, todas las capas | bar | |
104
+ | Combat low health | HP < 25% | + intensity, filtro | beat | |
105
+ | Victory | combate resuelto | stinger + segmento victory | exit cue | one-shot, vuelve a explore |
106
+ | Death | HP = 0 | inmediato, corte | inmediato | |
107
+
108
+ **Parámetros continuos** aparte: qué RTPC/parámetro maneja qué, con rango normalizado y curva.
109
+
110
+ | Parámetro | Rango | Controla | Curva |
111
+ |---|---|---|---|
112
+ | `combat_intensity` | 0-1 | volumen de capa intensity | log |
113
+ | `player_health` | 0-1 | filtro low-pass sobre el bus música | lineal |
114
+
115
+ ---
116
+
117
+ ## Histéresis — el detalle que rompe los sistemas
118
+
119
+ Un estado que se calcula por umbral (`enemigo a <30 m`) va a oscilar cuando el jugador camine en el borde. El resultado es música entrando y saliendo cada segundo.
120
+
121
+ Toda transición basada en umbral necesita:
122
+ - **Umbrales distintos por dirección** — entra a 30 m, sale a 40 m
123
+ - **Tiempo mínimo en estado** — no se puede salir antes de N segundos
124
+ - **Debounce del trigger** — la condición tiene que sostenerse antes de contar
125
+
126
+ Sin esto, el sistema funciona en el editor y falla con un jugador real.
127
+
128
+ ---
129
+
130
+ ## Enfoques generativos
131
+
132
+ Cuando la variación por capas y segmentos no alcanza:
133
+
134
+ - **Selección estocástica de capas/segmentos** — la variación sale de qué combinación suena. El más barato y controlable; empezar acá siempre
135
+ - **Cadenas de Markov** — melodía estocástica entrenada sobre material propio. Preserva idioma, no genera estructura
136
+ - **L-systems / gramáticas recursivas** — generan estructura jerárquica por reescritura de reglas. Complemento de Markov, que no tiene forma
137
+ - **Restricciones armónicas** — capa de validación sobre lo generado: el generador propone, las reglas de función y voice leading filtran
138
+
139
+ La generación de notas en tiempo real tiene un techo de calidad y un riesgo de que suene mal en producción que la selección de material pregrabado no tiene. Justificar antes de ir por ahí.
140
+
141
+ ---
142
+
143
+ ## Proceso
144
+
145
+ 1. **Listar estados reales** del gameplay, con sus triggers exactos
146
+ 2. **Elegir el eje dominante** (vertical / horizontal / mixto) y justificarlo contra el budget
147
+ 3. **Definir capas o segmentos** y la restricción compositiva que impone al compositor
148
+ 4. **Llenar la matriz de transiciones** con sync points, y marcar dónde hace falta segmento de transición
149
+ 5. **Definir stingers** con su armonía y cooldown
150
+ 6. **Definir parámetros continuos** con rango y curva
151
+ 7. **Agregar histéresis** a toda transición por umbral
152
+ 8. **Presentar** al usuario y preguntar "¿Escribo el diseño a `<path>`?" antes de usar Write
153
+
154
+ ---
155
+
156
+ ## Verdict
157
+
158
+ - **READY** — la matriz está completa, todo umbral tiene histéresis, los stingers tienen armonía definida, y el compositor sabe qué restricción respetar
159
+ - **CONCERNS** — el diseño existe pero hay transiciones sin sync point, umbrales sin histéresis, o el budget de memoria no se verificó contra el número de stems
160
+ - **BLOCKED** — los estados de gameplay no están definidos, o no hay dirección musical de la cual derivar los emotional targets
161
+
162
+ ## Anti-patterns
163
+
164
+ > → Read references/anti-patterns.md
165
+
166
+ ## Next steps
167
+
168
+ - `/music-composition` para escribir el material respetando las restricciones de capas
169
+ - `/middleware-integration` para implementar la matriz en Wwise/FMOD
170
+ - `/audio-mix` para el ducking entre música y diálogo
171
+ - `/audio-audit` para verificar memoria y voice count del sistema en runtime
@@ -0,0 +1,53 @@
1
+ # Música Adaptativa — Anti-patterns
2
+
3
+ ## Crossfade como única transición
4
+
5
+ Fundir dos piezas en tonalidades o tempos distintos suena a error, no a transición. El crossfade solo funciona si el material comparte armonía y grid. Si no, hace falta sync point + segmento de transición.
6
+
7
+ ## Transiciones inmediatas por default
8
+
9
+ Cortar al instante es responsivo y musicalmente destructivo. Reservarlo para muerte del jugador y cortes deliberados. El default sano es siguiente compás.
10
+
11
+ ## Umbrales sin histéresis
12
+
13
+ El caso clásico: el jugador camina en el borde de un radio de detección y la música de combate entra y sale seis veces en diez segundos. Umbrales asimétricos + tiempo mínimo en estado + debounce. Siempre.
14
+
15
+ ## Capas que dependen entre sí
16
+
17
+ Si la capa de melodía se escribió asumiendo que la de armonía suena, al quitar la armonía la melodía queda flotando sin contexto. Cada capa tiene que funcionar sola y con cualquier subconjunto de las de abajo.
18
+
19
+ ## Stingers en la tonalidad equivocada
20
+
21
+ El error más audible del sistema. Si el fondo modula y el stinger es tonal y fijo, va a chocar. Versiones por tonalidad, o stingers tonalmente neutros.
22
+
23
+ ## Stingers sin cooldown
24
+
25
+ Cinco kills en dos segundos disparan cinco stingers superpuestos. Suena a bug.
26
+
27
+ ## Contar los stems y no la memoria
28
+
29
+ Ocho stems estéreo a 48 kHz sonando simultáneos es mucho más que "ocho archivos". Si van descomprimidos en memoria, el número crece rápido. Verificar el budget antes de comprometer la arquitectura vertical.
30
+
31
+ ## Diseñar el sistema después de componer
32
+
33
+ Si el compositor entregó una pieza lineal de tres minutos con clímax, convertirla en capas es imposible sin rehacerla. El sistema se diseña primero y define la restricción compositiva.
34
+
35
+ ## Un estado por situación
36
+
37
+ Veinte estados de música para veinte situaciones de gameplay produce una matriz de transiciones de 400 celdas que nadie va a autorear bien. Agrupar situaciones por emotional target: la mayoría de los juegos vive bien con 4-6 estados.
38
+
39
+ ## Loop que cierra con cadencia auténtica
40
+
41
+ Cada vuelta suena a arranque forzado. Cerrar abierto: semicadencia, pedal, cadencia plagal.
42
+
43
+ ## Música ocupando el rango del diálogo
44
+
45
+ Si el arreglo vive en 500 Hz-2 kHz y hay VO, uno de los dos pierde, y el ducking agresivo se escucha. Se resuelve en el arreglo, no en el mix.
46
+
47
+ ## Ignorar el estado inicial y el retorno
48
+
49
+ Se diseña explore → combat con cuidado y se olvida combat → explore. El retorno es la transición que el jugador escucha más veces.
50
+
51
+ ## Probar solo en el editor
52
+
53
+ El editor de middleware permite disparar estados a mano, en el orden correcto, sin ruido. El jugador real dispara transiciones en secuencias imposibles. Probar con gameplay, no con botones.