Community코딩 & 개발github.com

qbarev/para-plugin

폴더를 PARA 볼트로 설정하거나 기존 볼트를 최신 상태로 유지합니다. 폴더를 감지하고, 설정 질문을 하나씩 묻고, 계획을 보여주고, '예'를 받으면 적용하고, 보고합니다. 재실행 시 누락된 항목을 채우고 이전 볼트 스키마를 마이그레이션합니다.

para-plugin란 무엇인가요?

이 스킬은 Claude Code, Cursor, Codex와 같은 AI 에이전트가 작업 디렉토리를 PARA 방법론(Projects, Areas, Resources, Archive) 기반의 구조화된 볼트로 초기화하고 유지 관리할 수 있도록 설계되었습니다. 이 스킬은 폴더를 분석하여 시나리오(빈 폴더, 기존 노트, 이전 도구 포함, 이미 설정된 볼트)를 결정하고, 언어, PARA 폴더 위치, 작업 백엔드(예: Todoist, 파일, MCP), Areas 그룹화 모델에 대해 대화형 질문을 합니다. 그런 다음 생성, 이동, 병합할 모든 항목의 단일 계획을 제시하며, 각 변경 사항은 사용자의 명시적인 '예'가 있을 때까지 적용되지 않아 안전합니다. 이 스킬은 모든 단계에서 멱등성을 보장하여 여러 번 실행해도 최신 상태를 유지하며, 볼트 설정 구성을 중앙에서 관리합니다. 활용 사례로는 새 프로젝트 시작, 기존 PARA 설정 마이그레이션, 유지보수를 위한 볼트 재초기화 등이 있으며, 한국어, 영어 등 여러 언어를 지원합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qbarev/para-plugin/tree/HEAD/skills/init

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Init

세션이 시작된 폴더를 이 플러그인에 연결된 PARA 볼트로 전환하고, 그 상태를 유지합니다. 두 번째 실행 시 누락된 항목을 채우고 이전 스키마를 마이그레이션합니다. 볼트의 설정을 쓰는 유일한 스킬이며, 설정 없이 실행되는 유일한 스킬입니다.

쓰는 항목

아래 항목만을 쓰며, 그 외에는 아무것도 쓰지 않습니다. REPO_ROOT, PARA_DIR, PARA_ROOT는 paths.md에서 정의한 대로입니다.

항목위치방법
PARA 폴더PARA_ROOT/ + Projects, Areas, Resources, Archive, Inbox, Templates누락된 경우 생성
노트 템플릿PARA_ROOT/Templates/플러그인에서 시드하며, 누락된 경우에만 생성(«Templates»)
ID 저널PARA_ROOT/Archive/.removed-ids헤더만, 누락된 경우에만 생성(project-id.md «The journal»)
볼트 설정REPO_ROOT/.claude/para/vault.md, areas.md; TASKS가 mcp일 때만 adapter.mdconfig.example/에서 가져옴; 절대 덮어쓰지 않음
플러그인의 블록REPO_ROOT/CLAUDE.md마커 사이에만 추가(«CLAUDE.md»)
스킬 권한REPO_ROOT/.claude/settings.json병합되며, 절대 교체되지 않음(«Settings»)
Obsidian 설정REPO_ROOT/.obsidian/app.json, templates.json병합됨(«Obsidian»)
사용자의 노트 및 폴더 (B만)현재 위치에서 PARA 폴더로이동되며, 편집되지 않음 — 승인된 계획에 나열된 이동만 수행(«시나리오 B»)
프로젝트 개요 (B만)PARA_ROOT/Projects/PROJ-xxxx <title>/새로 생성, 사용자가 프로젝트라고 부른 폴더에 대해(«시나리오 B»)
개요의 페어 키 (C만)PARA_ROOT/Projects/, PARA_ROOT/Archive/하나의 프론트매터 키 이름만 변경, 그 외에는 아무것도 변경하지 않음(scenario-c.md)
볼트 계획 파일 (C만)REPO_ROOT/.claude/local/planning.md새로 생성, 이전 도구에서 가져옴(scenario-c.md)
이전 포함 도구 (C만)REPO_ROOT/.claude/, CLAUDE.md, 이전 템플릿 문서macOS 휴지통(Tier 2)으로 이동(scenario-c.md)

