CommunityProgramación y desarrollogithub.com

qbarev/para-plugin

Configura una carpeta como un vault PARA gestionado por este plugin, o actualiza un vault ya configurado: detecta qué es la carpeta, hace las preguntas de configuración una por una, muestra un plan, lo aplica con un «sí» e informa. Al ejecutarlo de nuevo, completa lo que falta y migra esquemas antiguos.

¿Qué es para-plugin?

Este skill inicializa y mantiene un vault PARA (Proyectos, Áreas, Recursos, Archivo) dentro de un repositorio, actuando como la única habilidad que escribe la configuración del vault. Escanea el directorio de trabajo para determinar el escenario actual (configuración desde cero, migración de un esquema antiguo, o reorganización de notas existentes), luego guía al usuario a través de las preguntas de instalación paso a paso, crea un plan detallado de todos los cambios y solo los aplica tras la aprobación explícita. Es idempotente: una segunda ejecución completa lo que falta sin sobrescribir nada. Soporta Obsidian, backends de tareas como Todoist, archivos locales o cualquier app conectada vía MCP, y gestión de idiomas con plantillas localizadas. El skill está diseñado para plataformas como Claude Code, Cursor y Codex que siguen el protocolo de skills PARA, manejando también migraciones desde instalaciones antiguas del plugin y moviendo notas según reglas configurables.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qbarev/para-plugin/tree/HEAD/skills/init

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Init

Convierte la carpeta en la que se inició la sesión en un vault PARA conectado a este plugin, y lo mantiene así: una segunda ejecución completa lo que falta y migra un esquema anterior. Es la única habilidad que escribe la configuración del vault, y la única que se ejecuta sin ella.

Lo que escribe

Todo lo siguiente y nada más. REPO_ROOT, PARA_DIR, PARA_ROOT según los define paths.md.

QuéDóndeCómo
las carpetas PARAPARA_ROOT/ + Projects, Areas, Resources, Archive, Inbox, Templatesse crean si faltan
las plantillas de notasPARA_ROOT/Templates/se siembran desde el plugin, solo si faltan («Templates»)
el diario de IDsPARA_ROOT/Archive/.removed-idssolo su encabezado, solo si falta (project-id.md «El diario»)
configuración del vaultREPO_ROOT/.claude/para/vault.md, areas.md; adapter.md solo cuando TASKS es mcpdesde config.example/; nunca se sobrescribe
el bloque del pluginREPO_ROOT/CLAUDE.mdsolo entre los marcadores («CLAUDE.md»)
los permisos de las habilidadesREPO_ROOT/.claude/settings.jsonse fusiona, nunca se reemplaza («Settings»)
configuración de ObsidianREPO_ROOT/.obsidian/app.json, templates.jsonse fusiona («Obsidian»)
las notas y carpetas del usuario (solo B)desde donde están hasta las carpetas PARAse mueven, nunca se editan — solo los movimientos que enumera el plan aprobado («Escenario B»)
resúmenes de proyectos (solo B)PARA_ROOT/Projects/PROJ-xxxx <título>/nuevos, para una carpeta que el usuario llamó proyecto («Escenario B»)
la clave de emparejamiento en resúmenes (solo C)PARA_ROOT/Projects/, PARA_ROOT/Archive/solo se renombra un campo de metadatos, nada más (scenario-c.md)
el archivo de planificación del vault (solo C)REPO_ROOT/.claude/local/planning.mdnuevo, extraído de las herramientas antiguas (scenario-c.md)
las herramientas antiguas integradas (solo C)REPO_ROOT/.claude/, CLAUDE.md, la documentación de la plantilla anteriora la Papelera de macOS, Nivel 2 (scenario-c.md)

Capa base

