break-down-course-goal은(는) 무엇을 하나요?
클라이언트의 inputs.json을 tree.json으로 변환합니다: 과정 목표를 루트로 하는 트리로, 모든 간선은 **"자식 노드는 부모 노드가 발생하기 위해 참가자가 Claude와 함께 수행할 수 있어야 하는 것"**을 의미합니다.
이 스킬의 설계 선택: 증거 기반 상향식. 이 방법은 목표를 위에서 분해하지 않습니다. 기준과 주간 목표에서 시작하여, 각각이 충족될 때 관찰 가능해야 하는 것과 참가자가 그 증거를 생성하기 위해 수행해야 하는 것을 묻고, 해당 행동에서 목표로 거슬러 올라갑니다. 목표는 가장 먼저 분할되는 대상이 아니라 가장 마지막에 결합되는 대상입니다. 간선의 의미는 방향과 관계없이 동일하며, 구성 순서만 다릅니다.
입력 및 출력
- 실행 폴더: 사용자가 제공합니다. 모든 읽기와 쓰기가 이 폴더에서 이루어집니다.
- 읽기:
<run>/inputs.json(스키마h0-inputs/1). 클라이언트 정보는 이 파일에서만 가져옵니다. 클라이언트에 대한 다른 정보는 읽지 마십시오. - 쓰기:
tree-A.json,tree-B.json,tree-C.json,tree-pitches.md; 선택 후tree.json,skills-list.md및decisions.md에 한 줄. - 게이트:
schemas/폴더가 있는 곳에서 다음 명령 실행:python schemas/validate.py h1 <run>/tree-X.json --inputs <run>/inputs.json반드시PASS를 출력해야 합니다.PASS가 출력될 때까지 수정하고 다시 실행하십시오.PASS에 도달할 수 없으면 남은 오류를 보고하고 중단하십시오. 실패하는 파일을 절대 넘기지 마십시오. - 스크립트 (이 스킬의
scripts/디렉토리 내, 모두 UTF-8로 작성):order_leaves.py <tree.json>: 노드에서leaf_order를 계산하여 파일에 기록합니다. 절대leaf_order를 수동으로 작성하지 마십시오.render_leaves.py <tree.json> [<out.md>]:leaf_order를 번호가 매겨진 리프 목록skills-list.md로 렌더링합니다. 절대 목록을 수동으로 작성하지 마십시오.pick.py <run> <A|B|C> ["이유"]: 선택한 버전을tree.json으로 복사하고decisions.md에 추가합니다.
방법 (버전 A: 증거 기반 상향식)
다음 순서대로 작업하십시오. 작업 중 스크래치 목록을 유지하십시오. 트리만 기록됩니다.
단계 0. 입력 정렬
goal을 트리의goal에 그대로 복사합니다.- 모든
constraints항목을 다음 두 가지 중 하나로 분류합니다:- 트리를 구속하는 제약: 데이터(출처, 읽기/쓰기) 또는 범위(포함/제외)에 관한 것. 단계 2~4에서 사용합니다.
- 전달 관련 제약: 시간, 길이, 세션 수, 형식, 일정에 관한 것. 제약 사항을 그대로 복사하고 한 줄 설명("전달 제약; 트리는 역량에만 관한 것입니다")과 함께
set_aside에 넣습니다. 이는 노드를 형성, 크기 조정, 분할 또는 병합하지 않습니다.
presenter_owned(있는 경우)를 컨텍스트로 읽습니다. 이들은 절대 노드가 될 수 없으며, 어떤 노드도 참가자가 이를 수행하도록 요구할 수 없습니다.- 구축하기 전에 지금 용어집 문제를 나열합니다:
UNRESOLVED또는PROVISIONAL로 시작하는 모든 용어집 값 →undefined_term격차. 목표에서 해당 용어를 사용하지 않더라도 마찬가지입니다.- 목표, 주간 목표, 기준 또는 제약 조건에 나타나지만 용어집에 정의되지 않았으며 트리가 의존하는 모든 용어(예: 확인할 단위, 데이터 파일 형식) →
undefined_term격차. 스스로 정의하지 마십시오. 노드가 용어에 의존하는 경우, 정의 없이도 작동하도록 노드를 구성하고 격차를 명시하십시오.
단계 1. 증거 작성
각 기준에 대해: 증거는 pass_if를 문자 그대로 읽은 것입니다. 한 줄 작성: "관찰 가능: <pass_if>, <누가>에 의해 생성, <무엇>으로부터."
각 주간 목표에 대해: 충족되었을 때 다른 사람이 볼 수 있는 것(산출물, 기록, 눈에 띄는 변화)을 작성하십시오. 목표가 편안함이나 자신감에 관한 것이고 산출물이 없는 경우, 이를 보여주는 가장 작은 가시적 행동(예: "참가자가 직접 요청한 후 수정 버전이 존재함")을 명시하십시오.
단계 2. 각 증거를 생성하는 행동 명명
각 증거 항목에 대해 질문: "참가자가 Claude와 함께 무엇을 해야 이 증거가 남는가?" 명령형 동사와 대상을 사용하여 작성하십시오("생성...", "표시...", "Claude에게 요청..."). 주제("프롬프팅", "데이터 리터러시")를 사용하지 마십시오.
- 두 증거 항목이 동일한 행동에 의해 생성되는 경우, 하나의 행동을 공유합니다.
- 각각의 고유한 행동은 최상위 노드(루트의 자식)가 되며, 해당 증거를 생성하는 모든 주간 목표 및 기준 ID를 나열하는
serves를 갖습니다. - 적용 범위 확인: 입력의 모든
W및CID가 적어도 하나의 최상위serves에 나타나야 합니다. 주간 목표의 증거가 실제로 다른 행동 내부(더 작은 버전)에서 생성되는 경우, 해당 최상위 행동도 이를serves하고 더 작은 행동은 하위 노드가 됩니다. - 두 최상위 행동이 서로 의존하는 경우(하나가 다른 하나의 산출물을 필요로 하는 경우), 중첩 대신
prereqs로 연결하십시오.
단계 3. 각 행동에서 거슬러 올라가기
각 노드에 대해 질문: "이것이 발생하기 전에 참가자가 Claude와 함께 수행할 수 있어야 하는 것은 무엇인가?" 각각의 새로운 답변은 자식 노드가 됩니다.
- Claude와 함께 수행하는 행동만 자식 노드가 됩니다. Claude에게 요청하는 것도 포함되며, Claude의 출력을 판단, 확인 또는 처리하는 것(이는 참가자의 작업 중 절반입니다)도 포함됩니다. Claude 또는 그 출력과 관련되지 않은 단계(다른 도구 작동, 무언가 보내기)는 노드가 아닙니다: 프로필 또는 도메인 지식에 포함되거나 격차("입력에 누가/어떻게...에 대한 정보가 없음")가 됩니다.
- 답변이 이미 다른 곳에 노드로 존재하는 경우, 중복하지 말고
prereqs로 연결하십시오. - 여러 형제가 필요한 선행 조건은 한 형제의 가지 내부가 아니라 가장 낮은 공통 부모 아래에 위치해야 합니다. 그렇지 않으면 형제의
prereqs가 이를 필요로 하는 가지로 다시 연결될 수 있으며,order_leaves.py가 이를 순환으로 보고합니다. - 이 질문에 의해서만 분할하십시오. 세션, 실습, 시간 또는 교육 방식에 맞추기 위해 노드를 분할, 병합 또는 크기 조정하지 마십시오.
단계 4. 바닥에서 멈추고 기록
단계 3의 질문에 새로운 답변이 없을 때 노드 분할을 중단합니다. 노드는 리프가 되고 floor를 얻습니다:
profile: 참가자 프로필이 이전 단계를 이미 포함합니다(해당 프로필 필드를 인용 또는 의역).domain_knowledge: 입력에 명시된, 참가자 자신의 작업에 대한 일반적인 지식입니다(출처 명시).inputs_stop: 입력에 더 이상 진행할 수 있는 정보가 없습니다(무엇이 누락되었는지 설명하고, 중요한 경우 격차 추가). 남은 선행 조건이 기존 노드뿐인 경우,prereqs에 있습니다. 새로운 것이 남지 않은 이유를 선택하고detail에 "남은 선행 조건은 이미 노드임: …"이라고 말하십시오.
단계 5. 데이터 및 Claude 주장
- 데이터. 데이터가 필요한 모든 노드는
data항목을 갖습니다:what, 그리고 입력에서 가져온source:live,read-only(읽기만 하고 절대 쓰지 않는 실제 데이터, 절대 생성되지 않음),sample, 또는own(참가자 자신의 것). 입력에서 출처를 명시하는 문장을quote에 그대로 복사하십시오. 입력에 데이터 출처가 명시되지 않은 경우UNRESOLVED를 사용하고quote를 생략하며, 노드를 명시하는data_provenance격차를 추가하십시오. - 주장. Claude 제품이 할 수 있는 것(첨부 파일 읽기, 요청 시 수정, 소스 행 가리키기)을 가정하는 모든 노드는
claims항목에verify: true를 포함합니다. 단, 이를 명시하는 현재 문서 URL을 인용할 수 있는 경우에는cite를 대신 사용합니다. 둘 다 사용하지 마십시오.
단계 6. 목표 결합
루트를 마지막에 생성합니다: parent: null, skill = 참가자의 행동으로 다시 표현된 목표, serves 없음, floor 없음. 모든 최상위 노드를 루트에 연결합니다. 노드에 N1(루트)부터 번호를 매깁니다. 확인:
- 루트를 제외한 모든 노드에는 부모가 있습니다. 리프에는
floor가 있고, 비-리프에는floor가 없습니다. 루트의 자식만serves를 갖습니다. - 어떤
skill에도 시간, 형식 또는 일정 관련 단어가 없습니다.
단계 7. 정렬, 게이트, 렌더링
python <skill>/scripts/order_leaves.py <run>/tree-A.json(leaf_order설정, 순환이 있으면 실패하며 이는 수정해야 할prereqs루프를 의미합니다).PASS가 출력될 때까지tree-A.json게이트.- 단계 0, 3, 4, 5의 모든 내용으로
gaps를 채웁니다. 격차는 보고되며, 절대 채워지지 않습니다.
세 가지 버전
모든 실행은 동일한 inputs.json과 동일한 스키마에서 게이트를 통과하는 세 개의 트리를 작성합니다. B와 C는 별도의 새로운 하위 에이전트(절대 포크 아님)에서 생성되며, 각각 아래의 간략한 지침, 실행 폴더 경로, 이 스킬의 scripts/ 경로 및 게이트 명령만 제공됩니다. 플랫폼에 하위 에이전트가 없는 경우, 직접 B와 C를 작성하고 tree-pitches.md 상단에 다음 문장을 넣으십시오: "B와 C는 동일한 모델에 의해 역할극된 것이며, 독립적인 실행이 아닙니다."
B를 위한 간략한 지침 (대체 설계 선택: 목표 기반 하향식 분해).
"<run>/inputs.json만 읽으십시오. 목표를 위에서 분해하여 <run>/tree-B.json(스키마 h1-tree/1)을 구축하십시오: 루트 목표를 구성하는 행동으로 분할한 다음, 각 행동에 대해 '이것이 발생하기 전에 참가자가 Claude와 함께 수행할 수 있어야 하는 것은 무엇인가?'라는 질문에 새로운 답변이 없을 때까지 분할하십시오(그런 다음 floor 기록). 간선 의미: 자식 노드는 부모 노드가 발생하기 위해 참가자가 Claude와 함께 수행할 수 있어야 하는 것입니다. 각 루트 자식은 serves를 선언합니다. 모든 W 및 C ID가 제공되어야 합니다. 스킬은 행동이지 주제가 아닙니다. 전달 제약(시간, 길이, 형식)은 이유와 함께 set_aside에 넣습니다. 데이터 제약은 트리를 구속합니다. 발표자 소유 항목은 절대 노드가 아닙니다. 데이터 소스는 입력에서만 가져오며, 입력 문장을 그대로 인용하거나 UNRESOLVED 및 격차를 추가합니다. 모든 UNRESOLVED/PROVISIONAL 용어집 용어와 정의되지 않은 용어를 격차로 보고하십시오. 절대 정의하지 마십시오. Claude 제품 주장은 verify: true를 포함합니다. scripts/order_leaves.py를 실행하여 leaf_order를 설정한 다음, 게이트를 실행하여 PASS가 출력될 때까지 반복하십시오. 설계 선택을 명명하며 자신의 버전을 주장하는 한 문장을 반환하십시오."
C를 위한 간략한 지침 (반대자/사실 확인자).
"<run>/inputs.json과 <run>/tree-A.json만 읽으십시오. A의 전제를 공격하십시오: 모든 노드에 대해 그것이 실제로 Claude와 함께 수행하는 것인지, 부모에게 필요한 것인지, 증거가 작성자 외의 다른 사람이 확인할 수 있는지 질문하십시오. Claude 제품에 대한 모든 주장을 현재 문서(docs.claude.com, support.claude.com)와 대조하여 사실 확인하십시오. 확인할 수 없는 것은 verify: true로 유지하고, 확인할 수 있는 것은 URL을 인용하십시오. 확인하거나 측정할 수 없는 것을 제거하고, 중복을 prereqs로 병합하며, 더 간결하거나 안전한 트리를 제안하십시오. 동일한 스키마, 간선 의미 및 규칙을 유지하십시오: 모든 W 및 C ID가 제공되고, 행동(주제 아님), 리프에는 floor, 전달 제약은 set_aside, 데이터 소스는 입력에서 인용하거나 UNRESOLVED 및 격차, 정의되지 않은 용어는 보고(정의하지 않음). <run>/tree-C.json을 작성하고, scripts/order_leaves.py를 실행한 다음, PASS가 출력될 때까지 게이트하십시오. 설계 선택을 명명하며 자신의 버전을 주장하는 한 문장을 반환하십시오."
피치, 선택, 기록
<run>/tree-pitches.md작성: 버전당 한 줄,A — <한 문장>,B — …,C — …, 각각 설계 선택 명명. 어떤 버전도 추천으로 표시되지 않습니다. 모든 버전에서 사실적 오류를 지적할 수 있습니다. 투표하지 않습니다.- 발표자가 선택합니다.
python <skill>/scripts/pick.py <run> <A|B|C> "<주어진 이유, 있는 경우>"를 실행합니다. 제안하기 전에decisions.md가 있으면 읽어 이미 거부된 것을 다시 제안하지 않도록 합니다. tree.json을 한 번 더 게이트한 다음,python <skill>/scripts/render_leaves.py <run>/tree.json→<run>/skills-list.md.
보고 (실행 종료 시 사용자에게)
- 작성된 파일;
- 각 버전의 게이트 출력;
- 모든 격차(정의되지 않은 용어, 데이터 출처, 기타), 트리에 나열된 대로;
- 제쳐둔 모든 제약 조건 및 이유;
- B와 C가 독립적인 하위 에이전트였는지 역할극되었는지 여부.
예시 (어떤 클라이언트에서도 가져오지 않은 일반 예시)
목표: "각 자원봉사 주최자가 Claude를 사용하여 등록 시트를 교대 근무표로 변환하고, 모든 슬롯을 시트와 대조하여 확인합니다." 기준: "pass_if: 주최자당 수정된 슬롯 하나, 확인된 등록 행 포함."
- 단계 1 증거: "모든 주최자에 대해 수정된 슬롯과 확인된 등록 행이 존재함."
- 단계 2 행동 (최상위, 해당 기준 제공): "각 교대 슬롯을 등록 시트와 대조하여 확인하고, 시트가 지원하지 않는 슬롯을 수정하며, 행을 기록합니다."
- 단계 3 역방향 단계: "Claude에게 각 슬롯에 대해 해당 시트 행을 보여달라고 요청" (Claude와 함께) → 자식 노드. "등록 시트 열기" (Claude 없이) → 노드 아님, 프로필 또는 격차.
- 단계 4 "행이 슬롯을 지원하는지 판단"에 대한 floor:
domain_knowledge, 주최자가 이미 등록을 운영하기 때문.