기본 레이어

실행 전에 다음 파일을 읽습니다. 각 파일은 이 스킬의 기본 디렉토리 기준 ../../para/<file>.md에 있습니다(그리고 ../../config.example/, ../../lang/, ../../templates/도 동일한 방식):

  • ../../para/paths.md — 항상: 두 개의 루트, «Language», TASKS에 대한 어댑터. init이 쓰는 모든 것은 이와 일치해야 합니다.
  • ../../para/tasks.md — 작업, «Pairing», «Backend missing»
  • ../../para/adapters/mcp-generic.md — TASKS가 mcp일 때; 다른 값에 대한 어댑터는 paths.md에서 이름을 지정합니다.
  • ../../para/note-format.md — 템플릿이 일치해야 하는 프론트매터 스키마
  • ../../para/migrations.md — 플러그인의 현재 SCHEMA 및 마이그레이션 실행 방법
  • ../../para/claude-md-block.md — CLAUDE.md의 블록
  • ../../para/confirm.md — 티어; 아래 계획은 init이 이를 충족하는 방법입니다.
  • ../../para/project-id.md — «The journal»: ID 저널의 헤더(5.1단계)
  • ../../config.example/vault.md, areas.md, adapter.md — 설정의 형태
  • 시나리오 B만: ../../para/move.md (이동이 링크를 유지하는 방법), project-id.md (ID 발행), ../../para/thresholds.md (영역 부실 임계값 및 «The limit of mtime»), paths.md «IGNORE»
  • ../../lang/<LANG>.md — LANG이 알려지면 init.* 문자열
  • 시나리오 C만, 그리고 C의 잔여물이 재실행될 때: 이 스킬의 기본 디렉토리에 있는 scenario-c.md — 이전 레이아웃에 관한 모든 것; 또한 ../../para/move.md (휴지통)

아래 SKILL_DIR은 이 스킬의 기본 디렉토리이며, 하네스가 알려줍니다.

전체 실행 규칙

  • REPO_ROOT는 세션의 작업 디렉토리이며, 절대 경로(pwd)입니다. 이것이 플러그인이 작업 디렉토리에서 루트를 가져오는 유일한 지점입니다. init은 다른 모든 스킬을 위해 이를 기록합니다. 계획은 어떤 폴더인지 명시하므로, 잘못된 위치에서 시작된 세션은 아무것도 쓰기 전에 포착됩니다.
  • 계획의 '예' 전에는 아무것도 쓰지 않습니다. 검사, 질문 및 작업 백엔드 조사는 읽기 전용입니다.
  • vault.md는 마지막에 기록됩니다. 이것이 볼트가 설정되었음을 표시합니다. 중단된 실행은 vault.md를 남기지 않으며, 다음 실행은 처음부터 다시 시작하여 이미 완료된 작업을 찾습니다.
  • 모든 단계는 멱등적입니다: 누락된 경우 생성하고, 있는 경우 병합하며, 절대 덮어쓰지 않습니다. init을 두 번 연속 실행해도 두 번째에는 아무것도 변경되지 않습니다.
  • 모든 경로를 따옴표로 묶습니다(paths.md «Rules»). REPO_ROOT에는 공백이 포함될 수 있습니다.
  • 언어. LANG이 선택될 때까지는 사용자가 작성한 언어로 말합니다(아무런 단서가 없으면 영어 — 예: /para:init). 그 이후에는 paths.md «Language»에 따라 LANG으로 모든 것을 진행하며, 나머지 질문도 포함합니다. 계획 및 보고서 제목은 init.* 문자열입니다.

사전에 제공된 답변

