Skip to content

hakyeoung/PlanU

Repository files navigation

PlanU (PNU) — day4-test 워크스페이스(2026.4.12 ~)

부산대 재학생 맥락의 수강·졸업·시간표·동선을 다루는 PlanU v1 실험/도구 모음입니다.
설계 요지: 이상적 시간표는 학생이 이미 짜는 경우가 많으므로, 시스템은 이상안을 새로 짜기보다 수강 가능 강의 목록사용자가 정한 이상적 시간표를 받아, 수강신청 실패 시 바로 고를 수 있는 과목별 대체 후보 우선순위긴급 실행 순서를 만드는 데 초점을 둡니다.
동작 규칙의 정본은 seed.yaml(v2.0.0+)과 **.cursor/skills/planu-pnu-cursor-mvp/SKILL.md**입니다.


업데이트 기록

  • 2026-04-27: PlanU의 문제 정의를 이상적인 시간표 생성 → 플랜 B·C 생성 → 과목별 대체 후보 우선순위 추천으로 재정리했습니다. 최종 HTML은 이제 이상안 / 과목별 대체 후보 표 / 긴급 실행 순서 / 제외·주의 목록을 중심으로 구성하며, 전체 수강 가능 목록은 내부 후보 풀로만 사용합니다. 이상안에 포함된 각 과목의 모든 다른 분반은 추천·주의·제외 중 하나로 반드시 평가합니다.
  • 2026-04-27: 대용량 수강편람 처리 규칙을 정리하고 워크스페이스 보조 실행 스크립트 _planu_extract.py를 추가했습니다. 로컬 수강편람 파일이 있으면 이 스크립트로 정제 JSON을 만들고, stdout의 available_courses_catalog JSON 스키마를 고정해 사용합니다.
  • 2026-04-27: 스킬 사용/미사용 조건의 토큰 수와 품질을 비교하기 위한 token_compare.md, measure_tokens.py를 추가했습니다.

사용자에게 (한 줄)

**수강편람(수강 가능·개설 목록)**과 본인이 짠 이상적 시간표(표·파일·채팅 구조화)를 준비합니다. 채팅을 PlanU로 시작하면 에이전트가 이상안을 기준으로 대체 후보 우선순위긴급 실행 순서를 포함한 HTML을 만듭니다.


AI 에이전트용 (해석 가이드)

아래는 이 저장소를 열었을 때 의도 파악·도구 선택에 쓰는 고정 힌트입니다.

트리거

  • 사용자 메시지가 **PlanU**로 시작하거나, PlanU, 부산대, PNU, 수강신청, 졸업요건, 시간표, seed.yaml 등과 함께 이 워크플로를 요청하면 PlanU v1 스킬을 적용한다.
  • 스킬 경로: .cursor/skills/planu-pnu-cursor-mvp/SKILL.md
  • 제약·수용 기준·온톨로지: seed.yaml (버전·종료 조건 포함)

사용자가 준비해야 하는 입력(파일화)

  1. 수강 가능한 강의 목록(개설·수강편람)

    • 개설 목록·시간·분반·강의실·담당 등이 담긴 자료를 원본 형태 그대로 워크스페이스에 둔다. 과목별 대체 후보의 내부 후보 풀이 된다.
    • 형식 예: PDF, HWP/HWPX, XLSX 등.
    • 초대용량 파일은 에이전트가 직접 전체를 읽지 않는다. _planu_extract.py가 없거나 구조가 맞지 않으면 사용자는 헤더와 첫 3~5줄 샘플만 제공하고, 이후 스크립트가 출력한 정제 JSON을 사용한다.
  2. 사용자 이상적 시간표

    • 학생이 이미 짠 이번 학기 희망 시간표(요일·교시·과목·분반 등)를 표·텍스트·파일로 제공한다. 에이전트는 이를 입력으로 재현·검증하고, 임의로 바꾸지 않는다.
  3. 자신이 수강했던 과목 / 이수 내역 (선택·졸업 맥락 시)

    • 성적표, 이수 확인서 등 근거 파일.
  4. 대체 후보에서 제외할 조건

    • 절대 듣고 싶지 않은 분반, 교수, 시간대, 강의 수 변경 여부 등을 제공한다. 예: “자료구조 063분반은 제외”, “강의 수는 늘리거나 줄이지 않음”.
  5. 선호(공강, 하루 최대 수업 등) — 대체 과목 고를 때 필요하면 질문으로 보완.

산출물(요약)

  • 기본: html_report(1) 사용자 이상안 (2) 대체 후보 우선순위 (3) 긴급 실행 순서 (4) 제외·주의 목록 네 구획, 분반·담당 교수, 시간 겹침 검증, 동선 검증, 근거 연결 포함
  • _planu_extract.py는 이 워크스페이스에서 함께 버전 관리하는 PlanU 보조 실행 스크립트다. 수강편람 추출은 초대용량 처리 규칙에 따라 이 스크립트 stdout의 정제 JSON만 사용한다.
  • 그 외 보조 스크립트 예: _planu_schedule.py, _planu_build_html_report.py 등은 참고용이며, 스킬과 충돌 시 seed.yaml + 스킬이 우선이다.
  • _planu_extract.py의 stdout은 스킬에 정의된 available_courses_catalog 스키마를 따른다. 핵심 키는 course_name, section, day, period, building, room, instructor, source_row, evidence이다.

