claude-code-arcane 2.1.0 → 2.3.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 (89) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +57 -55
  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/agents/career/career-strategist.md +88 -0
  10. package/agents/career/cv-reviewer.md +81 -0
  11. package/agents/career/hiring-manager.md +68 -0
  12. package/agents/career/mock-interviewer.md +76 -0
  13. package/agents/freelance/client-screener.md +84 -0
  14. package/agents/freelance/discovery-call.md +65 -0
  15. package/agents/freelance/pipeline-strategist.md +99 -0
  16. package/agents/freelance/proposal-reviewer.md +82 -0
  17. package/dist/cli.js +52 -13
  18. package/docs/RELEASE-SETUP.md +1 -1
  19. package/docs/SKILLS-CATALOG.md +47 -3
  20. package/docs/USER-GUIDE.md +77 -72
  21. package/docs/agent-hierarchy.md +21 -1
  22. package/docs/presentations/build_arcane_deck.py +2 -2
  23. package/docs/presentations/build_arcane_deck_12.py +2 -2
  24. package/package.json +2 -2
  25. package/profiles/audio.yaml +45 -0
  26. package/profiles/freelance.yaml +43 -0
  27. package/profiles/job-hunt.yaml +5 -2
  28. package/rules/drafter-reviewer.md +16 -3
  29. package/rules/freelance-guardrails.md +53 -0
  30. package/rules/gamedev/audio-code.md +45 -0
  31. package/skills/adaptive-music/SKILL.md +171 -0
  32. package/skills/adaptive-music/references/anti-patterns.md +53 -0
  33. package/skills/audio-audit/SKILL.md +164 -0
  34. package/skills/audio-audit/references/anti-patterns.md +65 -0
  35. package/skills/audio-audit/scripts/check_assets.py +208 -0
  36. package/skills/audio-bible/SKILL.md +119 -0
  37. package/skills/audio-bible/references/anti-patterns.md +39 -0
  38. package/skills/audio-mix/SKILL.md +151 -0
  39. package/skills/audio-mix/references/anti-patterns.md +65 -0
  40. package/skills/audio-spec/SKILL.md +107 -0
  41. package/skills/audio-spec/references/anti-patterns.md +45 -0
  42. package/skills/career-registry/SKILL.md +95 -0
  43. package/skills/career-registry/scripts/career_registry.py +488 -0
  44. package/skills/client-screen/SKILL.md +83 -0
  45. package/skills/client-screen/references/red-flags.md +95 -0
  46. package/skills/cover-letter/SKILL.md +4 -3
  47. package/skills/cv-tailor/SKILL.md +11 -2
  48. package/skills/freelance-deliver/SKILL.md +90 -0
  49. package/skills/freelance-hunt/SKILL.md +126 -0
  50. package/skills/freelance-hunt/references/templates/Connects.md +39 -0
  51. package/skills/freelance-hunt/references/templates/Contrato.md +60 -0
  52. package/skills/freelance-hunt/references/templates/Propuesta.md +66 -0
  53. package/skills/freelance-kickoff/SKILL.md +94 -0
  54. package/skills/freelance-pipeline/SKILL.md +109 -0
  55. package/skills/freelance-pipeline/scripts/import_history.py +425 -0
  56. package/skills/freelance-profile/SKILL.md +93 -0
  57. package/skills/freelance-proposal/SKILL.md +112 -0
  58. package/skills/freelance-scan/SKILL.md +196 -0
  59. package/skills/freelance-scan/references/dedup.md +35 -0
  60. package/skills/freelance-scan/references/platforms.md +167 -0
  61. package/skills/freelance-scan/scripts/freelance_search.py +1077 -0
  62. package/skills/interview-prep/SKILL.md +11 -3
  63. package/skills/job-aplicar/SKILL.md +5 -1
  64. package/skills/job-hunt/SKILL.md +17 -0
  65. package/skills/job-outcome/SKILL.md +15 -1
  66. package/skills/job-upskill/SKILL.md +10 -2
  67. package/skills/middleware-integration/SKILL.md +186 -0
  68. package/skills/middleware-integration/references/anti-patterns.md +69 -0
  69. package/skills/midi-compose/SKILL.md +136 -0
  70. package/skills/midi-compose/references/smf-format.md +129 -0
  71. package/skills/midi-compose/scripts/compose_midi.py +326 -0
  72. package/skills/midi-compose/templates/example-composition.json +69 -0
  73. package/skills/music-composition/SKILL.md +106 -0
  74. package/skills/music-composition/references/form.md +57 -0
  75. package/skills/music-composition/references/game-music.md +82 -0
  76. package/skills/music-composition/references/harmony.md +82 -0
  77. package/skills/music-composition/references/melody.md +48 -0
  78. package/skills/music-composition/references/orchestration.md +69 -0
  79. package/skills/music-composition/references/rhythm-groove.md +49 -0
  80. package/skills/procedural-audio/SKILL.md +157 -0
  81. package/skills/procedural-audio/references/anti-patterns.md +45 -0
  82. package/skills/sfx-design/SKILL.md +130 -0
  83. package/skills/sfx-design/references/anti-patterns.md +53 -0
  84. package/skills/spatial-audio/SKILL.md +139 -0
  85. package/skills/spatial-audio/references/anti-patterns.md +53 -0
  86. package/skills/ui-sound-design/SKILL.md +133 -0
  87. package/skills/ui-sound-design/references/anti-patterns.md +57 -0
  88. package/skills/voice-pipeline/SKILL.md +150 -0
  89. package/skills/voice-pipeline/references/anti-patterns.md +69 -0
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: audio-spec
3
+ description: "SFX spec sheets y audio event lists: trigger, prioridad, concurrencia, cooldown, variaciones, propiedades espaciales. Usar para: especificar sonidos, event list por sistema, brief para sound designer."
4
+ category: "audio"
5
+ argument-hint: "[system-name | all | events]"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit
8
+ ---
9
+ # audio-spec — SFX Specs & Event Lists
10
+
11
+ Convierte dirección sonora en especificaciones que un sound designer externo puede producir sin más briefing, y en event lists que un programador puede implementar sin adivinar.
12
+
13
+ Dos entregables distintos y complementarios:
14
+ - **Spec sheet** — describe *el sonido*: cómo suena, cuánto dura, cuántas variantes
15
+ - **Event list** — describe *el contrato*: qué lo dispara, con qué prioridad, cuántas instancias, qué parámetros recibe
16
+
17
+ ## Cuándo usar
18
+
19
+ - Después de `/audio-bible` (la dirección tiene que existir primero)
20
+ - Cuando vas a tercerizar producción de SFX y necesitás un brief cerrado
21
+ - Cuando el código necesita saber qué eventos postear antes de que existan los assets
22
+ - Antes de `/middleware-integration` — la event list es su input
23
+
24
+ ## Modos
25
+
26
+ | Modo | Qué hace |
27
+ |---|---|
28
+ | `system-name` | Especifica un sistema concreto: spec sheets + event list de, por ejemplo, `combat` |
29
+ | `all` | Barre todos los sistemas del proyecto, uno por vez |
30
+ | `events` | Solo la event list, sin spec sheets. Para cuando el código necesita el contrato antes de que existan los assets |
31
+
32
+ ## Input
33
+
34
+ 1. Leer audio bible (paleta, frequency allocation, mix hierarchy, standards). Si no existe, avisar y ofrecer `/audio-bible` primero
35
+ 2. Identificar el sistema a especificar (combate, locomoción, UI, ambiente, props...) o `all`
36
+ 3. Leer el código/GDD del sistema para extraer los momentos que piden sonido
37
+ 4. Preguntar al usuario: nivel de detalle (spec completo vs event list sola) y si hay assets existentes que reusar
38
+
39
+ ---
40
+
41
+ ## Spec sheet — campos obligatorios
42
+
43
+ Cada sonido lleva estos campos. Un campo vacío es una decisión que alguien va a tomar por vos:
44
+
45
+ | Campo | Qué define | Ejemplo |
46
+ |---|---|---|
47
+ | **ID** | Nombre canónico, matchea naming del bible | `sfx_weapon_shotgun_fire` |
48
+ | **Descripción** | Qué es, en una línea funcional | Disparo de escopeta de doble caño, seco, sin cola de reverb |
49
+ | **Referencias** | 1-3 sonidos concretos con qué tomar de cada uno | — |
50
+ | **Carácter frecuencial** | Dónde vive, contra la allocation del bible | Sub-punch 50-70 Hz + crack 3-5 kHz, vacío en mids |
51
+ | **Duración** | Rango, no valor único | 180-260 ms |
52
+ | **Envolvente** | Attack / body / tail explícitos | Attack <5 ms, body 60 ms, tail 120 ms |
53
+ | **Rango de volumen** | Nivel relativo a la categoría | −6 dB a −3 dB del bus SFX |
54
+ | **Propiedades espaciales** | 2D/3D, curva de atenuación, min/max distance | 3D, 2-40 m, log |
55
+ | **Variaciones** | Cuántas variantes y qué randomización | 5 variantes, pitch ±3%, volumen ±1.5 dB |
56
+ | **Prioridad** | Qué se cae primero bajo presión de voces | Alta (feedback de acción del jugador) |
57
+
58
+ ## Event list — campos obligatorios
59
+
60
+ | Campo | Qué define |
61
+ |---|---|
62
+ | **Evento** | Nombre que postea el código |
63
+ | **Trigger** | Condición exacta de gameplay que lo dispara |
64
+ | **Sonidos** | Qué IDs de spec resuelve (uno o un container) |
65
+ | **Concurrencia** | Máximo de instancias simultáneas + qué hacer al exceder (drop oldest / drop newest / reject) |
66
+ | **Cooldown** | Mínimo entre disparos, para eventos que pueden spamearse |
67
+ | **Parámetros** | RTPCs que recibe, con rango normalizado |
68
+ | **Stop condition** | Cómo termina: one-shot, loop con stop explícito, o fade |
69
+
70
+ **Concurrencia y cooldown no son opcionales.** Son la diferencia entre un sistema que sobrevive 40 enemigos en pantalla y uno que satura el voice budget. Todo evento que puede dispararse más de una vez por frame necesita ambos.
71
+
72
+ ---
73
+
74
+ ## Proceso
75
+
76
+ 1. **Barrer el sistema** — listar cada momento que pide sonido, incluyendo los negativos (dónde el silencio es la decisión)
77
+ 2. **Agrupar** — sonidos que comparten carácter van juntos; identificar qué puede ser variación de un mismo asset en vez de asset nuevo
78
+ 3. **Draftar** specs y event list del grupo
79
+ 4. **Presentar** al usuario para review
80
+ 5. **Escribir** — preguntar "¿Escribo el spec de `<sistema>` a `<path>`?" antes de usar Write
81
+
82
+ No batchear sistemas: cerrar uno antes de abrir el siguiente.
83
+
84
+ ### Reducción de assets
85
+
86
+ Antes de especificar N sonidos nuevos, preguntar si el caso se resuelve con variación o con síntesis. El caso canónico: 20 samples × 6 superficies × 3 intensidades = 360 archivos (~180 MB) vs footsteps procedurales (~50 KB) con variación infinita. Si el sistema es de alta frecuencia y muchas dimensiones, derivar a `/procedural-audio` antes de escribir el spec.
87
+
88
+ ---
89
+
90
+ ## Verdict
91
+
92
+ Por sistema especificado:
93
+
94
+ - **READY** — todo sonido tiene los 10 campos, todo evento tiene concurrencia y cooldown. Un externo puede producir y un programador puede implementar
95
+ - **CONCERNS** — hay campos vacíos o eventos sin límites; listar cuáles
96
+ - **BLOCKED** — falta el audio bible, o el sistema de gameplay no está definido lo suficiente para saber qué momentos existen
97
+
98
+ ## Anti-patterns
99
+
100
+ > → Read references/anti-patterns.md
101
+
102
+ ## Next steps
103
+
104
+ - `/middleware-integration` para implementar la event list en Wwise/FMOD
105
+ - `/procedural-audio` para los sistemas de alta frecuencia que no conviene samplear
106
+ - `/sfx-design` para profundizar el diseño de los sonidos hero
107
+ - `/audio-audit` para verificar los assets entregados contra el spec
@@ -0,0 +1,45 @@
1
+ # Audio Spec — Anti-patterns
2
+
3
+ ## Spec sin números
4
+
5
+ "Impacto potente y satisfactorio" no es producible. Duración, envolvente, bandas de frecuencia y nivel relativo sí. Si el campo no tiene número o rango, no está especificado.
6
+
7
+ ## Duración como valor único
8
+
9
+ "200 ms" fuerza al sound designer a mentir o a pedir aprobación. Un rango (180-260 ms) le da lugar a que el sonido termine donde tiene que terminar.
10
+
11
+ ## Eventos sin concurrencia
12
+
13
+ El spec dice "sonido de casquillo al caer". Llegan 40 enemigos, 300 casquillos, el voice budget explota y el mix desaparece. Todo evento que puede dispararse más de una vez por frame necesita máximo de instancias y política de descarte.
14
+
15
+ ## Cooldown ausente en eventos de UI
16
+
17
+ Navegación rápida en un menú dispara el mismo tick 15 veces en 200 ms. Suena como un glitch. Cooldown mínimo, siempre.
18
+
19
+ ## Una variante
20
+
21
+ Un sonido sin variantes se vuelve audible como *sonido* en vez de como evento en unos 20 minutos de juego. Si el evento es frecuente, mínimo 4-5 variantes o randomización de pitch, y preferentemente ambas.
22
+
23
+ ## Pitch randomization exagerada
24
+
25
+ ±3% es variación. ±20% cambia el objeto: el arma parece otra arma. Rango chico y round-robin le gana a rango grande.
26
+
27
+ ## Specs 3D sin curva
28
+
29
+ Marcar "3D" y no definir min/max distance ni forma de la curva deja la atenuación en el default del middleware, que casi nunca es el correcto. El sonido se oye a 200 m o desaparece a 3 m.
30
+
31
+ ## Especificar antes de decidir procedural
32
+
33
+ Escribir 360 spec sheets de footsteps es trabajo perdido si la respuesta correcta era síntesis. Evaluar el eje frecuencia × dimensiones antes de especificar.
34
+
35
+ ## Event list sin stop condition
36
+
37
+ Los loops son la fuente número uno de audio colgado. Todo sonido que loopea necesita decir explícitamente quién lo para y qué pasa si el objeto dueño se destruye primero.
38
+
39
+ ## Prioridades todas iguales
40
+
41
+ Si todo es prioridad alta, el voice limiter descarta al azar y se cae el feedback de la acción del jugador antes que un ambiente lejano. Las prioridades solo sirven si están diferenciadas.
42
+
43
+ ## IDs que no siguen el naming del bible
44
+
45
+ `shotgun2_FINAL_v3` rompe búsqueda, batch processing y automatización de banks. El ID sale del pattern del bible, sin excepciones.
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: career-registry
3
+ description: "Traceability across the whole career workspace: check whether you already applied somewhere before spending another application, export everything to CSV, and audit the registry for gaps and drift. Covers job applications, freelance proposals and contracts. Triggers: ya me postule a, ya aplique aca, exportar postulaciones a csv, registro de aplicaciones, trazabilidad, historial de postulaciones, cuantas mande, planilla de postulaciones, auditar el registro."
4
+ argument-hint: "[check <empresa|url> | export | stats | audit]"
5
+ category: "career"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Bash, Write, Edit
8
+ ---
9
+
10
+ # Career Registry - Trazabilidad y registro
11
+
12
+ Contestás la pregunta que grepear a mano contesta mal: **¿ya me postulé acá?** Y das el registro completo en CSV para mirarlo en una planilla.
13
+
14
+ Sirve a los dos perfiles: `+job-hunt` (empleo) y `+freelance` (proyectos). Rutas relativas al career workspace (`--workspace`, env `CAREER_WORKSPACE`, o `./career-workspace/`).
15
+
16
+ Modo: `$ARGUMENTS`
17
+
18
+ ## La regla que sostiene todo esto
19
+
20
+ **Las notas son la fuente de verdad. El CSV se deriva de ellas, siempre.**
21
+
22
+ No hay una segunda base que mantener sincronizada, y no la va a haber: una segunda base diverge en dos semanas y después nadie sabe cuál miente. Es el mismo flujo unidireccional que el dedup de `/job-scrape` (`seen_jobs` → nota → vista, nunca de vuelta).
23
+
24
+ Consecuencia práctica: si el CSV está mal, se arregla la nota, no el CSV. Y si el usuario pide "guardame el CSV para editarlo a mano", avisale que en la próxima corrida se pisa.
25
+
26
+ ## Los cuatro modos
27
+
28
+ ```bash
29
+ python .claude/skills/career-registry/scripts/career_registry.py check "Acme"
30
+ python .claude/skills/career-registry/scripts/career_registry.py check "https://www.linkedin.com/jobs/view/123"
31
+ python .claude/skills/career-registry/scripts/career_registry.py export --csv registro.csv
32
+ python .claude/skills/career-registry/scripts/career_registry.py stats
33
+ python .claude/skills/career-registry/scripts/career_registry.py audit
34
+ ```
35
+
36
+ ### `check` - antes de gastar otra postulación
37
+
38
+ Busca por **tres claves** porque el usuario pega cualquiera de las tres: nombre de la contraparte, URL de la oferta, o título de la nota.
39
+
40
+ Es tolerante donde importa: `acme` encuentra a "Acme Inc" (ignora sufijos legales), `tecnologia latam` encuentra a "Tecnología Latam SA" (ignora acentos), y una URL con `?utm_source=...` distinto encuentra la misma oferta (canoniza el link, igual que el dedup).
41
+
42
+ Devuelve un veredicto de tres valores, y la diferencia entre los dos primeros importa:
43
+
44
+ | Veredicto | Qué significa |
45
+ |---|---|
46
+ | `YA TE POSTULASTE` | Hay una nota en estado enviado. No repitas |
47
+ | `YA LO VISTE, NO TE POSTULASTE` | Hay nota o entrada de dedup, pero nunca se envió. Vale revisarla antes de descartarla de nuevo |
48
+ | `SIN REGISTRO` | Nunca apareció |
49
+
50
+ Cuándo correrlo: **antes de `/client-screen` o `/job-aplicar`**, cuando el nombre suena conocido. Un screen sobre algo que ya descartaste hace tres meses es trabajo repetido, y peor, te hace repetir el descarte sin recordar por qué.
51
+
52
+ ### `export` - el CSV
53
+
54
+ Una fila por nota, con `tipo` discriminando empleo / freelance / contrato. Columnas: contraparte, título, estado, si está abierta, plataforma, `match_score`, riesgo del cliente, perfil usado, bid o monto, costo de postularse, fechas, **días sin movimiento**, link y la ruta de la nota.
55
+
56
+ Sin `--csv` va a stdout; con `--csv <archivo>` lo escribe en UTF-8 con BOM para que Excel no rompa los acentos. `--tipo` filtra a un solo tipo.
57
+
58
+ `dias_sin_movimiento` es la columna más útil de la planilla: ordenando por ahí aparece lo que quedó colgado.
59
+
60
+ ### `stats` - conteos
61
+
62
+ Total y abiertas por tipo, desglose por estado, cuántas se enviaron y el costo de postulaciones registrado.
63
+
64
+ Trae `muestra_suficiente_para_tasas`: **con menos de 10 enviadas es `false`, y ahí no hay que calcular tasas de conversión**. Diez rechazos no son un patrón, y tratarlos como tal manda al usuario a arreglar lo que no estaba roto.
65
+
66
+ ### `audit` - las divergencias
67
+
68
+ Lo que hace que la trazabilidad sea real y no una intención:
69
+
70
+ - Notas sin `estado` o sin contraparte
71
+ - Enviadas sin fecha de envío (rompe cualquier cálculo de tiempos)
72
+ - **Abiertas frenadas hace 21+ días** - candidatas a follow-up con `/cold-outreach` o a cerrar como `sin_respuesta`
73
+ - Posibles duplicados: misma contraparte, mismo título, dos notas
74
+ - **Contratos con horas reales arriba de lo estimado**, con el exceso en horas y en porcentaje. Cada uno es trabajo regalado si no hubo change order
75
+ - Punteros del dedup que apuntan a notas que ya no existen
76
+
77
+ ## Proceso
78
+
79
+ 1. Correr el modo pedido. Si el workspace no existe, el script lo dice y sugiere `/freelance-hunt setup` o `/job-hunt setup`.
80
+ 2. **Mostrar el resultado en el chat, no solo el JSON crudo.** Para `check`, el veredicto y una línea por coincidencia con su estado. Para `audit`, agrupado por severidad: primero lo que cuesta plata (horas de más, enviadas sin fecha), después lo cosmético.
81
+ 3. Para cada hallazgo de `audit`, ofrecer la acción concreta: follow-up, cerrar como `sin_respuesta`, change order, o completar el campo que falta.
82
+ 4. Los arreglos se hacen **en la nota** con approval del usuario, una por una. Nunca en masa.
83
+
84
+ ## Reglas
85
+
86
+ - **Nunca editar el CSV como si fuera la fuente de verdad.** Se regenera; los cambios van a la nota.
87
+ - **No editar notas en masa.** Cada arreglo se muestra y se aprueba.
88
+ - Nunca inventar un dato que falta: si una nota no tiene fecha de envío, se pregunta o se deja el hueco reportado.
89
+ - No cambiar `estado`: eso lo hace `/job-outcome`, que es el único que mueve el pipeline.
90
+ - El CSV puede tener nombres de clientes y montos: **no commitearlo a un remoto sin confirmación explícita**.
91
+ - Sin guiones largos en el texto agregado a las notas.
92
+
93
+ ## Handoff
94
+
95
+ Pedí aprobación (approval) antes de escribir el CSV o tocar una nota. Registro COMPLETE cuando el modo corrió y el usuario sabe qué hacer con cada hallazgo. Según el caso, el siguiente paso es `/cold-outreach` (follow-up de lo frenado), `/job-outcome` (cerrar lo que no va a responder), `/contract-and-proposal-writer` (change order de las horas de más) o `/freelance-pipeline` (si hay 10+ resueltas y querés el diagnóstico del embudo).