$ARGUMENTS에는 이미 답변이 포함될 수 있습니다: 언어, PARA_DIR(«the default»는 제안된 값을 의미), 작업 백엔드, Areas 모델, 시나리오 B의 정렬 답변(폴더별 또는 루트 노트별, 중복 이름에 대한), 스냅샷 답변 및 계획 승인. 제공된 모든 답변을 받아들이고 다시 묻지 않습니다. 누락된 것만 묻습니다. 유효한 선택이 아닌 답변은 이유를 설명하고 다시 묻습니다.

사전에 제공된 승인은 다음을 의미합니다: 계획을 보여주고, 기다리지 않고 적용하십시오 — 단, 계획의 모든 줄이 무언가(폴더, 파일, 키, 항목)를 추가하는 경우에만 해당됩니다. 이미 존재하는 것을 변경하거나 교체하는 줄(예: 다른 Obsidian 값, 다른 CLAUDE.md 블록, 마이그레이션의 템플릿, 기존 vault.md의 REPO_ROOT)은 Tier 2(confirm.md)입니다. 이 경우 계획이 표시되고 init은 그때도 '예'를 기다립니다.

시나리오 B의 이동은 두 가지 종류가 있으며, 이것이 사전 승인이 이를 어떻게 다루는지에 대한 유일한 설명입니다. 사용자가 자신의 답변에서 결정한 이동(B3 또는 $ARGUMENTS의 정렬 답변)은 노트의 위치를 변경할 뿐, 내용은 변경하지 않으며, confirm.md는 이동을 Tier 1에 둡니다. 계획의 '예'가 그때 또는 사전에 주어지면 이를 다룹니다. 규칙만으로 결정된 이동(B2: Archive/ 또는 Resources/로)은 사용자 노트에 대한 init 자체의 판단입니다. 이를 보여주는 계획에 대한 실시간 '예'가 필요하며, 사전에 승인이 주어졌더라도 마찬가지입니다. 어느 쪽이든 이동 전에 스냅샷이 제공됩니다(4단계). 사전에 답변된 정렬 질문은 묻지 않습니다. 답변되지 않은 것은 묻고, 승인 여부와 관계없이 답변 전에는 아무것도 적용되지 않습니다.


1단계 — 검사

읽기 전용. 폴더가 무엇인지 알아내고 시나리오의 이름을 지정합니다.

REPO_ROOT=$(pwd)
ls -A "$REPO_ROOT"
ls "$REPO_ROOT/.claude" "$REPO_ROOT/.claude/para" "$REPO_ROOT/.claude/skills" 2>/dev/null
# 이전 포함 레이아웃(시나리오 C): 설정 폴더 또는 기본 레이어 파일
ls -d "$REPO_ROOT/.claude/para/local" "$REPO_ROOT/.claude/para/paths.md" 2>/dev/null   # old-layout
# 이전 포함 스킬과 같은 이름의 스킬 폴더: 보고되지만, 자체적으로 C인 경우는 없음
for s in inbox projects areas resources archive remove vault-lint; do
  [ -f "$REPO_ROOT/.claude/skills/$s/SKILL.md" ] && echo "old skill: $s"; done
# 노트: REPO_ROOT의 점 항목 아래에 있지 않은 모든 .md 파일 (저장소 자체 파일 및 템플릿 제외)
# (점 항목은 REPO_ROOT 기준으로 제거되므로, 점 디렉토리 아래에 있는 볼트도 여전히 감지됨)
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
# 이 폴더 위에 볼트가 있는 경우: 하위 폴더에서 init이 시작됨
d=$(dirname "$REPO_ROOT")
while [ "$d" != "/" ] && [ "$d" != "$HOME" ]; do
  { [ -e "$d/.claude/para/vault.md" ] || [ -d "$d/.obsidian" ]; } && echo "vault above: $d"
  d=$(dirname "$d")
done

다음과 같은 경우 다른 모든 것보다 먼저 중단합니다:

  • REPO_ROOT가 $HOME 또는 /인 경우 — 볼트가 아님; 그렇게 말합니다.
  • 위에서 볼트가 발견된 경우 — «<해당 폴더>에서 /para:init을 실행하세요»라고 말하고 중단합니다. 볼트 안에 다른 볼트를 절대 설정하지 않습니다.