관련 문서

파일 용도
seed.yaml Ouroboros 시드 — 제약, 수용 기준, 종료 조건, 온톨로지
raw_spec.md 제품 개념·에이전트 역할(참고)
raw_spec2.md Cursor 멀티에이전트 아이디어 스케치(참고)
token_compare.md 스킬 사용/미사용 토큰 비교 실험 절차
measure_tokens.py 입력·출력 파일 토큰 수 측정 스크립트
_planu_extract.py 수강편람을 available_courses_catalog JSON으로 정규화하는 추출 스크립트

사람이 읽는 짧은 절차

  1. 이 폴더를 Cursor 워크스페이스로 연다.
  2. 수강편람·이수 관련 파일을 이 폴더(또는 하위 폴더)에 넣는다.
  3. 채팅에 예: PlanU 수강편람은 catalog.xlsx. 내 이상안은 자료구조 061, 플랫폼 059... 자료구조 063은 제외하고 강의 수는 유지해줘 처럼 파일 경로이상안·제외 조건을 구체적으로 적는다.
  4. 에이전트가 목록·이상안을 읽고 과목별 대체 후보 랭킹과 긴급 실행 순서를 만든다. 완료 시 planu_report.html 등 HTML이 기본 산출이다.

워크스페이스 사용·설계 배경

문제 정의의 전환

이 프로젝트는 처음에는 이상적인 시간표를 작성해 주는 스킬로 출발했습니다. 하지만 실제 학생들은 이미 본인이 원하는 시간표를 어느 정도 짜 놓는 경우가 많고, AI가 이상안을 새로 만드는 일은 사용자의 실제 의사와 어긋나거나 근거 없는 추천으로 흐를 위험이 있었습니다.

그래서 두 번째 방향은 사용자 이상 시간표가 무너졌을 때 쓸 플랜 B·C를 만들어 주는 스킬이었습니다. 이 방식은 “특정 과목 수강신청 실패”라는 상황을 잘 다룰 수 있었지만, 실패 가정을 한두 개로 고정하면 결과가 너무 작고 비슷해지는 문제가 있었습니다. 실제 수강신청 현장에서는 긴 대체 시간표 두 개보다, 각 과목이 실패했을 때 바로 누를 수 있는 후보 목록이 더 필요했습니다.

현재 방향은 사용자 이상 시간표를 기준으로 대체 후보를 우선순위화하는 스킬입니다. 수강 가능 목록은 최종 결과에 길게 보여 주기보다 내부 후보 풀로 사용하고, 최종 HTML에는 사용자가 바로 행동할 수 있는 정보만 남깁니다: 이상안, 대체 후보 우선순위, 긴급 실행 순서, 제외·주의 목록입니다.

빈 폴더 사용을 권장하는 이유

AI가 동작하는 과정에서 보고서·중간 산출물 등 여러 파일이 워크스페이스에 생길 수 있습니다. 기존 프로젝트와 섞이지 않도록 하고, 생성물을 한눈에 관리하려면 가능하면 비어 있거나 전용인 폴더에서 쓰는 것을 권장합니다.

결과 파일 정리는 사용자가 직접

동작이 끝난 뒤 불필요한 파일을 지우라는 지시까지 워크플로에 넣는 방법도 있지만, 에이전트에게 삭제 권한을 넓게 주는 것은 위험하다고 보아 이 저장소·스킬에는 그 단계를 넣지 않았습니다. 정리·삭제는 사용자가 직접 판단해 수행해 주세요.

API 중심 설계에서 스킬로 옮긴 이유

기존 다중 에이전트 프로젝트(26-pnu-multi-agent-project)에서는 OpenAI API로 이상적인 시간표 생성을 목표로 했으나, 학교마다 수강 가능 과목을 파일 형태로 맞추고 API에 넘기는 과정이 번거롭다고 판단했습니다. 또한 API만으로 흐름을 묶을 때(하네스) 설정이 어렵고, 잘못된 결과가 나와도 피드백·교정 루프를 만들기 어렵다는 점이 있어, Cursor 스킬(SKILL.md) + seed.yaml처럼 규칙과 산출물을 고정하는 형태가 더 맞다고 정리했습니다.

느낀점 (스킬과 “정적 타입”)

프로그래밍언어론에서 TypeScript는 JavaScript와 달리 정적 타입이라 런타임 에러를 많이 예방 수 있다고 배웠는데, 스킬을 잘 쓰는 것은 마치 AI가 내는 결과를 동적 타입에서 정적 타입에 가깝게 변경하는 것과 비슷하다고 느꼈습니다. 그만큼 AI 사용 중 생길 수 있는 “런타임에 가까운 실패”(환각·규격 이탈 등) 를 줄이는 데 도움이 될 수 있겠다고 생각 했습니다.


면책

PlanU는 비공식 참고 도구입니다. 최종 이수·졸업·수강신청은 학교 규정 및 공식 시스템을 따릅니다. (seed.yaml 면책·근거 원칙 참조)

About

AI agent와 함께하는 개발 워크플로우에서 만든 스킬을 발전시켜보고자 만든 프로젝트 입니다. 원본 : https://github.com/qda-sw/26-pnu-multi-agent-project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors