claude-code-arcane 1.4.0 → 2.1.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 (84) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +5 -4
  3. package/dist/cli.js +2 -0
  4. package/docs/SKILLS-CATALOG.md +30 -3
  5. package/docs/USER-GUIDE.md +2 -2
  6. package/docs/coding-standards.md +26 -0
  7. package/package.json +2 -1
  8. package/profiles/job-hunt.yaml +12 -2
  9. package/profiles/second-brain.yaml +37 -0
  10. package/rules/drafter-reviewer.md +39 -0
  11. package/rules/vault-conventions.md +144 -0
  12. package/skills/brain-dump/SKILL.md +53 -0
  13. package/skills/cold-outreach/SKILL.md +10 -10
  14. package/skills/cold-outreach/references/recruiter-playbook.md +5 -5
  15. package/skills/cover-letter/SKILL.md +8 -8
  16. package/skills/cv-ats-export/SKILL.md +19 -6
  17. package/skills/cv-ats-export/scripts/cv_export.py +49 -4
  18. package/skills/cv-ats-export/scripts/verify_pdf.py +90 -0
  19. package/skills/cv-tailor/SKILL.md +7 -7
  20. package/skills/cv-tailor/references/ats-keywords.md +9 -9
  21. package/skills/hub-note/SKILL.md +68 -0
  22. package/skills/interview-prep/SKILL.md +7 -7
  23. package/skills/interview-prep/references/star-framework.md +10 -10
  24. package/skills/job-aplicar/SKILL.md +88 -0
  25. package/skills/job-hunt/SKILL.md +20 -13
  26. package/skills/job-hunt/references/templates/Aplicacion.md +6 -2
  27. package/skills/job-hunt/references/templates/CV Custom.md +1 -1
  28. package/skills/job-hunt/references/templates/Contacto.md +1 -1
  29. package/skills/job-hunt/references/templates/Dashboard.md +19 -15
  30. package/skills/job-hunt/references/templates/Perfil.md +2 -2
  31. package/skills/job-outcome/SKILL.md +55 -0
  32. package/skills/job-scrape/SKILL.md +95 -0
  33. package/skills/job-scrape/references/dedup-playbook.md +25 -0
  34. package/skills/job-scrape/references/getonbrd-cli.md +62 -0
  35. package/skills/job-scrape/references/getonbrd-urls.md +37 -0
  36. package/skills/job-scrape/references/linkedin-cli.md +64 -0
  37. package/skills/job-scrape/references/linkedin-urls.md +42 -0
  38. package/skills/job-scrape/references/seen_jobs.schema.json +68 -0
  39. package/skills/job-scrape/scripts/getonbrd_search.py +501 -0
  40. package/skills/job-scrape/scripts/linkedin_search.py +428 -0
  41. package/skills/job-search/SKILL.md +22 -19
  42. package/skills/job-search/references/scoring-rubric.md +8 -8
  43. package/skills/job-upskill/SKILL.md +58 -0
  44. package/skills/linkedin-optimize/SKILL.md +5 -5
  45. package/skills/master-profile/SKILL.md +17 -17
  46. package/skills/network-map/SKILL.md +7 -7
  47. package/skills/obsidian-bases/SKILL.md +85 -0
  48. package/skills/obsidian-bases/references/bases-syntax.md +123 -0
  49. package/skills/obsidian-canvas/SKILL.md +91 -0
  50. package/skills/obsidian-markdown/SKILL.md +110 -0
  51. package/skills/pdf-generator/scripts/fill_inspect.py +2 -0
  52. package/skills/pdf-generator/scripts/render_body.py +2 -0
  53. package/skills/personal-brand/SKILL.md +10 -10
  54. package/skills/personal-brand/references/post-pillars.md +14 -14
  55. package/skills/portfolio-site/SKILL.md +11 -11
  56. package/skills/review-dump/SKILL.md +108 -0
  57. package/skills/review-monthly/SKILL.md +56 -0
  58. package/skills/review-weekly/SKILL.md +91 -0
  59. package/skills/second-brain/SKILL.md +211 -0
  60. package/skills/second-brain/hooks/hooks.json +16 -0
  61. package/skills/second-brain/hooks/validate-note.sh +85 -0
  62. package/skills/second-brain/references/cross-project.md +57 -0
  63. package/skills/second-brain/references/templates/Atomic.md +22 -0
  64. package/skills/second-brain/references/templates/Daily.md +25 -0
  65. package/skills/second-brain/references/templates/Dashboard.base +70 -0
  66. package/skills/second-brain/references/templates/Dump.md +11 -0
  67. package/skills/second-brain/references/templates/Hub.md +22 -0
  68. package/skills/second-brain/references/templates/Monthly.md +29 -0
  69. package/skills/second-brain/references/templates/Weekly.md +29 -0
  70. package/skills/second-brain/references/templates/codebases.md +37 -0
  71. package/skills/second-brain/references/templates/hot.md +37 -0
  72. package/skills/second-brain/references/templates/vault-CLAUDE.md +127 -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/xlsx-generator/scripts/formula_check.py +2 -0
  80. package/skills/xlsx-generator/scripts/libreoffice_recalc.py +2 -0
  81. package/skills/xlsx-generator/scripts/xlsx_add_column.py +2 -0
  82. package/skills/xlsx-generator/scripts/xlsx_insert_row.py +2 -0
  83. package/skills/xlsx-generator/scripts/xlsx_reader.py +2 -0
  84. package/skills/zettel/SKILL.md +66 -0