Leer antes de actuar, cada uno como ../../para/<archivo>.md relativo al directorio base de esta habilidad (y ../../config.example/, ../../lang/, ../../templates/ de la misma manera):

  • ../../para/paths.md — siempre: las dos raíces, «Idioma», el adaptador para TASKS. Todo lo que init escribe debe coincidir con él.
  • ../../para/tasks.md — las operaciones, «Emparejamiento», «Backend faltante»
  • ../../para/adapters/mcp-generic.md — cuando TASKS es mcp; el adaptador para cualquier otro valor lo nombra paths.md
  • ../../para/note-format.md — el esquema de metadatos que deben coincidir las plantillas
  • ../../para/migrations.md — el SCHEMA actual del plugin y cómo se ejecuta una migración
  • ../../para/claude-md-block.md — el bloque para CLAUDE.md
  • ../../para/confirm.md — los niveles; el plan a continuación es cómo init los cumple
  • ../../para/project-id.md — «El diario»: el encabezado del diario de IDs (Paso 5.1)
  • ../../config.example/vault.md, areas.md, adapter.md — la forma de la configuración
  • solo escenario B: ../../para/move.md (cómo un movimiento mantiene enlaces), project-id.md (emisión de un ID), ../../para/thresholds.md (el umbral de obsolescencia de áreas y «El límite de mtime»), paths.md «IGNORAR»
  • ../../lang/<LANG>.md una vez que se conoce LANG: las cadenas init.*
  • solo escenario C, y los restos de C en una re-ejecución: scenario-c.md en el directorio base de esta habilidad — todo sobre el diseño antiguo; también ../../para/move.md (la Papelera)

SKILL_DIR a continuación es el directorio base de esta habilidad, según lo anuncia el arnés.

Reglas para toda la ejecución

  • REPO_ROOT es el directorio de trabajo de la sesión, como ruta absoluta (pwd). Este es el único lugar donde el plugin toma una raíz del directorio de trabajo: init es lo que lo escribe para todas las demás habilidades. El plan dice qué carpeta es, para que una sesión iniciada en el lugar equivocado se detecte antes de escribir nada.
  • No se escribe nada antes del «sí» del plan. Inspeccionar, preguntar y sondear el backend de tareas son solo lectura.
  • vault.md se escribe al final. Es lo que marca un vault como configurado; una ejecución interrumpida no deja vault.md y la siguiente ejecución comienza de nuevo, encontrando el trabajo ya realizado.
  • Cada paso es idempotente: crear si falta, fusionar si existe, nunca sobrescribir. Ejecutar init dos veces seguidas no cambia nada la segunda vez.
  • Citar cada ruta (paths.md «Reglas»). REPO_ROOT puede contener espacios.
  • Idioma. Hasta que se elija LANG, hablar el idioma en el que escribió el usuario (inglés cuando no hay nada por lo que guiarse — un /para:init simple). A partir de entonces, todo está en LANG según paths.md «Idioma», incluidas las preguntas restantes; los encabezados del plan y del informe son las cadenas init.*.

Respuestas proporcionadas de antemano

$ARGUMENTS puede contener respuestas: el idioma, PARA_DIR («el predeterminado» significa el propuesto), el backend de tareas, el modelo de Áreas, en el escenario B las respuestas de ordenación (por carpeta o nota raíz, y para los nombres duplicados), la respuesta de instantánea y una aprobación del plan. Tomar cada respuesta dada y no preguntarla de nuevo; preguntar solo lo que falta. Una respuesta que no es una opción válida se pregunta de nuevo, explicando por qué.

Una aprobación dada de antemano significa: mostrar el plan, luego aplicarlo sin esperar — pero solo mientras cada línea del plan agregue algo (una carpeta, un archivo, una clave, una entrada). Una línea que cambia o reemplaza algo que ya existe (un valor de Obsidian diferente, un bloque CLAUDE.md diferente, una plantilla en una migración, REPO_ROOT en un vault.md existente) es Nivel 2 (confirm.md): el plan se muestra y init espera un «sí» incluso entonces.

