claude-code-arcane 2.0.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.
- package/CHANGELOG.md +17 -0
- package/README.md +4 -3
- package/docs/SKILLS-CATALOG.md +25 -2
- package/docs/USER-GUIDE.md +2 -2
- package/package.json +1 -1
- package/profiles/second-brain.yaml +37 -0
- package/rules/vault-conventions.md +144 -0
- package/skills/brain-dump/SKILL.md +53 -0
- package/skills/hub-note/SKILL.md +68 -0
- package/skills/obsidian-bases/SKILL.md +85 -0
- package/skills/obsidian-bases/references/bases-syntax.md +123 -0
- package/skills/obsidian-canvas/SKILL.md +91 -0
- package/skills/obsidian-markdown/SKILL.md +110 -0
- package/skills/pdf-generator/scripts/fill_inspect.py +2 -0
- package/skills/pdf-generator/scripts/render_body.py +2 -0
- package/skills/review-dump/SKILL.md +108 -0
- package/skills/review-monthly/SKILL.md +56 -0
- package/skills/review-weekly/SKILL.md +91 -0
- package/skills/second-brain/SKILL.md +211 -0
- package/skills/second-brain/hooks/hooks.json +16 -0
- package/skills/second-brain/hooks/validate-note.sh +85 -0
- package/skills/second-brain/references/cross-project.md +57 -0
- package/skills/second-brain/references/templates/Atomic.md +22 -0
- package/skills/second-brain/references/templates/Daily.md +25 -0
- package/skills/second-brain/references/templates/Dashboard.base +70 -0
- package/skills/second-brain/references/templates/Dump.md +11 -0
- package/skills/second-brain/references/templates/Hub.md +22 -0
- package/skills/second-brain/references/templates/Monthly.md +29 -0
- package/skills/second-brain/references/templates/Weekly.md +29 -0
- package/skills/second-brain/references/templates/codebases.md +37 -0
- package/skills/second-brain/references/templates/hot.md +37 -0
- package/skills/second-brain/references/templates/vault-CLAUDE.md +127 -0
- package/skills/vault-audit/SKILL.md +72 -0
- package/skills/vault-audit/scripts/vault_audit.py +539 -0
- package/skills/vault-clip/SKILL.md +73 -0
- package/skills/vault-recall/SKILL.md +82 -0
- package/skills/vault-recall/scripts/vault_index.py +626 -0
- package/skills/vault-tidy/SKILL.md +76 -0
- package/skills/xlsx-generator/scripts/formula_check.py +2 -0
- package/skills/xlsx-generator/scripts/libreoffice_recalc.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_add_column.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_insert_row.py +2 -0
- package/skills/xlsx-generator/scripts/xlsx_reader.py +2 -0
- package/skills/zettel/SKILL.md +66 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obsidian-canvas
|
|
3
|
+
description: "Crea y edita archivos .canvas (JSON Canvas): nodos de nota, texto, archivo y link, grupos y edges con direccion y color. Triggers: obsidian canvas, json canvas, mapa visual, diagrama de notas, archivo .canvas, pizarra obsidian."
|
|
4
|
+
argument-hint: "[create <descripcion> | explain <archivo.canvas> | edit <archivo.canvas>]"
|
|
5
|
+
category: "pkm"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Write, Edit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Obsidian Canvas - JSON Canvas
|
|
11
|
+
|
|
12
|
+
Un `.canvas` es JSON plano con dos arrays: `nodes` y `edges`. El formato es JSON Canvas, un spec abierto, así que el archivo se puede generar y leer sin Obsidian. Adaptado de `kepano/obsidian-skills` al formato de este repo.
|
|
13
|
+
|
|
14
|
+
Modo: `$ARGUMENTS`
|
|
15
|
+
|
|
16
|
+
## Modos
|
|
17
|
+
|
|
18
|
+
- **`create`**: generar un canvas nuevo desde una descripción o desde un conjunto de notas del vault.
|
|
19
|
+
- **`explain`**: leer un canvas y describir su estructura en texto. Read-only.
|
|
20
|
+
- **`edit`**: agregar o reacomodar nodos de un canvas existente. Pedí approval antes de escribir, y avisá que un canvas abierto en Obsidian sobrescribe el archivo al guardar: hay que cerrarlo antes.
|
|
21
|
+
|
|
22
|
+
## Estructura
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"nodes": [
|
|
27
|
+
{
|
|
28
|
+
"id": "n1",
|
|
29
|
+
"type": "file",
|
|
30
|
+
"file": "03_Resources/Indices parciales.md",
|
|
31
|
+
"x": 0, "y": 0, "width": 400, "height": 300
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "n2",
|
|
35
|
+
"type": "text",
|
|
36
|
+
"text": "Hipotesis: el costo esta en las lecturas",
|
|
37
|
+
"x": 480, "y": 0, "width": 300, "height": 120,
|
|
38
|
+
"color": "4"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "g1",
|
|
42
|
+
"type": "group",
|
|
43
|
+
"label": "Investigacion",
|
|
44
|
+
"x": -40, "y": -60, "width": 900, "height": 440
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"edges": [
|
|
48
|
+
{
|
|
49
|
+
"id": "e1",
|
|
50
|
+
"fromNode": "n1", "fromSide": "right",
|
|
51
|
+
"toNode": "n2", "toSide": "left",
|
|
52
|
+
"label": "sugiere"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Nodos.** Campos obligatorios: `id`, `type`, `x`, `y`, `width`, `height`. Tipos:
|
|
59
|
+
|
|
60
|
+
| `type` | Campo propio |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `text` | `text` (markdown) |
|
|
63
|
+
| `file` | `file` (ruta en el vault), `subpath` opcional para un heading o bloque |
|
|
64
|
+
| `link` | `url` |
|
|
65
|
+
| `group` | `label`, `background`, `backgroundStyle` opcionales |
|
|
66
|
+
|
|
67
|
+
**Edges.** Obligatorio `id`, `fromNode`, `toNode`. Opcionales: `fromSide` y `toSide` (`top`, `right`, `bottom`, `left`), `fromEnd`/`toEnd` (`none`, `arrow`), `label`, `color`.
|
|
68
|
+
|
|
69
|
+
**Color.** Un preset `"1"` a `"6"` (rojo, naranja, amarillo, verde, cyan, violeta) o un hex `"#ff0000"`.
|
|
70
|
+
|
|
71
|
+
**Coordenadas.** El eje Y crece hacia abajo. Un grupo no contiene nodos por referencia: los contiene **geométricamente**, por solaparse con su rectángulo. Si movés un nodo fuera del rectángulo, sale del grupo.
|
|
72
|
+
|
|
73
|
+
## Reglas para generar uno usable
|
|
74
|
+
|
|
75
|
+
- **Los `id` tienen que ser únicos.** Si se repiten, Obsidian se queda con uno solo y el resto desaparece sin error.
|
|
76
|
+
- **Layout en grilla, no apilado en el origen.** Separar los nodos al menos 60px: un canvas con todo en `x: 0, y: 0` se abre como una pila ilegible y reacomodarlo a mano cuesta más que generarlo de nuevo.
|
|
77
|
+
- **Verificar que cada `file` exista** antes de escribir el canvas: un nodo que apunta a una nota inexistente renderiza vacío.
|
|
78
|
+
- Un canvas es para pensar visualmente, no para almacenar conocimiento. Lo que se aprende en un canvas se escribe después como nota atómica.
|
|
79
|
+
|
|
80
|
+
Canvas READY cuando el JSON es válido, los ids son únicos, las rutas existen y el usuario confirmó que abre bien en Obsidian.
|
|
81
|
+
|
|
82
|
+
## Reglas
|
|
83
|
+
|
|
84
|
+
- No inventar campos que el spec no define: Obsidian los ignora y ensucia el archivo.
|
|
85
|
+
- No reescribir un canvas entero para agregar un nodo: `Edit` sobre el array.
|
|
86
|
+
- Pedí approval antes de escribir o sobrescribir un `.canvas`, y verificá que no esté abierto en Obsidian.
|
|
87
|
+
- Sin guiones largos en labels ni en nodos de texto.
|
|
88
|
+
|
|
89
|
+
## Handoff
|
|
90
|
+
|
|
91
|
+
Si lo que hacía falta era una vista tabular y no un mapa visual, el skill correcto es `/obsidian-bases`. Cuando el canvas dejó una conclusión, el siguiente paso es `/zettel` para escribirla como nota atómica: el canvas es el andamio, la nota es lo que queda.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: obsidian-markdown
|
|
3
|
+
description: "Sintaxis de Obsidian Flavored Markdown: wikilinks, embeds, callouts, block IDs, propiedades, tags, highlights, math y mermaid. Valida o corrige una nota. Triggers: sintaxis obsidian, wikilink, callout, embed, block id, obsidian markdown, esto renderiza bien en obsidian, frontmatter obsidian."
|
|
4
|
+
argument-hint: "[reference | check <archivo> | fix <archivo>]"
|
|
5
|
+
category: "pkm"
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Read, Glob, Grep, Write, Edit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Obsidian Markdown - Sintaxis nativa
|
|
11
|
+
|
|
12
|
+
Obsidian extiende CommonMark y GFM. Este skill cubre **solo las extensiones propias de Obsidian**: el markdown estándar (títulos, negrita, listas, tablas, código) se da por sabido. Adaptado de `kepano/obsidian-skills` al formato de este repo.
|
|
13
|
+
|
|
14
|
+
Modo y archivo: `$ARGUMENTS`
|
|
15
|
+
|
|
16
|
+
## Modos
|
|
17
|
+
|
|
18
|
+
- **`reference`** (default): responder la duda de sintaxis con la tabla de abajo, sin tocar archivos.
|
|
19
|
+
- **`check <archivo>`**: leer la nota y reportar qué no va a renderizar. Read-only.
|
|
20
|
+
- **`fix <archivo>`**: corregir lo que `check` encontró. Pedí approval antes de escribir, mostrando el diff propuesto.
|
|
21
|
+
|
|
22
|
+
## Links y embeds
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
[[Nota]] link interno
|
|
26
|
+
[[Nota|Texto visible]] alias
|
|
27
|
+
[[Nota#Titulo]] link a un heading
|
|
28
|
+
[[Nota#^block-id]] link a un bloque
|
|
29
|
+
[[#Titulo en esta nota]] link interno a la misma nota
|
|
30
|
+
|
|
31
|
+
![[Nota]] embed de la nota completa
|
|
32
|
+
![[Nota#Titulo]] embed de una seccion
|
|
33
|
+
![[imagen.png|300]] embed con ancho
|
|
34
|
+
![[doc.pdf#page=3]] embed de una pagina de PDF
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Un block ID se define agregando `^mi-id` al final del párrafo. En listas y citas va en una línea aparte después del bloque.
|
|
38
|
+
|
|
39
|
+
**`[[wikilinks]]` para lo interno, `[texto](url)` solo para URLs externas.** No es estilo: Obsidian actualiza los wikilinks cuando renombrás una nota dentro de la app, y no toca los markdown links.
|
|
40
|
+
|
|
41
|
+
## Callouts
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
> [!note]
|
|
45
|
+
> Callout basico.
|
|
46
|
+
|
|
47
|
+
> [!warning] Titulo propio
|
|
48
|
+
> Con titulo custom.
|
|
49
|
+
|
|
50
|
+
> [!faq]- Colapsado por default
|
|
51
|
+
> El `-` lo colapsa, el `+` lo abre.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Tipos: `note`, `tip`, `info`, `warning`, `danger`, `bug`, `example`, `quote`, `success`, `failure`, `question`, `abstract`, `todo`. Un tipo inventado renderiza como `note` sin avisar, y ese es el error de callout más común.
|
|
55
|
+
|
|
56
|
+
## Propiedades (frontmatter)
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
---
|
|
60
|
+
title: Mi nota
|
|
61
|
+
date: 2026-07-27
|
|
62
|
+
tags:
|
|
63
|
+
- proyecto
|
|
64
|
+
- activo
|
|
65
|
+
aliases:
|
|
66
|
+
- Nombre alternativo
|
|
67
|
+
cssclasses:
|
|
68
|
+
- custom
|
|
69
|
+
---
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`tags`, `aliases` y `cssclasses` son las tres propiedades que Obsidian entiende de forma nativa. El resto son campos propios y los consume Bases o Dataview.
|
|
73
|
+
|
|
74
|
+
## Resto de la sintaxis propia
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
#tag #anidado/tag tags inline (no pueden empezar con numero)
|
|
78
|
+
==resaltado== highlight
|
|
79
|
+
%%comentario%% invisible en lectura
|
|
80
|
+
$e^{i\pi}+1=0$ y $$...$$ math LaTeX inline y en bloque
|
|
81
|
+
texto[^1] / ^[nota inline] footnotes
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Los bloques ` ```mermaid ` renderizan diagramas nativamente.
|
|
85
|
+
|
|
86
|
+
## Qué revisa `check`
|
|
87
|
+
|
|
88
|
+
| Check | Qué busca | Verdict |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| Tipo de callout | `> [!tipo]` con un tipo que no existe | FAIL: renderiza como `note` |
|
|
91
|
+
| Links externos como wikilink | `[[https://...]]` | FAIL: no resuelve |
|
|
92
|
+
| Links internos como markdown | `[texto](Nota.md)` dentro del vault | CONCERNS: se rompe al renombrar |
|
|
93
|
+
| Frontmatter | Abre con `---` en la primera línea y cierra | FAIL si no cierra: Obsidian lo muestra como texto |
|
|
94
|
+
| `tags` con `#` en frontmatter | `tags: [#foo]` | CONCERNS: el `#` no va en frontmatter |
|
|
95
|
+
| Block IDs | Duplicados en la misma nota | FAIL: el link resuelve al primero |
|
|
96
|
+
| Embeds de imagen | Ancho no numérico (`![[img.png|grande]]`) | CONCERNS: se ignora |
|
|
97
|
+
| Espacios en `[[ Nota ]]` | Espacios internos al principio o final del target | CONCERNS: puede no resolver |
|
|
98
|
+
|
|
99
|
+
Nota COMPLIANT cuando ninguna de estas falla.
|
|
100
|
+
|
|
101
|
+
## Reglas
|
|
102
|
+
|
|
103
|
+
- No reformatear la nota entera cuando el pedido es arreglar un detalle: `Edit` sobre citas textuales, no `Write` del archivo completo.
|
|
104
|
+
- No convertir markdown links externos a wikilinks: los externos van como markdown link.
|
|
105
|
+
- No inventar tipos de callout ni propiedades que Obsidian no reconoce.
|
|
106
|
+
- Sin guiones largos en lo que agregues.
|
|
107
|
+
|
|
108
|
+
## Handoff
|
|
109
|
+
|
|
110
|
+
Si la duda era de vistas agregadas y no de sintaxis de nota, el skill correcto es `/obsidian-bases`; si era de un canvas, `/obsidian-canvas`. Cuando la nota queda COMPLIANT, seguí con el flujo que la produjo (`/zettel`, `/review-dump` o `/vault-clip`).
|
|
@@ -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`.
|