그런 다음, 이 순서대로 결정하고, 무엇을 찾았는지와 어떤 경우인지 말합니다:

  1. 설정 — .claude/para/vault.md가 존재함 → 아래 «재실행 및 마이그레이션».
  2. 시나리오 C — 이전 포함 도구. 이전 기본 레이어 또는 설정만으로 인식됨(위의 old-layout 줄): 설정 폴더 local/ 또는 기본 레이어 파일 paths.md가 .claude/para/ 내에 있음. → «시나리오 C». 이전 스킬 중 하나와 같은 이름의 스킬 폴더(위의 old skill: 줄)가 둘 다 없으면 C가 아님: 아래 규칙에 따라 B 또는 A로 진행합니다. 어떤 폴더가 발견되었는지 말하고 init이 이를 건드리지 않는다고 말합니다. 계획의 «not done»에 다시 언급됩니다. .claude/para/에 이 플러그인의 설정 파일(areas.md, adapter.md)만 있고 vault.md가 없으면 C가 아님: init의 첫 번째 실행이 vault.md 전에 중단되거나 거부된 경우입니다. 마치 없는 것처럼 아래 B 또는 A로 진행합니다. 단, 해당 파일은 볼트의 설정이며 — 절대 덮어쓰지 않음 — 이미 답변한 질문(4번 질문 areas.md)은 다시 묻지 않습니다. 실행은 나머지를 채웁니다.
  3. 시나리오 B — 노트가 발견됨(위의 find가 아무것도 출력함). → «시나리오 B».
  4. 시나리오 A — 그 외: 빈 폴더 또는 노트 파일이 아닌 파일만 있는 폴더(새 Obsidian 볼트의 .obsidian/, CLAUDE.md). → 2단계.

2단계 — 질문