Los movimientos del escenario B son de dos tipos, y esta es la única declaración de cómo una aprobación previa los cubre. Un movimiento que el usuario decidió en sus propias respuestas (B3, o las respuestas de ordenación en $ARGUMENTS) cambia dónde está una nota, nunca lo que dice, y confirm.md coloca el movimiento en el Nivel 1: el «sí» del plan, dado entonces o de antemano, lo cubre. Un movimiento decidido solo por las reglas (B2: a Archive/ o Resources/) es el propio juicio de init sobre las notas del usuario: necesita un «sí» en vivo al plan que lo muestra, incluso cuando se dio una aprobación de antemano. De cualquier manera, la instantánea se ofrece antes de los movimientos (Paso 4). Una pregunta de ordenación respondida de antemano no se hace; una que queda sin responder se hace, y no se aplica nada antes de su respuesta, aprobación o no.


Paso 1 — Inspeccionar

Solo lectura. Averiguar qué es la carpeta y nombrar el escenario.

REPO_ROOT=$(pwd)
ls -A "$REPO_ROOT"
ls "$REPO_ROOT/.claude" "$REPO_ROOT/.claude/para" "$REPO_ROOT/.claude/skills" 2>/dev/null
# el diseño antiguo integrado (escenario C): su carpeta de configuración o su capa base
ls -d "$REPO_ROOT/.claude/para/local" "$REPO_ROOT/.claude/para/paths.md" 2>/dev/null   # diseño-antiguo
# carpetas de habilidades nombradas como las habilidades antiguas integradas: se informan, nunca C por sí solas
for s in inbox projects areas resources archive remove vault-lint; do
  [ -f "$REPO_ROOT/.claude/skills/$s/SKILL.md" ] && echo "habilidad antigua: $s"; done
# notas: cada .md que no esté debajo de una entrada con punto de REPO_ROOT, excepto los archivos propios del repositorio
# y las plantillas (las entradas con punto se podan en relación con REPO_ROOT, por lo que un vault que en sí mismo
# vive debajo de un directorio con punto aún se ve)
find "$REPO_ROOT" -mindepth 1 -name '.*' -prune -o -name "*.md" -not -path "*/Templates/*" \
  ! -path "$REPO_ROOT/CLAUDE.md" ! -path "$REPO_ROOT/README.md" ! -path "$REPO_ROOT/CHANGELOG.md" -print | head -50
# un vault por encima de esta carpeta: init se inició en una subcarpeta
d=$(dirname "$REPO_ROOT")
while [ "$d" != "/" ] && [ "$d" != "$HOME" ]; do
  { [ -e "$d/.claude/para/vault.md" ] || [ -d "$d/.obsidian" ]; } && echo "vault por encima: $d"
  d=$(dirname "$d")
done

Detenerse antes de cualquier otra cosa cuando:

  • REPO_ROOT es $HOME o / — no es un vault; decirlo.
  • se encontró un vault por encima — decir «ejecuta /para:init desde <esa carpeta>» y detenerse; nunca configurar un vault dentro de otro.

Luego decidir, en este orden, y decir qué se encontró y qué caso es:

  1. Configurar — .claude/para/vault.md existe → «Re-ejecución y migración» a continuación.
  2. Escenario C — las herramientas antiguas integradas, reconocidas por su antigua capa base o configuración solamente (la línea diseño-antiguo anterior): su carpeta de configuración local/ o su archivo de capa base paths.md dentro de .claude/para/. → «Escenario C». Una carpeta de habilidad nombrada como una de las habilidades antiguas (las líneas habilidad antigua:) sin ninguna de ellas no es C: continuar con B o A según las reglas a continuación. Decir qué carpeta se encontró y que init la deja en paz; el «no hecho» del plan la nombra de nuevo. Un .claude/para/ que solo contiene los archivos de configuración de este plugin (areas.md, adapter.md) y ningún vault.md no es C: es una primera ejecución de init que fue interrumpida o rechazada antes de vault.md. Continuar con B o A a continuación como si no estuviera allí, excepto que esos archivos son la configuración del vault — nunca sobrescritos — y una pregunta que ya responden (pregunta 4 para areas.md) no se pregunta de nuevo. La ejecución completa el resto.
  3. Escenario B — se encontraron notas (el find anterior imprimió algo). → «Escenario B».
  4. Escenario A — de lo contrario: una carpeta vacía, o una que contiene solo archivos que no son notas (un .obsidian/ de un nuevo vault de Obsidian, un CLAUDE.md). → Paso 2.