@@ -1,17 +1,17 @@
1
- # Post Pillars — Ángulos, hooks y formatos
1
+ # Post Pillars - Ángulos, hooks y formatos
2
2
 
3
3
  Guía para generar ideas con sustancia por cada uno de los 4 pilares. Cada idea final = **hook + ángulo + formato**.
4
4
 
5
5
  ## Formatos disponibles
6
6
 
7
- - **Text post corto** — 1 idea, 3–6 líneas, hook fuerte.
8
- - **Lista / "X things"** — escaneable, alto guardado.
9
- - **Carrusel** — paso a paso o framework (si el usuario hace slides).
10
- - **Hot take / POV** — opinión con tensión, invita a debate.
11
- - **Story / mini-caso** — situación → acción → resultado (mini-STAR público).
12
- - **Pregunta** — abre conversación, sube engagement.
7
+ - **Text post corto** - 1 idea, 3-6 líneas, hook fuerte.
8
+ - **Lista / "X things"** - escaneable, alto guardado.
9
+ - **Carrusel** - paso a paso o framework (si el usuario hace slides).
10
+ - **Hot take / POV** - opinión con tensión, invita a debate.
11
+ - **Story / mini-caso** - situación → acción → resultado (mini-STAR público).
12
+ - **Pregunta** - abre conversación, sube engagement.
13
13
 
14
- ## Pilar 1 — Builder credibility
14
+ ## Pilar 1 - Builder credibility
15
15
 
16
16
  Demostrar que entregás. Ángulos:
17
17
  - Un problema real que resolviste + el número de impacto.
@@ -21,7 +21,7 @@ Demostrar que entregás. Ángulos:
21
21
 
22
22
  Hooks ejemplo: *"Bajé la latencia de matchmaking 25%. El cambio que más movió la aguja no fue el que esperaba."*
23
23
 
24
- ## Pilar 2 — Lessons from current role
24
+ ## Pilar 2 - Lessons from current role
25
25
 
26
26
  Aprendizajes concretos, no abstractos. Ángulos:
27
27
  - Un error que cometiste y qué cambiaste.
@@ -31,7 +31,7 @@ Aprendizajes concretos, no abstractos. Ángulos:
31
31
 
32
32
  Hooks ejemplo: *"Pasé 2 años optimizando lo que no importaba. Esto es lo que mido ahora."*
33
33
 
34
- ## Pilar 3 — POVs on your domain
34
+ ## Pilar 3 - POVs on your domain
35
35
 
36
36
  Posicionarte como alguien que piensa el dominio. Ángulos:
37
37
  - Una tendencia y por qué estás de acuerdo / en contra.
@@ -41,7 +41,7 @@ Posicionarte como alguien que piensa el dominio. Ángulos:
41
41
 
42
42
  Hooks ejemplo: *"Todos dicen que [tendencia]. En producción, lo que veo es otra cosa."*
43
43
 
44
- ## Pilar 4 — Behind-the-scenes del job search
44
+ ## Pilar 4 - Behind-the-scenes del job search
45
45
 
46
46
  Cercanía + a veces atrae ofertas directas. Usar con medida (no quejas). Ángulos:
47
47
  - Qué buscás y por qué (señal clara para recruiters).
@@ -53,9 +53,9 @@ Hooks ejemplo: *"Estoy buscando mi próximo rol como [rol]. Esto es exactamente
53
53
 
54
54
  ## Secuenciación (90 días)
55
55
 
56
- - **Días 1–30 (autoridad):** ~70% pilares 1–3, ~30% pilar 2. Casi nada de "busco trabajo" todavía — primero construís credibilidad.
57
- - **Días 31–60 (visibilidad + señal):** introducir pilar 4 (qué buscás), mantener 1–3. Empezar outreach (`/cold-outreach`) apoyado en los posts.
58
- - **Días 61–90 (conversión):** mezclar los 4, más casos de builder credibility, CTAs suaves hacia conversaciones.
56
+ - **Días 1-30 (autoridad):** ~70% pilares 1-3, ~30% pilar 2. Casi nada de "busco trabajo" todavía - primero construís credibilidad.
57
+ - **Días 31-60 (visibilidad + señal):** introducir pilar 4 (qué buscás), mantener 1-3. Empezar outreach (`/cold-outreach`) apoyado en los posts.
58
+ - **Días 61-90 (conversión):** mezclar los 4, más casos de builder credibility, CTAs suaves hacia conversaciones.
59
59
 
60
60
  ## Anti-patrones
61
61
 
@@ -7,7 +7,7 @@ user-invocable: true
7
7
  allowed-tools: Read, Glob, Grep, Bash, Write, Edit, WebFetch
8
8
  ---
9
9
 
10
- # Portfolio Site — Portfolio web desde el source-of-truth
10
+ # Portfolio Site - Portfolio web desde el source-of-truth
11
11
 
12
12
  Generás o actualizás un **portfolio web personal** a partir de un único source-of-truth (`portfolio/Datos Portfolio Web.md` en el career workspace, derivado del perfil maestro). La regla: **el contenido se edita primero en el `.md`** y de ahí se sincroniza al sitio.
13
13
 
@@ -19,7 +19,7 @@ Convención: **valores en inglés** (van directo al sitio) y meta-instrucciones
19
19
 
20
20
  ## Modos
21
21
 
22
- ### `sync` — Actualizar un portfolio existente
22
+ ### `sync` - Actualizar un portfolio existente
23
23
  Para cuando ya hay un repo de portfolio (ej. una React SPA con el contenido en `src/pages/*.js`, `src/data/*`, o similar).
24
24
 
25
25
  1. Leer el source-of-truth y el repo destino.
@@ -28,10 +28,10 @@ Para cuando ya hay un repo de portfolio (ej. una React SPA con el contenido en `
28
28
  4. Aplicar los cambios al sitio respetando su arquitectura y estilo de código existentes.
29
29
  5. Verificar (build/preview) y resumir el diff.
30
30
 
31
- ### `scaffold` — Crear un portfolio nuevo
31
+ ### `scaffold` - Crear un portfolio nuevo
32
32
  Para cuando no hay sitio todavía.
33
33
 
34
- 1. Preguntar el stack preferido (default sugerido: **sitio estático simple** — HTML/CSS o un framework liviano como Astro/Vite — fácil de hostear en GitHub Pages/Netlify).
34
+ 1. Preguntar el stack preferido (default sugerido: **sitio estático simple** - HTML/CSS o un framework liviano como Astro/Vite - fácil de hostear en GitHub Pages/Netlify).
35
35
  2. Preguntar secciones deseadas (hero, about, experiencia, proyectos, skills, contacto).
36
36
  3. Generar el proyecto consumiendo el source-of-truth como contenido.
37
37
  4. Configurar deploy (GitHub Pages / Netlify) si el usuario quiere.
@@ -39,18 +39,18 @@ Para cuando no hay sitio todavía.
39
39
 
40
40
  ## Secciones típicas
41
41
 
42
- - **Hero** — nombre, headline, bio corto, links (GitHub/LinkedIn/email público).
43
- - **About** — bio medio/largo.
44
- - **Experience** — roles con highlights.
45
- - **Projects** — los destacados, con tech, descripción corta y link en vivo.
46
- - **Skills** — agrupados, con nivel/%.
47
- - **Contact** — email **público** (nunca el personal), formulario o links.
42
+ - **Hero** - nombre, headline, bio corto, links (GitHub/LinkedIn/email público).
43
+ - **About** - bio medio/largo.
44
+ - **Experience** - roles con highlights.
45
+ - **Projects** - los destacados, con tech, descripción corta y link en vivo.
46
+ - **Skills** - agrupados, con nivel/%.
47
+ - **Contact** - email **público** (nunca el personal), formulario o links.
48
48
 
49
49
  ## Reglas
50
50
 
51
51
  - **El `.md` es la fuente.** Nunca editar el sitio sin reflejarlo en el source-of-truth (si no, vuelve el drift).
52
52
  - Email **público** en el sitio, jamás el personal/teléfono.
53
- - Respetar la arquitectura y el estilo del repo existente en modo `sync` — no reescribir todo.
53
+ - Respetar la arquitectura y el estilo del repo existente en modo `sync` - no reescribir todo.
54
54
  - En `scaffold`, mantenerlo simple y rápido de hostear salvo que el usuario pida otra cosa.
55
55
  - No subir datos sensibles; el portfolio es público.
56
56
 
@@ -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`.
@@ -0,0 +1,211 @@
1
+ ---
2
+ name: second-brain
3
+ description: "Entry point del segundo cerebro en Obsidian. Crea o adopta un vault (PARA + Zettelkasten + hub files), escribe su CLAUDE.md, detecta que plugins hay instalados, conecta otros proyectos al mismo vault y rutea al skill correcto. Triggers: second brain, segundo cerebro, setup vault obsidian, organizar mi vault, empezar vault, adoptar mi vault."
4
+ argument-hint: "[setup | adopt | status | next | link]"
5
+ category: "pkm"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Bash, Write, Edit
8
+ ---
9
+
10
+ # Second Brain - Vault Orchestrator
11
+
12
+ Sos el punto de entrada del segundo cerebro. Tu trabajo es: ubicar (o crear) el vault, entender en que estado esta, y rutear al skill correcto. No hacés todo vos, orquestás.
13
+
14
+ Aplica la rule `vault-conventions` en toda escritura.
15
+
16
+ ## Idioma
17
+
18
+ Comunicación con el usuario en **español**. Las notas del vault van en el idioma en que el usuario escribe sus dumps: detectalo del contenido existente y no lo cambies.
19
+
20
+ ## Ubicar el vault
21
+
22
+ En este orden: flag `--vault <path>`, env `OBSIDIAN_VAULT`, o el directorio actual si contiene `.obsidian/`. Si no hay ninguno, preguntar antes de asumir. Un directorio sin `.obsidian/` no es un vault: es una carpeta con markdown, y hay que avisarlo.
23
+
24
+ ## El vault
25
+
26
+ ```
27
+ CLAUDE.md contrato del vault: estructura, frontmatter, reglas de link
28
+ hot.md cache de contexto reciente, lo reescribe /review-dump
29
+ _inbox/ captura cruda, un archivo por dia (YYYY-MM-DD dump.md)
30
+ Reflect/
31
+ Daily/ sintesis del dia, la crea /review-dump
32
+ Weekly/ retrospectiva semanal
33
+ Monthly/ patrones y balance del mes
34
+ 01_Projects/ con deadline o resultado definido [PARA]
35
+ 02_Areas/ responsabilidades continuas [PARA]
36
+ 03_Resources/ notas atomicas, plano, sin subcarpetas [Zettelkasten]
37
+ 04_Archive/ cerrado, nunca borrado [PARA]
38
+ Hubs/ una nota por entidad que importa
39
+ Bases/ vistas .base
40
+ Templates/ plantillas del usuario
41
+ ```
42
+
43
+ Ese árbol es el **default del `setup`**, no una imposición: el `## Rutas` del `CLAUDE.md` del vault mapea cada rol (`inbox`, `daily`, `hubs`...) a la carpeta que lo cumple, y los skills leen ese mapeo. Un vault adoptado conserva sus nombres y todo sigue funcionando.
44
+
45
+ Dos frameworks, dos capas: **PARA es la capa de navegación** (toda nota tiene una casa) y **Zettelkasten es la capa de conocimiento** (las notas atómicas viven planas en `03_Resources/` y se conectan por links). Los **hub files** son el tejido entre las dos: una nota por entidad que importa (persona, herramienta, concepto, empresa) que acumula conocimiento con el tiempo.
46
+
47
+ Las carpetas agrupan por propósito, los links agrupan por significado: una nota vive en una carpeta y linkea a muchas.
48
+
49
+ ## Detección de capacidades
50
+
51
+ Antes de generar cualquier vista o sintaxis que dependa de un plugin, leer `.obsidian/core-plugins.json` y `.obsidian/community-plugins.json` y adaptar:
52
+
53
+ | Si está | Usar para | Si no está |
54
+ |---|---|---|
55
+ | `bases` (core, Obsidian 1.9+) | dashboards y vistas agregadas (`.base`) | tabla markdown estática en el dashboard |
56
+ | `dataview` | campos inline y texto computado que Bases no expresa | reformular la vista para que la exprese Bases |
57
+ | `obsidian-tasks-plugin` | sintaxis de fechas y prioridad en tareas | checkboxes markdown planos |
58
+ | `templater-obsidian` | templates de alta frecuencia (daily) | los skills escriben el archivo directo |
59
+ | `omnisearch` | ofrecerlo para búsqueda difusa desde la UI de Obsidian | `/vault-recall`, que rankea sin depender de plugins |
60
+
61
+ Nunca mencionar en una nota una sintaxis de un plugin que el usuario no tiene instalado: queda como texto roto en la vista de lectura. Registrar el resultado de la detección en el `CLAUDE.md` del vault para no repetirla cada sesión.
62
+
63
+ ## Modos
64
+
65
+ ### `setup` - Crear el vault
66
+ 1. Confirmar el path del vault y si ya existe `.obsidian/` (si no existe, avisar que Obsidian tiene que abrirlo una vez para inicializarse).
67
+ 2. Correr la detección de capacidades.
68
+ 3. Crear el árbol de carpetas.
69
+ 4. Copiar los templates de `references/templates/` a `Templates/` del vault.
70
+ 5. Escribir el `CLAUDE.md` del vault desde `references/templates/vault-CLAUDE.md`, completando **el `## Rutas`** (rol a carpeta), el contrato de frontmatter y los plugins detectados. El `## Rutas` no es decorativo: es de donde todos los demás skills sacan dónde escribir.
71
+ 6. Si hay `bases`, crear `Bases/Dashboard.base` con las vistas de tareas abiertas y notas recientes (delegar la sintaxis a `/obsidian-bases`).
72
+ 7. Crear `hot.md` desde `references/templates/hot.md`, vacío. Es el caché que abre las sesiones siguientes (ver abajo).
73
+ 8. Si el usuario escribe código, crear `codebases.md` desde su template: es el puente del vault al repo, y lo que evita que la arquitectura se copie al vault.
74
+ 9. **Construir el índice** para que la primera búsqueda y el primer review no paguen la indexación completa:
75
+ ```bash
76
+ python .claude/skills/vault-recall/scripts/vault_index.py "<vault>" refresh
77
+ ```
78
+ 10. **Ofrecer el hook de validación** (opcional, ver abajo).
79
+ 11. Verificar que el vault sea un repo git; si no lo es, recomendarlo y explicar por qué (es el undo de cualquier corrida). Preguntar además si el vault se sincroniza y, si la respuesta es sí, aplicar las reglas de sync de abajo **antes** de escribir nada más.
80
+
81
+ Pedir approval antes de escribir. Verdict: vault READY cuando existen el árbol, los templates y el `CLAUDE.md` con su `## Rutas`.
82
+
83
+ ### `adopt` - Adoptar un vault existente
84
+ Para un vault ya armado, con o sin estructura coherente. No migra nada por su cuenta.
85
+
86
+ 1. Mapear lo que hay: `Glob` de carpetas de primer nivel, conteo de notas por carpeta, campos de frontmatter en uso (`Grep`), convención de nombres de las notas periódicas, tags más usados.
87
+ 2. **Mapear rol a carpeta**, que es el entregable central de este modo. Para cada rol (`inbox`, `daily`, `weekly`, `monthly`, `atomic`, `hubs`, `projects`, `areas`, `archive`, `templates`), proponer qué carpeta del vault lo cumple hoy, y marcar `(no usa)` los que no existen. Confirmar el mapeo con el usuario item por item: es la traducción de la que dependen todos los demás skills, y un rol mal mapeado hace que escriban en la carpeta equivocada sin error visible.
88
+ 3. Correr `/vault-audit` con los flags que salen de ese mapeo (`--exempt` para `templates` y `archive`, `--require` con los campos de frontmatter que el vault ya usa) para tener métricas reales y no hallazgos falsos.
89
+ 4. Reportar el mapeo y proponer **una de dos** rutas, con el costo de cada una:
90
+ - **Adoptar la estructura existente:** escribir el `CLAUDE.md` con el `## Rutas` que acabás de mapear. Cero movimiento de archivos, cero links roto. Es la opción por default.
91
+ - **Migrar a la estructura de `setup`:** plan explícito de qué carpeta va a dónde, ejecutado por `/vault-tidy` con approval item por item, en un repo git limpio.
92
+ 5. Escribir el `CLAUDE.md` de la ruta elegida, con el `## Rutas` completo. Nunca mover archivos en este modo.
93
+ 6. Construir el índice (`vault_index.py refresh`) pasando el mapeo: `--role hubs=<carpeta> --role atomic=<carpeta> ...`.
94
+
95
+ Verdict: vault READY cuando el `CLAUDE.md` describe las convenciones reales del vault, no las ideales, y su `## Rutas` cubre los diez roles o los marca como no usados.
96
+
97
+ ### `status` - Dónde estoy
98
+ 1. Leer `hot.md` primero: son 40 líneas y responden "dónde estaba" sin abrir nada más. Si está vacío o desactualizado, seguir igual y decirlo.
99
+ 2. Leer el `CLAUDE.md` del vault para resolver los roles.
100
+ 3. Correr `vault_index.py "<vault>" inventory --format text`: ya devuelve los dumps sin daily, el último weekly y monthly, y los hubs con sus alias. Es una llamada en vez de varios `Glob`, y no crece con el vault.
101
+ 4. Reportar eso más las tareas abiertas y los proyectos sin actividad reciente.
102
+ 5. Recomendar la acción de mayor impacto.
103
+
104
+ ### `next` - Qué hago ahora
105
+ Según el estado, recomendar el skill siguiente (ver routing).
106
+
107
+ ### `link` - Conectar otro proyecto al vault
108
+ Para usar el mismo segundo cerebro desde cualquier repo, sin duplicar notas.
109
+
110
+ 1. Confirmar el path del vault y que el proyecto actual no sea el vault mismo.
111
+ 2. Leer `references/cross-project.md` y proponer el snippet, con el path real completado.
112
+ 3. Con approval, agregarlo al `CLAUDE.md` **del proyecto actual** (crear el archivo si no existe). Nunca se toca el vault en este modo.
113
+ 4. Explicar las dos reglas que hacen que esto funcione: la cascada de lectura (`hot.md` → búsqueda → hub → nota) y que **el vault no se lee para preguntas generales de programación**. Sin la segunda, cada consulta paga el costo del vault sin recibir nada.
114
+
115
+ Verdict: proyecto READY cuando su `CLAUDE.md` declara el path, la cascada y el límite de escritura.
116
+
117
+ ## El puente al código (`repos:`)
118
+
119
+ Una nota de hub o de proyecto que tenga código declara `repos:` en su frontmatter, y `codebases.md` traduce cada repo a su path local, cómo se corre y si tiene un grafo consultable. Es la dirección inversa de `/second-brain link`: ese modo hace que un repo lea el vault, esto hace que el vault sepa dónde está el repo.
120
+
121
+ La regla que lo sostiene es **el vault apunta, no copia**: la arquitectura vive en el repo y se desactualiza el día que alguien mergea. Y si el repo tiene un grafo de código, consultarlo es la primera parada antes de mandar subagentes a explorar: un relevamiento cuesta del orden de 100k tokens, una consulta al grafo uno o dos mil.
122
+
123
+ ## El caché caliente (`hot.md`)
124
+
125
+ Un archivo corto en la raíz del vault con dónde estabas: en qué trabajás, qué notas cambiaron, qué hilos siguen abiertos, qué tareas viven. Lo reescribe `/review-dump` al cerrar el día y lo lee `/second-brain status`, además de cualquier otro proyecto conectado con `link`.
126
+
127
+ Idea tomada de `AgriciDaniel/claude-obsidian`, y es la que resuelve el agujero del ciclo: los tres reviews devuelven algo **cuando vos los pedís**. El caché devuelve algo al abrir la sesión, sin pedirlo.
128
+
129
+ Cuatro reglas, duras porque es lo único del vault que se reescribe sin preguntar:
130
+
131
+ - **Techo de 40 líneas.** Si no entra, hay que resumir más, no agrandar el techo.
132
+ - **Nada de secretos ni transcripciones crudas**, aunque aparezcan en un dump.
133
+ - **Ninguna afirmación sin su link.** El caché no crea conocimiento, apunta al que existe.
134
+ - **Se reescribe completo.** Un caché al que se le agrega al final es un log, y un log nadie lo lee.
135
+
136
+ Es descartable por diseño: si contradice una nota, la nota gana, y borrarlo no pierde nada porque se regenera.
137
+
138
+ ## Sync: dos reglas que evitan el 90% de los problemas
139
+
140
+ Si el vault se sincroniza (Drive, iCloud, Dropbox, Obsidian Sync, git), dos cosas rompen de forma reproducible:
141
+
142
+ 1. **`.obsidian/` no se sincroniza.** Es config por máquina (plugins, tema, layout) y es la fuente número uno de conflictos. El patrón que lo resuelve es tener la raíz del vault local y meter el contenido compartido adentro por symlink:
143
+
144
+ ```
145
+ ~/ObsidianVault/ raiz local, nunca se sincroniza
146
+ ├── .obsidian/ TU config, queda local
147
+ └── contenido/ symlink a la carpeta sincronizada
148
+ ```
149
+
150
+ Obsidian sigue el symlink y lee las notas; la config nunca sale de tu máquina. Si el vault es solo tuyo y usás git, la alternativa es `.gitignore` con `.obsidian/`, `.vault-index.json` y `.trash/`.
151
+
152
+ 2. **Un solo transporte.** Nunca dos mecanismos de sync sobre la misma carpeta (Drive + Obsidian Sync, o iCloud + git con auto-commit): producen reversiones aleatorias que después nadie puede explicar.
153
+
154
+ Y si el vault se comparte con otras personas: **un escritor por nota**. Ningún sync mergea markdown; el segundo que guarda genera una copia en conflicto. Este profile asume vault personal, y ese es su límite honesto: para equipo hace falta declarar dueño por nota y aceptar que la co-edición no existe.
155
+
156
+ ## Hook de validación (opcional)
157
+
158
+ El profile trae un `PostToolUse` que revisa cada nota escrita en el vault: frontmatter presente, `created` y `type` declarados, y al menos un `[[wikilink]]` salvo en los dumps. Avisa por stderr y **nunca bloquea la escritura**.
159
+
160
+ Sirve para lo que los skills no cubren: las notas que escribís a mano o desde otra sesión. Para activarlo, agregar a `.claude/settings.json` **del vault** el contenido de `.claude/skills/second-brain/hooks/hooks.json`:
161
+
162
+ ```json
163
+ "PostToolUse": [
164
+ {
165
+ "matcher": "Write|Edit",
166
+ "hooks": [
167
+ { "type": "command", "command": "bash .claude/skills/second-brain/hooks/validate-note.sh", "timeout": 5 }
168
+ ]
169
+ }
170
+ ]
171
+ ```
172
+
173
+ Es opt-in a propósito y va en el settings del vault, no en el del repo: un hook que corre en cada `Write` de cualquier proyecto es peso que nadie pidió. Ofrecelo en el `setup`, explicá que es solo un warning, y respetá el no.
174
+
175
+ ## Routing
176
+
177
+ | Situación | Skill |
178
+ |---|---|
179
+ | No hay vault | `/second-brain setup` |
180
+ | Vault existente sin `CLAUDE.md` | `/second-brain adopt` |
181
+ | Capturar algo ahora, sin pensar dónde va | `/brain-dump` |
182
+ | Procesar el dump del día y crear el daily | `/review-dump` |
183
+ | Cerrar la semana | `/review-weekly` |
184
+ | Cerrar el mes | `/review-monthly` |
185
+ | Una idea del dump merece nota propia | `/zettel` |
186
+ | Una entidad se repite en varios dumps | `/hub-note` |
187
+ | Guardar un artículo o página web | `/vault-clip` |
188
+ | Encontrar algo que ya escribiste | `/vault-recall` |
189
+ | Usar el vault desde otro proyecto | `/second-brain link` |
190
+ | Saber qué tan sano está el vault | `/vault-audit` |
191
+ | Aplicar los arreglos que propuso el audit | `/vault-tidy` |
192
+ | Dudas de sintaxis Obsidian, Bases o Canvas | `/obsidian-markdown`, `/obsidian-bases`, `/obsidian-canvas` |
193
+
194
+ ## Ciclo estándar
195
+
196
+ Durante el día: `/brain-dump` cuantas veces haga falta (o escribir directo en `_inbox/YYYY-MM-DD.md`).
197
+ A la noche: `/review-dump` clasifica, actualiza hubs y crea el daily.
198
+ Fin de semana: `/review-weekly`. Fin de mes: `/review-monthly`.
199
+ Cada tanto: `/vault-audit` y, si hace falta, `/vault-tidy`.
200
+
201
+ ## Reglas
202
+
203
+ - Nunca reorganizar carpetas ni renombrar notas sin approval: rompe `[[wikilinks]]` en silencio.
204
+ - La captura tiene que quedar sin fricción. Si el usuario tiene que decidir dónde va algo mientras lo escribe, el sistema ya falló.
205
+ - No apilar frameworks. PARA + Zettelkasten + hub files es el techo; agregar GTD o CODE encima es la causa número uno de que estos sistemas se abandonen.
206
+ - Un plugin de más es deuda: no recomendar ninguno que el vault no necesite para lo que el usuario efectivamente hace.
207
+ - Máximo accionable: el usuario siempre termina sabiendo qué skill correr next.
208
+
209
+ ## Handoff
210
+
211
+ Pedí approval antes de escribir o sobrescribir archivos del vault. Cuando el vault queda READY, el siguiente paso es `/brain-dump` para la primera captura, y `/review-dump` a la noche para cerrar el ciclo completo por primera vez.
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "PostToolUse": [
4
+ {
5
+ "matcher": "Write|Edit",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "bash .claude/skills/second-brain/hooks/validate-note.sh",
10
+ "timeout": 5
11
+ }
12
+ ]
13
+ }
14
+ ]
15
+ }
16
+ }