한 번에 하나씩, 이 순서대로, 사전에 답변된 것은 건너뜁니다. 각 질문은 선택 사항과 기본값(있는 경우)을 보여줍니다.

  1. 언어 (LANG). 선택 사항은 플러그인이 제공하는 언어입니다: lang/<code>.md와 templates/<code>/가 모두 있는 코드(paths.md «Language»):

    for f in "$SKILL_DIR"/../../lang/*.md; do l=$(basename "$f" .md)
      [ -d "$SKILL_DIR/../../templates/$l" ] && echo "$l"; done
    
  2. PARA 폴더 (PARA_DIR). 시나리오별 기본값: A — PARA, 하위 폴더로 도구와 노트를 분리; B — ., PARA 폴더를 사용자 폴더 옆에 배치(«시나리오 B»에 명시된 경우 제외). .은 PARA 폴더를 REPO_ROOT에 직접 배치합니다. 유효: . 또는 하나의 폴더 이름 — / 없음, .으로 시작하지 않음, PARA 폴더 이름 자체가 아님.

  3. 작업 백엔드 (TASKS). 선택 사항은 todoist, files 또는 mcp입니다. 첫 번째가 권장됩니다. 각각이 무엇을 의미하는지 한 줄로 말합니다: 앱의 받은 편지함 및 프로젝트; 볼트 내 작업 노트, 앱 없음; MCP를 통해 연결된 다른 할 일 앱. 그런 다음 프로브 — 아래 «백엔드 프로빙». 프로브에 실패한 값은 절대 기록되지 않습니다.

  4. Areas 모델 (areas.md). 한 가지 질문: Areas가 그룹화됩니까 — none 또는 그룹 이름 (예: Work, Home)? 그 외 모든 것은 파생되어 계획에 표시되며, 사용자가 변경할 수 있습니다:

    키그룹화됨none
    GROUPING필드 이름, 사용자가 이름을 지정하지 않은 경우 sphere (시드 템플릿의 키)none
    GROUPS지정된 이름비어 있음
    PLACEMENTAreas/<GROUP>/<title>.mdAreas/<title>.md
    REVIEW_GROUPING그룹당 하나의 블록, 보고할 내용이 없는 그룹은 생략하나의 평면 목록
    PLACEMENT_CHECK노트의 GROUPING 필드는 해당 노트가 속한 최상위 폴더 이름을 지정해야 함none
    AREA_TASK_PROJECTSGROUPS 이름하나의 이름: areas.review.heading 문자열

백엔드 프로빙

프로브는 inbox.list이며, 선택한 값에 대한 어댑터(paths.md)에 따라 실행됩니다. 읽기 전용입니다. 빈 받은 편지함은 성공입니다. 개수만 출력하고, 내용은 절대 출력하지 않습니다.

  • files — 프로빙할 것이 없음: 어댑터는 디스크이며, «Backend missing»은 발생할 수 없습니다(tasks.md).
  • mcp — 지금 adapters/mcp-generic.md의 1-6단계를 실행합니다. 1단계에서 도구를 찾을 수 없으면 프로브 실패입니다. 6단계는 사용자가 동의하고 앱에 받은 편지함이 있는 경우 프로브입니다. 그렇지 않으면 계획에 매핑이 확인되지 않았다고 명시합니다. 7-8단계는 계획 및 아래 «5단계»에 속합니다.
  • 다른 값 — 해당 어댑터에 따라 inbox.list를 실행합니다. 어댑터의 도구가 이 세션에 없거나 호출이 실패하면: 한 줄로 말하고(tasks.md «Backend missing»), 값을 기록하지 말고, files를 대신 제공하거나 앱을 연결하고 /para:init을 다시 실행하도록 제안합니다. 프로브가 성공하지 못한 TASKS 값을 절대 기록하지 말고, 나중에 전환하겠다고 약속하면서 하나의 값을 기록하지 마십시오.

3단계 — 계획

생성, 병합 또는 변경될 모든 항목의 하나의 목록이며, init.plan.heading 문자열로 시작됩니다. 이는 사용자가 편집하는 제안이지, 공지가 아닙니다. 편집은 새 계획을 만들고, 다시 표시됩니다. init.plan.approve 문자열로 끝나며, '예'(또는 «사전에 제공된 답변»에서 설정한 한도 내에서 사전에 제공된 승인) 전에는 아무것도 적용되지 않습니다.

계획은 다음 순서로 명명합니다:

  1. REPO_ROOT (이 폴더) 및 PARA_ROOT.
  2. 생성할 폴더와, 누락된 경우 ID 저널.
  3. 복사할 템플릿. 각 템플릿은 «Templates»가 적용하는 변경 사항과 함께 표시됩니다. 시나리오 B에서는 여기에: 이동, 프로젝트, IGNORE, 보류된 중복 및 끊어질 링크(«시나리오 B», «계획의 B 부분»).
  4. 설정: vault.md 및 areas.md의 모든 키와 그 값; mcp의 경우 어댑터 테이블(mcp-generic.md 7단계 — 계획의 '예'는 해당 테이블의 '예'입니다).
  5. CLAUDE.md, .claude/settings.json, .obsidian/app.json, .obsidian/templates.json: 각각에 추가되는 내용. 변경될 각 기존 값은 자체 줄로 표시되며, 이전 값과 새 값을 보여줍니다.
  6. 프로브 결과: 백엔드가 응답함(받은 편지함 개수 포함) 또는 files.
  7. 수행되지 않을 항목과 그 이유(이미 존재하는 템플릿, 유지되는 값).

4단계 — 스냅샷 (B 및 C만)

기존 볼트를 건드리는 계획을 적용하기 전에, 그 옆에 zip 사본을 제공합니다. 항상 질문하며, 거부는 수락되고, 사전에 제공된 답변을 따릅니다. 계획 승인과 동일한 메시지(init.snapshot 문자열)에서 질문되므로, 사용자는 한 번에 답변합니다:

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

시나리오 A는 저장할 것이 없으므로 건너뜁니다.

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", "какие проекты", "список проектов", "покажи проекты", "что у меня в работе", "заведи проект", "новый проект", "саммари по проекту", "обзор проекта", "что по проекту", "статус проекта", "где я по проекту", "добавь задачу", "заведи задачу".

관련 스킬