Paso 2 — Preguntas

Una a la vez, en este orden, saltándose todas las respondidas de antemano. Cada pregunta muestra sus opciones y, cuando hay una, el valor predeterminado.

  1. Idioma (LANG). Las opciones son los idiomas que incluye el plugin: un código con tanto lang/<código>.md como templates/<código>/ (paths.md «Idioma»):

    for f in "$SKILL_DIR"/../../lang/*.md; do l=$(basename "$f" .md)
      [ -d "$SKILL_DIR/../../templates/$l" ] && echo "$l"; done
    
  2. Carpeta PARA (PARA_DIR). Valor predeterminado según el escenario: A — PARA, una subcarpeta, para que las herramientas y las notas estén separadas; B — ., para que las carpetas PARA estén junto a las carpetas del usuario, excepto según lo que dice «Escenario B». . coloca las carpetas PARA directamente en REPO_ROOT. Válido: . o un nombre de carpeta — sin /, que no comience con ., que no sea uno de los nombres de las carpetas PARA.

  3. Backend de tareas (TASKS). Las opciones son todoist, files o mcp; la primera es recomendada. Decir en una línea qué significa cada una: la bandeja de entrada y los proyectos de una app; notas de tareas en el vault, sin app; cualquier otra app de tareas conectada a través de MCP. Luego sondear — «Sondeo del backend» a continuación. Un valor cuyo sondeo falló nunca se registra.

  4. Modelo de Áreas (areas.md). Una pregunta: ¿las Áreas están agrupadas — none, o los nombres de los grupos (por ejemplo Trabajo, Hogar)? Todo lo demás se deriva y se muestra en el plan, donde el usuario puede cambiarlo:

    ClaveAgrupadonone
    GROUPINGel nombre del campo, sphere a menos que el usuario haya nombrado uno (la clave de las plantillas semilla)none
    GROUPSlos nombres dadosvacío
    PLACEMENTAreas/<GROUP>/<título>.mdAreas/<título>.md
    REVIEW_GROUPINGun bloque por grupo, los grupos sin nada que informar se omitenuna lista plana
    PLACEMENT_CHECKel campo GROUPING de una nota debe nombrar la carpeta de nivel superior bajo la que se encuentranone
    AREA_TASK_PROJECTSlos nombres de GROUPSun nombre: la cadena areas.review.heading

Sondeo del backend

El sondeo es inbox.list, ejecutado según el adaptador para el valor elegido (paths.md). Es solo lectura; una bandeja de entrada vacía es un éxito. Imprimir solo el recuento, nunca las capturas.

  • files — nada que sondear: el adaptador es el disco, y «Backend faltante» no puede ocurrir (tasks.md).
  • mcp — ejecutar los pasos 1–6 de adapters/mcp-generic.md ahora. El paso 1 que no encuentra herramientas es un sondeo fallido. El paso 6 es el sondeo cuando el usuario acepta y la app tiene una bandeja de entrada; de lo contrario, el plan dice que el mapeo no está verificado. Los pasos 7–8 pertenecen al plan y al «Paso 5» a continuación.
  • Cualquier otro valor — ejecutar inbox.list según su adaptador. Si las herramientas del adaptador no están en esta sesión, o la llamada falla: decirlo en una línea (tasks.md «Backend faltante»), no registrar el valor, y ofrecer files en su lugar — o conectar la app y ejecutar /para:init de nuevo. Nunca escribir un valor de TASKS cuyo sondeo no tuvo éxito, y nunca registrar un valor mientras se promete cambiar más tarde.

Paso 3 — El plan

Una lista de todo lo que se creará, fusionará o cambiará, encabezada por la cadena init.plan.heading. Es una propuesta que el usuario edita, no un anuncio: una edición genera un nuevo plan, que se muestra de nuevo. Termina con la cadena init.plan.approve, y no se aplica nada antes de un «sí» (o la aprobación dada de antemano, dentro del límite que establece «Respuestas proporcionadas de antemano»).

El plan nombra, en este orden:

  1. REPO_ROOT (esta carpeta) y PARA_ROOT.
  2. Las carpetas a crear, y el diario de IDs cuando falte.
  3. Las plantillas a copiar, cada una con los cambios que «Templates» le hace. En el escenario B, aquí: los movimientos, los proyectos, IGNORE, los duplicados retenidos y los enlaces que se romperán («Escenario B», «La parte B del plan»).
  4. La configuración: cada clave de vault.md y areas.md con su valor; para mcp, la tabla del adaptador (mcp-generic.md paso 7 — el «sí» del plan es el «sí» de esa tabla).
  5. CLAUDE.md, .claude/settings.json, .obsidian/app.json, .obsidian/templates.json: lo que se agrega a cada uno. Cada valor existente que cambiaría es una línea propia, que muestra el valor antiguo y el nuevo.
  6. El resultado del sondeo: el backend respondió (con el recuento de la bandeja de entrada), o files.
  7. Lo que no se hará, y por qué (una plantilla ya presente, un valor conservado).

Paso 4 — Instantánea (solo B y C)

Antes de aplicar un plan que toca un vault existente, ofrecer una copia zip a su lado — siempre se pregunta, el rechazo se acepta, una respuesta dada de antemano se toma. Se pregunta en el mismo mensaje que la aprobación del plan (la cadena init.snapshot), para que el usuario responda una vez:

zip_path="$(dirname "$REPO_ROOT")/$(basename "$REPO_ROOT")-backup-$(date +%Y-%m-%d).zip"
ditto -c -k --keepParent "$REPO_ROOT" "$zip_path"

El escenario A no tiene nada que guardar y se salta este paso.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

qbarev/para-plugin

Work with Archive in the Obsidian PARA vault — put a finished or abandoned project (folder and its project in the task app, such as Todoist) or a note into the archive, list what is already there, or restore something back into an active folder. Use when the user says "archive this", "move to archive", "close the project", "what is in the archive", "show the archive", "restore from the archive", "заархивируй", "перенеси в архив", "закрой проект", "что в архиве", "покажи архив", "верни из архива", "восстанови проект".

qbarev/para-plugin

Work with Areas in the Obsidian PARA vault — create an area of ongoing responsibility, or review which areas have gone quiet and what has drifted in them. Use when the user says "create an area", "new area", "review the areas", "which areas have gone quiet", "заведи область", "новая сфера", "добавь область", "обзор областей", "что по областям", "какие сферы провисают", "ревью сфер".

qbarev/para-plugin

Work with the inbox of the PARA vault, which lives in the task app's inbox — capture a raw thought into it, list what is sitting there unprocessed, or process captures one by one into their proper PARA folder. Use when the user wants to capture a note, mentions their task app's inbox (Todoist «Входящие», for example), or says "capture this", "add to the inbox", "what is in the inbox", "process the inbox", "запиши", "закинь в инбокс", "что в инбоксе", "покажи инбокс", "разбери инбокс", "разгреби инбокс".

qbarev/para-plugin

Work with Projects in the Obsidian PARA vault and their pairs in the task app — list the active projects, create a project (folder plus a project in the task app), summarize where a project stands, or add a task to a project in the task app (Todoist, for example). Use when the user says "list projects", "show projects", "what am I working on", "create a project", "new project", "project overview", "project status", "add a task", "какие проекты", "список проектов", "покажи проекты", "что у меня в работе", "заведи проект", "новый проект", "саммари по проекту", "обзор проекта", "что по проекту", "статус проекта", "где я по проекту", "добавь задачу", "заведи задачу".

Skills relacionados