diff --git a/agent-ops/.version b/agent-ops/.version index 4e03659..be5b4c7 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.19 +1.1.20 diff --git a/agent-ops/bin/sync.sh b/agent-ops/bin/sync.sh index 3c4b406..790bc1f 100755 --- a/agent-ops/bin/sync.sh +++ b/agent-ops/bin/sync.sh @@ -5,7 +5,6 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" AGENT_OPS_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" PROJECT_ROOT="$(cd "$AGENT_OPS_DIR/.." && pwd)" -SOURCE_REPO_DEFAULT="${AGENT_OPS_SOURCE_REPO:-agentic-framework}" # ── 색상 ───────────────────────────────────────────────────────────────────── RED='\033[0;31m'; YELLOW='\033[1;33m'; GREEN='\033[0;32m'; RESET='\033[0m' @@ -30,39 +29,6 @@ resolve_target() { [[ -d "$sibling" ]] && echo "$sibling" || echo "" } -find_default_source_repo() { - local explicit="${AGENT_OPS_SOURCE_REPO:-}" - local target="" - - if [[ -n "$explicit" ]]; then - resolve_target "$explicit" - return - fi - - target="$(resolve_target "$SOURCE_REPO_DEFAULT")" - if [[ -n "$target" && -f "$target/.agent-ops-source" ]]; then - echo "$target" - return - fi - - local parent - local -a source_repos - parent="$(dirname "$PROJECT_ROOT")" - mapfile -t source_repos < <( - find "$parent" -mindepth 1 -maxdepth 1 -type d | sort | while IFS= read -r candidate; do - local resolved - resolved="$(cd "$candidate" && pwd)" - [[ "$resolved" == "$PROJECT_ROOT" ]] && continue - [[ -f "$resolved/.agent-ops-source" ]] || continue - echo "$resolved" - done - ) - - if [[ "${#source_repos[@]}" -eq 1 ]]; then - echo "${source_repos[0]}" - fi -} - # ── 버전 비교: v1 > v2 이면 0 반환 ─────────────────────────────────────────── version_gt() { local v1="$1" v2="$2" @@ -131,7 +97,6 @@ discover_agent_ops_targets() { local resolved resolved="$(cd "$candidate" && pwd)" [[ "$resolved" == "$PROJECT_ROOT" ]] && continue - [[ ! -f "$resolved/.agent-ops-source" ]] || continue [[ -d "$resolved/agent-ops" ]] || continue echo "$resolved" done @@ -174,7 +139,7 @@ commit_and_push_agent_ops_scope() { ) } -sync_source_to_target() { +sync_framework_to_target() { local target="$1" local dst_ao="$target/agent-ops" local src_ver @@ -208,11 +173,10 @@ usage() { echo "사용법: $0 [--pull] [target]" echo "" echo " (기본) push 동기화" - echo " --pull target(source repo) → 현재 프로젝트 로 pull" + echo " --pull target(agentic-framework) → 현재 프로젝트 로 pull" echo "" echo " target: 폴더명 (동일 레벨 탐색) | 상대경로 | 절대경로" - echo " source repo에서 target 생략 시 상위 폴더의 agent-ops 적용 프로젝트 전체 동기화" - echo " 일반 프로젝트에서 target 생략 시 AGENT_OPS_SOURCE_REPO 또는 sibling source repo(.agent-ops-source)를 사용" + echo " agentic-framework에서 target 생략 시 상위 폴더의 agent-ops 적용 프로젝트 전체 동기화" } # ───────────────────────────────────────────────────────────────────────────── @@ -225,55 +189,53 @@ fi TARGET_INPUT="${1:-}" SRC_AO="$AGENT_OPS_DIR" -IS_SOURCE_REPO="$([[ -f "$PROJECT_ROOT/.agent-ops-source" ]] && echo "1" || echo "0")" +IS_FRAMEWORK="$([[ -f "$PROJECT_ROOT/.agent-ops-source" ]] && echo "1" || echo "0")" -# ── pull 모드: source repo → 현재 프로젝트 ───────────────────────────────── +# ── pull 모드: agentic-framework → 현재 프로젝트 ───────────────────────────── if [[ "$PULL_MODE" == "1" ]]; then - if [[ "$IS_SOURCE_REPO" == "1" ]]; then - echo -e "${RED}Error: source repo에서는 --pull을 사용할 수 없습니다.${RESET}" - exit 1 - fi - if [[ -z "$TARGET_INPUT" ]]; then - TARGET="$(find_default_source_repo)" - else - TARGET="$(resolve_target "$TARGET_INPUT")" + usage; exit 1 fi + TARGET="$(resolve_target "$TARGET_INPUT")" if [[ -z "$TARGET" ]]; then - echo -e "${RED}Error: source repo를 찾을 수 없습니다: ${TARGET_INPUT:-$SOURCE_REPO_DEFAULT}${RESET}" + echo -e "${RED}Error: 대상을 찾을 수 없습니다: $TARGET_INPUT${RESET}" exit 1 fi DST_AO="$TARGET/agent-ops" + if [[ "$IS_FRAMEWORK" == "1" ]]; then + echo -e "${RED}Error: agentic-framework에서는 --pull을 사용할 수 없습니다.${RESET}" + exit 1 + fi if [[ ! -f "$TARGET/.agent-ops-source" ]]; then - echo -e "${RED}Error: target이 source repo가 아닙니다 (.agent-ops-source 없음)${RESET}" + echo -e "${RED}Error: target이 agentic-framework가 아닙니다 (.agent-ops-source 없음)${RESET}" exit 1 fi SRC_VER="$(cat "$SRC_AO/.version" 2>/dev/null || echo "0.0.0")" DST_VER="$(cat "$DST_AO/.version" 2>/dev/null || echo "0.0.0")" echo "▶ $(basename "$TARGET") → $(basename "$PROJECT_ROOT") (pull)" - echo " 현재 버전: $SRC_VER | source 버전: $DST_VER" + echo " 현재 버전: $SRC_VER | framework 버전: $DST_VER" sync_common "$DST_AO" "$SRC_AO" cp "$DST_AO/.version" "$SRC_AO/.version" apply_agent_ops_entry_files "$DST_AO/rules/common/rules.md" "$PROJECT_ROOT" cd "$PROJECT_ROOT" git add agent-ops/rules/common agent-ops/skills/common agent-ops/bin agent-ops/.version \ "${AGENT_OPS_ENTRY_FILES[@]}" - git commit -m "sync: pull from $(basename "$TARGET") v$DST_VER" + git commit -m "sync: pull from agentic-framework v$DST_VER" git push echo -e "${GREEN}✓ 완료 (pull v$DST_VER)${RESET}" exit 0 fi -# ── source repo에서 다른 프로젝트로 ───────────────────────────────────────── -if [[ "$IS_SOURCE_REPO" == "1" ]]; then +# ── agentic-framework에서 다른 프로젝트로 ──────────────────────────────────── +if [[ "$IS_FRAMEWORK" == "1" ]]; then if [[ -n "$TARGET_INPUT" ]]; then TARGET="$(resolve_target "$TARGET_INPUT")" if [[ -z "$TARGET" ]]; then echo -e "${RED}Error: 대상을 찾을 수 없습니다: $TARGET_INPUT${RESET}" exit 1 fi - sync_source_to_target "$TARGET" + sync_framework_to_target "$TARGET" else mapfile -t TARGETS < <(discover_agent_ops_targets) if [[ "${#TARGETS[@]}" -eq 0 ]]; then @@ -283,7 +245,7 @@ if [[ "$IS_SOURCE_REPO" == "1" ]]; then STATUS=0 for TARGET in "${TARGETS[@]}"; do - if ! sync_source_to_target "$TARGET"; then + if ! sync_framework_to_target "$TARGET"; then STATUS=1 fi done @@ -292,15 +254,14 @@ if [[ "$IS_SOURCE_REPO" == "1" ]]; then exit 0 fi -# ── 일반 프로젝트에서 source repo로 (push) ────────────────────────────────── +# ── 일반 프로젝트에서 agentic-framework로 (push) ───────────────────────────── if [[ -z "$TARGET_INPUT" ]]; then - TARGET="$(find_default_source_repo)" -else - TARGET="$(resolve_target "$TARGET_INPUT")" + TARGET_INPUT="agentic-framework" fi +TARGET="$(resolve_target "$TARGET_INPUT")" if [[ -z "$TARGET" ]]; then - echo -e "${RED}Error: source repo를 찾을 수 없습니다: ${TARGET_INPUT:-$SOURCE_REPO_DEFAULT}${RESET}" + echo -e "${RED}Error: 대상을 찾을 수 없습니다: $TARGET_INPUT${RESET}" exit 1 fi DST_AO="$TARGET/agent-ops" @@ -308,16 +269,16 @@ DST_AO="$TARGET/agent-ops" echo "▶ $(basename "$PROJECT_ROOT") → $(basename "$TARGET")" if [[ ! -f "$TARGET/.agent-ops-source" ]]; then - echo -e "${RED}Error: target이 source repo가 아닙니다 (.agent-ops-source 없음)${RESET}" + echo -e "${RED}Error: target이 agentic-framework가 아닙니다 (.agent-ops-source 없음)${RESET}" exit 1 fi SRC_VER="$(cat "$SRC_AO/.version" 2>/dev/null || echo "0.0.0")" DST_VER="$(cat "$DST_AO/.version" 2>/dev/null || echo "0.0.0")" -echo " 현재 버전: $SRC_VER | source 버전: $DST_VER" +echo " 현재 버전: $SRC_VER | framework 버전: $DST_VER" if version_gt "$DST_VER" "$SRC_VER"; then - echo -e "${RED}⚠ 버전 충돌: source($DST_VER) > current($SRC_VER)${RESET}" + echo -e "${RED}⚠ 버전 충돌: framework($DST_VER) > current($SRC_VER)${RESET}" echo -e "${YELLOW} 먼저 sync-pull로 내려받은 뒤 재시도하세요.${RESET}" exit 1 fi @@ -328,6 +289,6 @@ echo "$NEW_VER" > "$SRC_AO/.version" echo "$NEW_VER" > "$DST_AO/.version" commit_and_push_agent_ops_scope "$TARGET" "sync: from $(basename "$PROJECT_ROOT") v$NEW_VER" -commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: to $(basename "$TARGET") v$NEW_VER" +commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: to agentic-framework v$NEW_VER" echo -e "${GREEN}✓ 완료 (v$SRC_VER → v$NEW_VER)${RESET}" diff --git a/agent-ops/rules/common/rules.md b/agent-ops/rules/common/rules.md index e28ff80..36fc7bb 100644 --- a/agent-ops/rules/common/rules.md +++ b/agent-ops/rules/common/rules.md @@ -13,6 +13,5 @@ - domain rule 생성 - skill 생성 - 로드맵/마일스톤 생성·갱신 -- README 생성·갱신 - git commit / push - agent-ops 업데이트 / 진입 파일 재적용 diff --git a/agent-ops/skills/common/code-review/SKILL.md b/agent-ops/skills/common/code-review/SKILL.md index 35b04dd..559239f 100644 --- a/agent-ops/skills/common/code-review/SKILL.md +++ b/agent-ops/skills/common/code-review/SKILL.md @@ -15,8 +15,6 @@ plan skill -> implementation -> code-review skill +----- issues found: new routed plan/review files ``` -If this skill is invoked, the review finalization contract is mandatory. Do not leave an ad hoc review comment only; every selected active review must end in exactly one recorded next state. - ## Core Loop Rules - Trigger: Korean or English active-task review requests, including `리뷰 진행해` and `리뷰해줘`, must use this skill when `agent-task/*/CODE_REVIEW-*-G??.md` exists. diff --git a/agent-ops/skills/common/create-readme/SKILL.md b/agent-ops/skills/common/create-readme/SKILL.md deleted file mode 100644 index 3d1f815..0000000 --- a/agent-ops/skills/common/create-readme/SKILL.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -name: create-readme -version: 1.0.0 -description: README.md가 없거나 비어 있는 프로젝트에 사람용 첫 진입점 README를 생성하고, 상세 운영 문서는 GUIDE와 roadmap으로 연결하는 공통 스킬 ---- - -# Create README - -## 목적 - -프로젝트 루트의 `README.md`를 사람용 첫 진입점으로 생성한다. -README는 프로젝트 소개와 문서 허브 역할만 담당하고, 변동이 잦은 로드맵·마일스톤·AI 작업 컨텍스트는 별도 문서로 연결한다. - -## 언제 호출할지 - -- `README.md`가 없거나 거의 비어 있을 때 -- 사용자가 "README 만들어줘", "프로젝트 소개 문서 작성해줘"라고 요청할 때 -- agent-ops 적용 프로젝트의 첫 소개 문서를 표준 구조로 만들 때 -- README에 로드맵 본문을 넣기 전에 문서 역할을 분리해야 할 때 - -## 입력 - -- `project-name`: 프로젝트 이름 (선택, 없으면 디렉터리명/패키지명/기존 문서에서 추론) -- `audience`: README를 읽을 주요 대상 (선택) -- `quick-start-hints`: 설치, 실행, 적용 방법 힌트 (선택) -- `doc-links`: 연결할 상세 문서 목록 (선택) - -## README 역할 - -README는 아래 내용을 짧고 안정적으로 담는다. - -- 이 프로젝트가 무엇인지 -- 왜 필요한지 -- 누구를 위한 것인지 -- 빠르게 어떻게 시작하는지 -- 기본 구조가 어떻게 생겼는지 -- 자세한 문서를 어디서 읽는지 - -README에는 아래 내용을 본문으로 길게 넣지 않는다. - -- 상세 로드맵과 마일스톤 체크리스트 -- 자주 바뀌는 작업 상태와 TODO -- 긴 운영 절차 -- AI가 매 작업마다 읽어야 하는 규칙 전문 -- 내부 의사결정 기록 전문 - -## 권장 구조 - -```markdown -# - -## 개요 - -## 왜 필요한가 - -## 핵심 아이디어 - -## 빠른 시작 - -## 구조 - -## 문서 - -## Roadmap -``` - -`Roadmap` 섹션은 본문을 길게 쓰지 않고 아래처럼 링크 허브로만 둔다. - -```markdown -## Roadmap - -이 프로젝트의 장기 방향과 현재 마일스톤은 `agent-ops/roadmap/`에서 관리한다. - -- 전체 흐름: `agent-ops/roadmap/ROADMAP.md` -- 현재 작업 기준: `agent-ops/roadmap/current.md` -- 마일스톤별 작업 컨텍스트: `agent-ops/roadmap/milestones/` -``` - -## 먼저 확인할 것 - -- [ ] 프로젝트 루트에 `README.md`가 있는지 확인 -- [ ] `README.md`가 이미 충분한 내용을 담고 있으면 덮어쓰지 말고 `update-readme` 사용을 안내 -- [ ] `agent-ops/GUIDE.md`, `agent-ops/roadmap/ROADMAP.md`, `agent-ops/rules/project/rules.md` 존재 여부 확인 -- [ ] 프로젝트 이름과 목적을 확인할 수 있는 manifest, package 파일, 기존 문서를 확인 - -## 실행 절차 - -1. **기존 README 확인** - - `README.md`가 없으면 새로 만든다 - - 비어 있거나 제목만 있으면 부족한 섹션을 채운다 - - 의미 있는 README가 이미 있으면 임의로 교체하지 않고 `update-readme`를 안내한다 - -2. **프로젝트 정보 수집** - - README에 필요한 수준으로만 문서와 상위 구조를 확인한다 - - 전체 코드를 정독하지 않는다 - - 불확실한 기능이나 대상 사용자는 단정하지 않고 짧게 일반화한다 - -3. **README 작성** - - 소개, 문제, 핵심 아이디어, 빠른 시작, 구조, 문서 링크를 간결하게 작성한다 - - 설치/실행 명령은 확인 가능한 경우에만 넣는다 - - `agent-ops/GUIDE.md`가 있으면 상세 적용 가이드로 연결한다 - - `agent-ops/roadmap/ROADMAP.md`가 있으면 Roadmap 섹션에서 링크한다 - - 로드맵 파일이 아직 없으면 "로드맵은 create-roadmap 실행 후 `agent-ops/roadmap/`에서 관리한다" 정도로 짧게 안내한다 - -4. **결과 보고** - - 생성한 README 경로 - - 포함한 주요 섹션 - - 확인하지 못해 생략한 명령이나 링크 - -## 실행 결과 검증 - -- [ ] `README.md`가 생성되었는가 -- [ ] README가 프로젝트 소개와 문서 허브 역할에 집중하는가 -- [ ] 상세 로드맵, 마일스톤 체크리스트, 작업 상태 TODO가 README 본문에 길게 들어가지 않았는가 -- [ ] 존재하는 상세 문서 링크가 실제 파일을 가리키는가 -- [ ] 확인하지 않은 설치/실행 명령을 추측으로 작성하지 않았는가 -- 검증 실패 시: README의 해당 섹션만 보완하고 불확실한 내용은 제거한다 - -## 출력 형식 - -```markdown -## 생성 완료 - -- README: README.md -- 포함 섹션: <섹션 목록> -- 연결 문서: - -## TODO 항목 - -- <확인이 필요한 항목> (해당 시) -``` - -## 금지 사항 - -- 기존의 의미 있는 README를 덮어쓰지 않는다 -- README를 상세 로드맵, 마일스톤, 작업 상태 관리 문서로 사용하지 않는다 -- 확인하지 않은 설치/실행 명령을 추측으로 넣지 않는다 -- agent-ops 내부 규칙이나 스킬 전문을 README에 복사하지 않는다 -- 프로젝트 특화 문서 생성 요청인데 `agent-ops/skills/common/`을 수정하지 않는다 diff --git a/agent-ops/skills/common/create-roadmap/SKILL.md b/agent-ops/skills/common/create-roadmap/SKILL.md index 6c13607..cba2dfa 100644 --- a/agent-ops/skills/common/create-roadmap/SKILL.md +++ b/agent-ops/skills/common/create-roadmap/SKILL.md @@ -1,7 +1,7 @@ --- name: create-roadmap version: 1.0.0 -description: AI-first 개인/소규모 프로젝트의 전체 Goal, Phase, Milestone 기반 로드맵 파일과 현재 마일스톤 컨텍스트 로딩 규칙을 처음 생성하는 공통 스킬 +description: AI-first 개인/소규모 프로젝트의 전체 Goal, Phase, Milestone 기반 로드맵 파일과 Default/Active Milestone 컨텍스트 로딩 규칙을 처음 생성하는 공통 스킬 --- # Create Roadmap @@ -9,7 +9,7 @@ description: AI-first 개인/소규모 프로젝트의 전체 Goal, Phase, Miles ## 목적 `agent-ops/roadmap/` 하위에 Goal / Phase / Milestone 기반 로드맵 구조를 처음 생성한다. -전체 로드맵은 마일스톤 설계 시에만 읽고, 일반 작업에서는 현재 마일스톤 정의만 읽도록 컨텍스트 로딩 규칙을 만든다. +전체 로드맵은 마일스톤 설계 시에만 읽고, 일반 작업에서는 `current.md`의 Default Milestone 또는 요청에 맞는 Active Milestone 정의만 읽도록 컨텍스트 로딩 규칙을 만든다. ## 언제 호출할지 @@ -23,7 +23,8 @@ description: AI-first 개인/소규모 프로젝트의 전체 Goal, Phase, Miles - `overall-goal`: 프로젝트 전체 Goal 한 줄 또는 짧은 문단 (선택, 없으면 README와 현재 구조에서 추론) - `phase-hints`: 예상 Phase 목록 또는 단계 힌트 (선택) - `milestone-hints`: 예상 Milestone 목록 또는 기능 힌트 (선택) -- `active-milestone`: 현재 진행 중인 Milestone 이름 또는 번호 (선택, 없으면 추론 후 사용자에게 확인) +- `default-milestone`: 애매한 요청이나 현재 집중 작업의 기본 Milestone 이름 또는 번호 (선택, 없으면 추론 후 사용자에게 확인) +- `active-milestones`: 동시에 진행 중인 Milestone 목록 (선택, 없으면 현재 구현 상태와 요청에서 추론) ## 생성 구조 @@ -40,7 +41,7 @@ agent-ops/ | 파일 | 역할 | |------|------| | `agent-ops/roadmap/ROADMAP.md` | 전체 Goal, Phase 흐름, Milestone 인덱스. 로드맵 생성/갱신/Phase 전환 때만 읽는다 | -| `agent-ops/roadmap/current.md` | 현재 Phase와 Active Milestone 문서 경로를 가리키는 얇은 포인터 | +| `agent-ops/roadmap/current.md` | 현재 Phase, Default Milestone, 동시에 진행 중인 Active Milestone 목록을 가리키는 얇은 포인터 | | `agent-ops/roadmap/milestones/MNN-.md` | 일반 작업 시 읽는 Milestone 단위 Goal, Scope, 기능 목록, Non-Goals | ### current.md 형식 @@ -51,10 +52,16 @@ agent-ops/ # Current Roadmap Context - Active Phase: -- Active Milestone: -- Active Milestone File: agent-ops/roadmap/milestones/MNN-.md +- Default Milestone: +- Default Milestone File: agent-ops/roadmap/milestones/MNN-.md + +## Active Milestones + +- : agent-ops/roadmap/milestones/MNN-.md ``` +Default Milestone은 애매한 요청의 기본 작업 초점이다. Active Milestones는 동시에 진행 중인 Milestone 후보 목록이며, 요청이 Default Milestone과 맞지 않으면 이 목록에서 가장 관련 있는 Milestone을 읽는다. + ## 먼저 확인할 것 - [ ] `agent-ops/roadmap/ROADMAP.md` 또는 `agent-ops/roadmap/current.md`가 이미 존재하는지 확인 @@ -84,7 +91,7 @@ agent-ops/ 4. **로드맵 파일 생성** - `agent-ops/roadmap/ROADMAP.md`에는 전체 Goal, 현재 위치, Phase 개요, Milestone 인덱스, 로딩 정책을 작성한다 - - `agent-ops/roadmap/current.md`에는 정해진 `current.md 형식` 그대로 Active Phase와 Active Milestone 문서 경로만 작성한다 + - `agent-ops/roadmap/current.md`에는 정해진 `current.md 형식` 그대로 Active Phase, Default Milestone, Active Milestones 목록을 작성한다 - 각 Milestone 문서에는 아래 섹션을 포함한다 - `Goal` - `Phase` @@ -101,23 +108,26 @@ agent-ops/ ```markdown ## 마일스톤 컨텍스트 로딩 - - 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 읽고, 그 안의 Active Milestone 문서를 같은 세션에서 1회 읽는다. + - 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 먼저 읽는다. + - 요청이 Default Milestone 범위에 맞으면 Default Milestone 문서를 같은 세션에서 1회 읽는다. + - 요청이 Default Milestone과 맞지 않으면 `current.md`의 Active Milestones 목록에서 가장 관련 있는 Milestone 문서를 같은 세션에서 1회 읽는다. + - Active Milestones에도 맞지 않으면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 인덱스를 확인하고 사용자에게 진행/전환 여부를 확인한다. - `agent-ops/roadmap/ROADMAP.md`는 로드맵 생성/갱신, Phase 전환, Milestone 추가/수정 요청이 있을 때만 읽는다. - - 작업 요청이 Active Milestone의 Goal 또는 Non-Goals와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다. + - 작업 요청이 선택된 Milestone의 Goal 또는 Non-Goals와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다. ``` - 같은 섹션이 이미 있으면 중복 추가하지 않고 필요한 문장만 보완한다 - `agent-ops/rules/project/rules.md`가 없으면 파일을 새로 만들지 말고, 추가하지 못한 항목으로 보고한다 6. **결과 보고** - 생성한 로드맵 파일 목록 - - Active Phase와 Active Milestone + - Active Phase, Default Milestone, Active Milestones - `rules/project/rules.md`에 추가한 로딩 규칙 여부 - 확인이 필요한 TODO 또는 가정 ## 실행 결과 검증 - [ ] `agent-ops/roadmap/ROADMAP.md`가 생성되었는가 -- [ ] `agent-ops/roadmap/current.md`가 Active Milestone 문서 경로를 정확히 가리키는가 +- [ ] `agent-ops/roadmap/current.md`가 Default Milestone 문서 경로와 Active Milestones 문서 경로를 정확히 가리키는가 - [ ] `agent-ops/roadmap/milestones/` 하위에 Milestone 문서가 생성되었는가 - [ ] 각 Milestone 문서가 필수 섹션을 포함하는가 - [ ] `ROADMAP.md`에 전체 로드맵을 일반 작업마다 읽지 말라는 로딩 정책이 포함되었는가 @@ -131,13 +141,14 @@ agent-ops/ - Roadmap: agent-ops/roadmap/ROADMAP.md - Current Context: agent-ops/roadmap/current.md -- Active Milestone: agent-ops/roadmap/milestones/MNN-.md +- Default Milestone: agent-ops/roadmap/milestones/MNN-.md +- Active Milestones: - Project Rules 업데이트: <추가함 | 이미 존재함 | rules/project/rules.md 없음> ## 현재 위치 - Phase: -- Milestone: +- Default Milestone: ## TODO 항목 diff --git a/agent-ops/skills/common/create-skill/SKILL.md b/agent-ops/skills/common/create-skill/SKILL.md index 3fc168e..07bb36c 100644 --- a/agent-ops/skills/common/create-skill/SKILL.md +++ b/agent-ops/skills/common/create-skill/SKILL.md @@ -31,8 +31,7 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬 ## 먼저 확인할 것 - [ ] `agent-ops/skills/common/` 및 `agent-ops/skills/project/` 하위에 동일 이름의 디렉터리가 이미 존재하는지 확인 -- [ ] `agent-ops/skills/common/router.md` 및 `agent-ops/rules/project/rules.md` 에 이미 유사한 라우팅 항목이 있는지 확인 -- [ ] 공통 스킬을 생성하는 경우, 새 요청 범주가 `agent-ops/rules/common/rules.md`의 router 로딩 목록에 이미 포함되는지 확인 +- [ ] `agent-ops/rules/common/rules.md` 및 `agent-ops/rules/project/rules.md` 에 이미 유사한 라우팅 항목이 있는지 확인 - [ ] `agent-ops/skills/common/_templates/skill-template.md` 를 읽어 최신 템플릿 형식 파악 ## 실행 절차 @@ -57,8 +56,7 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬 - 절차는 구체적이되 지나치게 세부 구현을 기술하지 않는다 4. **라우팅 업데이트** - - `.agent-ops-source` 마커가 **있으면** (공통 관리 레포): `agent-ops/skills/common/router.md`에 라우팅 항목 추가 - - 공통 스킬의 요청 범주가 `agent-ops/rules/common/rules.md`의 router 로딩 목록에 없을 때만 해당 범주를 추가한다 + - `.agent-ops-source` 마커가 **있으면** (공통 관리 레포): `agent-ops/rules/common/rules.md`에 라우팅 항목 추가 - `.agent-ops-source` 마커가 **없으면** (타겟 프로젝트): `agent-ops/rules/project/rules.md`의 프로젝트 스킬 라우터 섹션에 라우팅 항목 추가 - 이 skill이 속할 라우팅 축(구조 분석/코드 변경/흐름 추적 등)을 판단한다 - 기존 라우팅 구조를 깨지 않는다 @@ -85,7 +83,7 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬 - [ ] `agent-ops/skills/{common|project}//SKILL.md` 파일이 생성되었는가 - [ ] 생성된 파일이 `skill-template.md`의 필수 섹션(목적, 언제 호출할지, 실행 절차, 실행 결과 검증, 출력 형식, 금지 사항)을 포함하는가 - [ ] frontmatter에 name, version, description이 올바르게 기재되었는가 -- [ ] 공통 스킬이면 `agent-ops/skills/common/router.md`, 프로젝트 스킬이면 `agent-ops/rules/project/rules.md`에 라우팅 항목이 추가되었는가 +- [ ] 라우팅 대상 파일에 해당 스킬의 라우팅 항목이 추가되었는가 - 검증 실패 시: 누락된 섹션 또는 라우팅 항목을 사용자에게 알리고 해당 부분만 보완한다 ## 금지 사항 diff --git a/agent-ops/skills/common/init-agent-ops/SKILL.md b/agent-ops/skills/common/init-agent-ops/SKILL.md index e38a162..5a9807c 100644 --- a/agent-ops/skills/common/init-agent-ops/SKILL.md +++ b/agent-ops/skills/common/init-agent-ops/SKILL.md @@ -8,12 +8,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 ## 목적 -프로젝트에 Agent-Ops 구조가 없거나 불완전할 때, 공통 scaffold를 배치한 뒤 현재 프로젝트 상태를 분석하여 프로젝트 전용 규칙 초안을 세팅한다. - -`agent-ops/bin/init-agent-ops.sh`는 공통 scaffold와 빈 프로젝트 전용 디렉터리를 만드는 bootstrap 도구다. -이 스킬을 읽은 에이전트는 스크립트 실행 후 프로젝트를 분석하여 `rules/project/rules.md`와 필요한 domain rule 초안을 이어서 작성한다. - -최종적으로 다음 상태를 만든다. +프로젝트에 Agent-Ops 구조가 없거나 불완전할 때, +현재 프로젝트 상태를 분석하여 다음을 세팅한다. 1. 에이전트 진입 파일 2. AI ignore / permission 기본 설정 @@ -45,29 +41,11 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 - 기존 구조를 우선한다. - 새 파일 생성은 꼭 필요한 최소 범위로 제한한다. -- 스크립트가 만드는 공통 scaffold와 에이전트가 분석해 작성하는 프로젝트 전용 파일을 구분한다. - 도메인은 발명하지 말고 현재 구조에서 발견한다. - 처음에는 핵심 도메인만 생성한다. - 반복되는 작업만 초기 skill로 만든다. - 불확실한 내용은 후보로 제시한다. -## 실행 책임 구분 - -### init-agent-ops.sh가 수행하는 일 - -- 에이전트 진입 파일 생성 -- AI ignore / permission 기본 설정 -- `agent-ops/bin`, `agent-ops/rules/common`, `agent-ops/skills/common` 복사 -- `agent-ops/rules/project/domain`, `agent-ops/rules/private`, `agent-ops/skills/project` 디렉터리 생성 -- `.gitignore`에 `agent-ops/rules/private/` 추가 - -### 에이전트가 이어서 수행하는 일 - -- 프로젝트 구조를 분석해 `agent-ops/rules/project/rules.md` 생성 -- 필요한 최소 domain rule 초안 생성 -- 반복 작업이 보이는 경우 프로젝트 skill 후보 제안 -- 불확실한 항목은 확정하지 않고 TODO 또는 후보로 남김 - ## 상태 판별 ### 신규 프로젝트 @@ -89,8 +67,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 | `agent-ops/bin/` | 공통 스크립트 전체 복사 (진입 파일 목록의 단일 기준인 `entry-files.sh` 포함) | | `agent-ops/rules/common/` | 공통 폴더 전체 복사 (수정 금지) | | `agent-ops/skills/common/` | 공통 폴더 전체 복사 (수정 금지) | -| `agent-ops/rules/project/rules.md` | 스크립트 실행 후 에이전트가 프로젝트 분석으로 생성 | -| `agent-ops/rules/project/domain//rules.md` | 스크립트 실행 후 에이전트가 필요한 최소 도메인만 분석해 생성 | +| `agent-ops/rules/project/rules.md` | 프로젝트 분석 후 생성 | +| `agent-ops/rules/project/domain//rules.md` | 도메인 분석 후 생성 | | `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) | | `.gitignore`에 `agent-ops/rules/private/` 추가 | git 추적 제외 | | `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | `agent-task/archive/**` 한 줄 추가 | @@ -180,9 +158,7 @@ common/rules.md와 내용이 중복되지 않도록 한다. ## 실행 (Execution) -지정한 대상 디렉토리에 agent-ops 공통 스캐폴드를 생성한다. -이 명령은 프로젝트 전용 `rules/project/rules.md`나 domain rule 본문을 채우지 않는다. -명령 실행 후 아래 실행 절차의 프로젝트 분석 단계를 반드시 이어서 수행한다. +지정한 대상 디렉토리에 agent-ops 스캐폴드를 생성한다. ```bash ./agent-ops/bin/init-agent-ops.sh @@ -193,29 +169,31 @@ common/rules.md와 내용이 중복되지 않도록 한다. 1. **상태 판별** - 프로젝트 구조, 모듈 경계, agent-ops 파일 유무를 분석하여 신규/운영중을 판별한다 -2. **공통 scaffold 생성** - - `./agent-ops/bin/init-agent-ops.sh `를 실행한다 - - 스크립트 결과로 진입 파일, 공통 rules/skills/bin, 빈 project/private 디렉터리가 생성됐는지 확인한다 +2. **에이전트 진입 파일 생성** + - `rules/common/rules.md`를 `agent-ops/bin/entry-files.sh`의 파일 목록으로 프로젝트 루트에 복사한다 -3. **스크립트 결과 확인** - - `rules/common/rules.md`가 진입 파일로 복사됐는지 확인한다 - - `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 `agent-task/archive/**`가 추가됐는지 확인한다 - - `.claude/settings.json`, `opencode.json`은 없으면 생성되고, 있으면 수동 병합 안내가 출력됐는지 확인한다 +3. **AI ignore / permission 기본 설정** + - `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 `agent-task/archive/**`를 추가한다 + - `.claude/settings.json`, `opencode.json`이 없으면 archive 읽기/검색 제외 설정을 생성한다 - `agent-task/archive/**` 제외는 `.gitignore`에 추가하지 않는다 -4. **rules/project/rules.md 생성** +4. **agent-ops 폴더 구조 복사** + - 공통 관리 레포의 `agent-ops/` 공통 폴더(bin, rules/common, skills/common)를 복사한다 + - `agent-ops/.version` 파일을 복사한다 + +5. **rules/project/rules.md 생성** - 프로젝트를 분석하여 응답 언어, 프로젝트 개요, 기술 스택 등을 채운다 - common/rules.md와 내용이 중복되지 않도록 한다 -5. **도메인 분석 및 domain rule 생성** +6. **도메인 분석 및 domain rule 생성** - 신규 프로젝트: 핵심 domain placeholder 2~4개만 제안한다. domain rules를 과도하게 채우지 않는다 - 운영중 프로젝트: Core/Supporting/Generic 도메인을 식별하고 실제 경로를 반영한 초안을 생성한다 -6. **초기 skill 제안** +7. **초기 skill 제안** - 신규 프로젝트: 최소 2개만 제안한다 - 운영중 프로젝트: 반복 작업 기반으로 필요한 skill을 제안한다 -7. **결과 보고** +8. **결과 보고** - 상태 판별 결과, 생성된 파일 목록, 도메인 제안, skill 제안, 주의사항을 출력한다 ## 출력 형식 @@ -226,8 +204,8 @@ common/rules.md와 내용이 중복되지 않도록 한다. - 근거: 짧게 요약 ### 스캐폴드 계획 -- 스크립트로 생성된 공통 파일 -- 에이전트가 분석해 생성한 프로젝트 전용 파일 +- 생성할 파일 +- 바로 채울 파일 - placeholder로 둘 파일 ### 도메인 제안 diff --git a/agent-ops/skills/common/plan/SKILL.md b/agent-ops/skills/common/plan/SKILL.md index cdb9ee3..d998158 100644 --- a/agent-ops/skills/common/plan/SKILL.md +++ b/agent-ops/skills/common/plan/SKILL.md @@ -15,8 +15,6 @@ implementation -> code changes + filled CODE_REVIEW-{review_lane}-GNN.md code-review skill -> verdict + archive, complete.log, and PASS task-directory archive move or new follow-up plan/review files ``` -If this skill is invoked, the plan-code-review workflow is mandatory. Do not downgrade the request into an informal plan, and do not stop before writing both the active PLAN file and its paired CODE_REVIEW stub. - ## Workflow Contract This skill intentionally uses routed active files under `agent-task/{task_name}/` as the state protocol. Do not change this filename contract unless the paired code-review skill is updated together. diff --git a/agent-ops/skills/common/router.md b/agent-ops/skills/common/router.md index 578c1b7..b3527e3 100644 --- a/agent-ops/skills/common/router.md +++ b/agent-ops/skills/common/router.md @@ -7,11 +7,9 @@ | skill 만들어줘, SKILL.md 생성, 새 스킬 추가 | `agent-ops/skills/common/create-skill/SKILL.md` | | 로드맵 만들어줘, roadmap 생성, 마일스톤 설계, goal/phase 구조 잡아줘 | `agent-ops/skills/common/create-roadmap/SKILL.md` | | 로드맵 업데이트, roadmap 갱신, 마일스톤 갱신, phase 변경, 현재 마일스톤 변경 | `agent-ops/skills/common/update-roadmap/SKILL.md` | -| README 만들어줘, README 생성, 프로젝트 소개 문서 작성 | `agent-ops/skills/common/create-readme/SKILL.md` | -| README 정리해줘, README 업데이트, 로드맵 분리해줘, 문서 링크 정리 | `agent-ops/skills/common/update-readme/SKILL.md` | | 계획 세워줘, 구현 계획, PLAN.md, plan | `agent-ops/skills/common/plan/SKILL.md` | | 코드 리뷰해줘, 리뷰 진행해, 리뷰해줘, code review, CODE_REVIEW.md, 리뷰 루프 | `agent-ops/skills/common/code-review/SKILL.md` | | 커밋해줘, 푸시해줘, commit, push, 반영해줘 | `agent-ops/skills/common/commit-push/SKILL.md` | -| agent-ops 싱크해, agent-ops 동기화해, source repo에 올려줘, agentic-framework에 올려줘, agent-ops를 [프로젝트]로 싱크해 | `agent-ops/skills/common/sync-push/SKILL.md` | -| agent-ops pull해, agent-ops 가져와, source repo에서 가져와, agentic-framework에서 가져와, agent-ops 내려받아 | `agent-ops/skills/common/sync-pull/SKILL.md` | +| agent-ops 싱크해, agent-ops 동기화해, agentic-framework에 올려줘, agent-ops를 [프로젝트]로 싱크해 | `agent-ops/skills/common/sync-push/SKILL.md` | +| agent-ops pull해, agent-ops 가져와, agentic-framework에서 가져와, agent-ops 내려받아 | `agent-ops/skills/common/sync-pull/SKILL.md` | | 도메인 업데이트, domain rule 갱신, 도메인 검토, domain 스캔 | `agent-ops/skills/common/update-domain-rule/SKILL.md` | diff --git a/agent-ops/skills/common/sync-pull/SKILL.md b/agent-ops/skills/common/sync-pull/SKILL.md index cc2c130..adc2c42 100644 --- a/agent-ops/skills/common/sync-pull/SKILL.md +++ b/agent-ops/skills/common/sync-pull/SKILL.md @@ -1,26 +1,25 @@ --- name: sync-pull -description: source repo에서 현재 프로젝트로 agent-ops를 내려받는다. "agent-ops pull해", "source repo에서 가져와", "agentic-framework에서 가져와" 요청 시 사용한다. +description: agentic-framework에서 현재 프로젝트로 agent-ops를 내려받는다. "agent-ops pull해", "agentic-framework에서 가져와" 요청 시 사용한다. --- # sync-pull ## 목적 -`agent-ops/bin/sync.sh --pull`을 호출해 `.agent-ops-source`가 있는 source repo → 현재 프로젝트 방향으로 agent-ops를 내려받는다. +`agent-ops/bin/sync.sh --pull`을 호출해 agentic-framework → 현재 프로젝트 방향으로 agent-ops를 내려받는다. ## 언제 호출할지 - "agent-ops pull해", "agent-ops 가져와" 요청 시 -- "source repo에서 가져와", "agentic-framework에서 가져와" 요청 시 +- "agentic-framework에서 가져와" 요청 시 - "agent-ops 내려받아" 요청 시 ## 실행 절차 -1. 현재 프로젝트의 **상위 폴더(`../`)** 에 `.agent-ops-source`가 있는 source repo가 있는지 확인한다 -2. 기본 이름은 `agentic-framework`이고, 다른 이름을 쓰면 `AGENT_OPS_SOURCE_REPO=` 또는 명시 target을 사용한다 -3. **있으면**: `agent-ops/bin/sync.sh --pull` 또는 `agent-ops/bin/sync.sh --pull ` 실행 -4. **없으면**: 사용자에게 source repo 경로 입력을 안내하고, 입력받은 경로로 실행 +1. 현재 프로젝트의 **상위 폴더(`../`)** 에 `agentic-framework` 폴더가 있는지 확인한다 (현재 폴더 내부가 아님) +2. **있으면**: `agent-ops/bin/sync.sh --pull agentic-framework` 실행 +3. **없으면**: 사용자에게 agentic-framework 경로 입력을 안내하고, 입력받은 경로로 실행 ```bash agent-ops/bin/sync.sh --pull @@ -29,8 +28,8 @@ agent-ops/bin/sync.sh --pull ## 실행 결과 검증 - [ ] sync.sh 가 오류 없이 완료됐는가 -- [ ] 현재 프로젝트 버전이 source repo 버전과 일치하는가 -- [ ] `agent-ops/bin/entry-files.sh`의 모든 진입 파일이 갱신됐고, 내용이 source repo의 `agent-ops/rules/common/rules.md`와 일치하는가 +- [ ] 현재 프로젝트 버전이 framework 버전과 일치하는가 +- [ ] `agent-ops/bin/entry-files.sh`의 모든 진입 파일이 갱신됐고, 내용이 framework의 `agent-ops/rules/common/rules.md`와 일치하는가 ## 금지 사항 diff --git a/agent-ops/skills/common/sync-push/SKILL.md b/agent-ops/skills/common/sync-push/SKILL.md index 667d214..390437b 100644 --- a/agent-ops/skills/common/sync-push/SKILL.md +++ b/agent-ops/skills/common/sync-push/SKILL.md @@ -1,6 +1,6 @@ --- name: sync-push -description: 현재 프로젝트의 agent-ops를 source repo로 올리거나, source repo의 공통 agent-ops를 대상 프로젝트 또는 상위 폴더의 agent-ops 적용 프로젝트 전체로 push하고 푸시한다. "agent-ops 싱크해", "agent-ops 동기화해", "source repo에 올려줘" 요청 시 사용한다. +description: 현재 프로젝트의 agent-ops를 agentic-framework로 올리거나, agentic-framework의 공통 agent-ops를 대상 프로젝트 또는 상위 폴더의 agent-ops 적용 프로젝트 전체로 push하고 푸시한다. "agent-ops 싱크해", "agent-ops 동기화해", "agentic-framework에 올려줘" 요청 시 사용한다. --- # sync-push @@ -9,33 +9,31 @@ description: 현재 프로젝트의 agent-ops를 source repo로 올리거나, so `agent-ops/bin/sync.sh`를 호출해 agent-ops 공통 파일을 push 방향으로 동기화한다. -- 일반 프로젝트에서는 현재 프로젝트 → `.agent-ops-source`가 있는 source repo 방향으로 올린다. -- source repo에서는 source repo → 대상 프로젝트 방향으로 보내고, 대상 repo를 commit/push 한다. -- source repo에서 대상이 명시되지 않으면 현재 프로젝트의 상위 폴더에 있는 agent-ops 적용 프로젝트 전체로 보낸다. -- 기본 source repo 이름은 `agentic-framework`이며, 필요하면 `AGENT_OPS_SOURCE_REPO` 환경 변수로 바꿀 수 있다. +- 일반 프로젝트에서는 현재 프로젝트 → agentic-framework 방향으로 올린다. +- agentic-framework 원본 프로젝트에서는 agentic-framework → 대상 프로젝트 방향으로 보내고, 대상 repo를 commit/push 한다. +- agentic-framework 원본 프로젝트에서 대상이 명시되지 않으면 현재 프로젝트의 상위 폴더에 있는 agent-ops 적용 프로젝트 전체로 보낸다. ## 언제 호출할지 - "agent-ops 싱크해", "agent-ops 동기화해" 요청 시 -- "source repo에 올려줘", "agentic-framework에 올려줘" 요청 시 +- "agentic-framework에 올려줘" 요청 시 - "agent-ops를 [프로젝트]로 싱크해" 요청 시 ## 실행 절차 ### 현 프로젝트가 일반 프로젝트인 경우 (`.agent-ops-source` 없음) -1. 현재 프로젝트의 **상위 폴더(`../`)** 에 `.agent-ops-source`가 있는 source repo가 있는지 확인한다 -2. 기본 이름은 `agentic-framework`이고, 다른 이름을 쓰면 `AGENT_OPS_SOURCE_REPO=` 또는 명시 target을 사용한다 -3. **있으면**: `agent-ops/bin/sync.sh` 실행 또는 `agent-ops/bin/sync.sh ` 실행 -4. **없으면**: 사용자에게 source repo 경로 입력을 안내하고, 입력받은 경로로 실행 +1. 현재 프로젝트의 **상위 폴더(`../`)** 에 `agentic-framework` 폴더가 있는지 확인한다 (현재 폴더 내부가 아님) +2. **있으면**: `agent-ops/bin/sync.sh` 실행 또는 `agent-ops/bin/sync.sh agentic-framework` 실행 +3. **없으면**: 사용자에게 agentic-framework 경로 입력을 안내하고, 입력받은 경로로 실행 -### 현 프로젝트가 source repo인 경우 (`.agent-ops-source` 있음) +### 현 프로젝트가 agentic-framework인 경우 (`.agent-ops-source` 있음) 1. 사용자 요청에서 target 프로젝트명 또는 경로를 추출한다 2. **명시된 경우**: `agent-ops/bin/sync.sh ` 실행 3. **명시되지 않은 경우**: `agent-ops/bin/sync.sh` 실행 4. target이 없으면 `sync.sh`가 현재 프로젝트 기준 상위 폴더(`../`)의 하위 디렉터리 중 `agent-ops/` 폴더가 있는 프로젝트를 모두 대상으로 삼는다 -5. `sync.sh`는 현재 source repo의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다 +5. `sync.sh`는 현재 agentic-framework의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다 6. 적용 후 각 대상 repo에서 agent-ops 공통 관리 경로(`rules/common/rules.md` 포함)와 진입 파일만 stage 하여 commit/push 한다 덮어쓰기 대상은 `init-agent-ops` 초기 세팅과 동일하며, 실제 목록은 `agent-ops/bin/entry-files.sh`의 `AGENT_OPS_ENTRY_FILES`를 단일 기준으로 사용한다. @@ -60,8 +58,8 @@ agent-ops/bin/sync.sh [target] - [ ] sync.sh 가 오류 없이 완료됐는가 - [ ] 버전 충돌 경고가 없었는가 — 있었다면 사용자에게 수동 머지 필요함을 알린다 -- [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 source repo의 `agent-ops/rules/common/rules.md`와 일치하는가 -- [ ] source repo에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 source repo의 `agent-ops/rules/common/rules.md`와 일치하는가 +- [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가 +- [ ] agentic-framework에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] 대상 repo에 commit/push 된 path가 agent-ops 공통 관리 경로와 진입 파일로 제한되었는가 ## 금지 사항 diff --git a/agent-ops/skills/common/update-readme/SKILL.md b/agent-ops/skills/common/update-readme/SKILL.md deleted file mode 100644 index 105d165..0000000 --- a/agent-ops/skills/common/update-readme/SKILL.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -name: update-readme -version: 1.0.0 -description: 기존 README.md를 프로젝트 첫 진입점과 문서 허브 역할에 맞게 갱신하고, 로드맵·마일스톤·AI 작업 컨텍스트를 별도 문서로 분리하는 공통 스킬 ---- - -# Update README - -## 목적 - -기존 `README.md`를 안정적인 프로젝트 소개 문서로 갱신한다. -README가 상세 로드맵, 마일스톤 체크리스트, 긴 운영 절차를 떠안지 않도록 정리하고, 필요한 상세 문서로 연결한다. - -## 언제 호출할지 - -- 사용자가 "README 정리해줘", "README 업데이트", "로드맵 분리해줘"라고 요청할 때 -- README에 자주 바뀌는 로드맵, TODO, 마일스톤 상태가 섞였을 때 -- agent-ops 구조, roadmap 구조, GUIDE 링크를 README에 반영해야 할 때 -- 프로젝트 구조가 바뀌어 README의 설명이나 문서 링크가 낡았을 때 - -## 입력 - -- `mode`: `refresh` / `split-roadmap` / `link-docs` / `structure` 중 하나 (선택, 요청에서 추론 가능) -- `change-summary`: README에 반영할 변경 요약 (선택) -- `doc-links`: 새로 연결할 상세 문서 목록 (선택) - -## 모드 - -| mode | 사용 상황 | -|------|-----------| -| `refresh` | README의 소개, 구조, 빠른 시작을 현재 상태에 맞게 갱신 | -| `split-roadmap` | README 안의 상세 로드맵/마일스톤을 `agent-ops/roadmap/` 링크로 분리 | -| `link-docs` | GUIDE, roadmap, rules, skills 등 문서 링크 허브 정리 | -| `structure` | README 섹션 순서와 역할을 표준 구조로 재정렬 | - -## README 관리 원칙 - -- README는 프로젝트의 첫 진입점이다 -- README는 사람에게 프로젝트를 이해시키고, 더 자세한 문서로 이동시키는 허브다 -- 변동이 잦은 로드맵 본문은 `agent-ops/roadmap/ROADMAP.md`에서 관리한다 -- 일반 작업에서 AI가 읽는 방향성은 `agent-ops/roadmap/current.md`와 Active Milestone 문서가 담당한다 -- agent-ops 적용 방법의 상세 절차는 `agent-ops/GUIDE.md`가 담당한다 - -## 먼저 확인할 것 - -- [ ] `README.md` 존재 여부 확인 -- [ ] README가 없으면 `create-readme` 스킬 사용을 안내하고 중단 -- [ ] `agent-ops/GUIDE.md` 존재 여부 확인 -- [ ] `agent-ops/roadmap/ROADMAP.md`, `agent-ops/roadmap/current.md`, `agent-ops/roadmap/milestones/` 존재 여부 확인 -- [ ] README 안에 상세 로드맵, TODO, 마일스톤 체크리스트가 있는지 확인 - -## 실행 절차 - -1. **갱신 범위 결정** - - 요청에서 mode를 추론한다 - - README 전체 재작성보다 필요한 섹션만 수정한다 - - README가 심하게 낡았으면 구조 재정렬을 제안하고 진행한다 - -2. **현재 문서 구조 확인** - - README의 현재 섹션과 역할을 파악한다 - - GUIDE, roadmap, rules, skills 등 실제 존재하는 상세 문서만 링크 대상으로 삼는다 - - 설치/실행 명령은 manifest나 기존 문서에서 확인 가능한 경우에만 유지한다 - -3. **README 정리** - - 프로젝트 소개, 문제 정의, 핵심 아이디어, 빠른 시작, 구조, 문서 링크는 README에 유지한다 - - 긴 로드맵 본문은 Roadmap 섹션의 링크 허브로 축약한다 - - 마일스톤 체크리스트와 작업 상태는 README에서 제거하고 `agent-ops/roadmap/` 문서로 이동 또는 이동 필요 TODO로 남긴다 - - agent-ops 내부 규칙 전문은 README에 복사하지 않고 GUIDE/rules/skills로 연결한다 - -4. **Roadmap 섹션 정규화** - - roadmap 구조가 있으면 아래 형식으로 정리한다 - ```markdown - ## Roadmap - - 이 프로젝트의 장기 방향과 현재 마일스톤은 `agent-ops/roadmap/`에서 관리한다. - - - 전체 흐름: `agent-ops/roadmap/ROADMAP.md` - - 현재 작업 기준: `agent-ops/roadmap/current.md` - - 마일스톤별 작업 컨텍스트: `agent-ops/roadmap/milestones/` - ``` - - roadmap 구조가 없으면 create-roadmap 실행 후 분리할 수 있다고 짧게 안내한다 - -5. **결과 보고** - - 수정한 README 섹션 - - 분리하거나 축약한 로드맵/TODO 항목 - - 존재하지 않아 연결하지 않은 문서 - -## 실행 결과 검증 - -- [ ] README가 프로젝트 첫 진입점과 문서 허브 역할에 집중하는가 -- [ ] 상세 로드맵과 마일스톤 체크리스트가 README 본문에서 제거되거나 링크로 축약되었는가 -- [ ] 존재하지 않는 문서 링크를 추가하지 않았는가 -- [ ] 기존 README의 중요한 프로젝트 소개나 사용법을 이유 없이 삭제하지 않았는가 -- [ ] 확인하지 않은 설치/실행 명령을 새로 추가하지 않았는가 -- 검증 실패 시: 잘못 수정한 섹션만 되돌리거나 보완한다 - -## 출력 형식 - -```markdown -## 업데이트 완료 - -- README: README.md -- Mode: -- 수정 섹션: <섹션 목록> -- 연결 문서: - -## TODO 항목 - -- <확인이 필요한 항목> (해당 시) -``` - -## 금지 사항 - -- README가 없는데 새로 만들지 않는다. 이 경우 `create-readme`를 사용한다 -- 기존 README의 중요한 사용법이나 프로젝트 설명을 근거 없이 삭제하지 않는다 -- README를 상세 로드맵, 마일스톤, 작업 상태 관리 문서로 되돌리지 않는다 -- 확인하지 않은 설치/실행 명령이나 기능을 추가하지 않는다 -- agent-ops 내부 규칙이나 스킬 전문을 README에 복사하지 않는다 diff --git a/agent-ops/skills/common/update-roadmap/SKILL.md b/agent-ops/skills/common/update-roadmap/SKILL.md index c41a6f5..12f543c 100644 --- a/agent-ops/skills/common/update-roadmap/SKILL.md +++ b/agent-ops/skills/common/update-roadmap/SKILL.md @@ -1,7 +1,7 @@ --- name: update-roadmap version: 1.0.0 -description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 current.md와 Active Milestone 정의를 동기화하는 공통 스킬 +description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 current.md의 Default/Active Milestone 정의를 동기화하는 공통 스킬 --- # Update Roadmap @@ -9,19 +9,21 @@ description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 curr ## 목적 기존 `agent-ops/roadmap/` 구조를 현재 프로젝트 방향과 진행 상태에 맞게 갱신한다. -로드맵 전체를 매 작업마다 읽지 않도록 유지하면서, `current.md`와 Active Milestone 문서가 실제 작업 기준으로 동작하게 한다. +로드맵 전체를 매 작업마다 읽지 않도록 유지하면서, `current.md`의 Default Milestone과 Active Milestones 목록이 실제 작업 기준으로 동작하게 한다. ## 언제 호출할지 - 사용자가 "로드맵 업데이트", "마일스톤 갱신", "phase 변경", "현재 마일스톤 바꿔줘"라고 요청할 때 - Milestone 완료, 보류, 폐기, 신규 추가가 필요할 때 -- Active Milestone의 Goal, Scope, Required Features, Success Criteria가 달라졌을 때 +- Default Milestone 또는 Active Milestone의 Goal, Scope, Required Features, Success Criteria가 달라졌을 때 - 실제 구현 상태와 로드맵 파일이 어긋난 것 같아 동기화가 필요할 때 ## 입력 - `mode`: `status` / `milestone` / `phase` / `replan` / `sync` 중 하나 (선택, 요청에서 추론 가능) - `target-milestone`: 갱신할 Milestone ID 또는 이름 (선택) +- `default-milestone`: 기본 작업 초점으로 둘 Milestone ID 또는 이름 (선택) +- `active-milestones`: 동시에 Active 상태로 둘 Milestone ID 또는 이름 목록 (선택) - `change-summary`: 반영할 방향 변경 또는 진행 상황 요약 (선택) - `evidence`: 완료 판단에 사용할 파일, PR, 테스트, 커밋, 사용자 설명 (선택) @@ -31,7 +33,7 @@ description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 curr |------|-----------| | `status` | 기능 체크박스, Milestone 상태, 완료 기준만 갱신 | | `milestone` | Milestone Goal, Scope, 기능 목록, Success Criteria 수정 | -| `phase` | Active Phase 또는 Active Milestone 전환 | +| `phase` | Active Phase, Default Milestone, Active Milestones 전환 | | `replan` | 전체 Phase/Milestone 흐름 재구성 | | `sync` | 실제 프로젝트 상태와 로드맵 불일치 점검 후 보정 | @@ -39,7 +41,7 @@ description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 curr - [ ] `agent-ops/roadmap/ROADMAP.md` 존재 여부 확인 - [ ] `agent-ops/roadmap/current.md` 존재 여부 확인 -- [ ] `current.md`가 가리키는 Active Milestone 문서 존재 여부 확인 +- [ ] `current.md`가 가리키는 Default Milestone 문서와 Active Milestones 문서 존재 여부 확인 - [ ] `current.md`가 정해진 형식을 유지하는지 확인 - [ ] 로드맵 파일이 없으면 `create-roadmap` 스킬 사용을 안내하고 중단 - [ ] 완료 상태로 바꾸는 경우 사용자의 명시 또는 확인 가능한 evidence가 있는지 확인 @@ -49,12 +51,14 @@ description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 curr 1. **갱신 범위 결정** - 요청에서 mode와 target milestone을 추론한다 - `status` 갱신이면 `current.md`와 대상 Milestone 문서를 우선 읽는다 + - 요청이 Default Milestone과 맞지 않으면 `current.md`의 Active Milestones 목록에서 대상 Milestone을 찾는다 + - Active Milestones에도 맞지 않으면 `ROADMAP.md`의 Milestone 인덱스를 확인하고 사용자에게 진행/전환 여부를 확인한다 - Phase 전환, Milestone 추가/삭제, 순서 변경, 전체 재계획이면 `ROADMAP.md`도 읽는다 - 불필요하게 모든 Milestone 문서를 읽지 않는다 2. **현재 로드맵 상태 파악** - `ROADMAP.md`의 전체 Goal, Phase 개요, Milestone 인덱스를 확인한다 - - `current.md`의 Active Phase와 Active Milestone 포인터를 확인한다 + - `current.md`의 Active Phase, Default Milestone, Active Milestones 포인터를 확인한다 - 대상 Milestone 문서의 Goal, Scope, Required Features, Success Criteria, Non-Goals를 확인한다 3. **변경 내용 검증** @@ -64,13 +68,17 @@ description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 curr 4. **로드맵 파일 갱신** - `ROADMAP.md`는 전체 Goal, Phase 개요, Milestone 인덱스, 현재 위치가 바뀔 때만 수정한다 - - `current.md`는 Active Phase 또는 Active Milestone이 바뀔 때 아래 형식으로 수정한다 + - `current.md`는 Active Phase, Default Milestone, Active Milestones 목록이 바뀔 때 아래 형식으로 수정한다 ```markdown # Current Roadmap Context - Active Phase: - - Active Milestone: - - Active Milestone File: agent-ops/roadmap/milestones/MNN-.md + - Default Milestone: + - Default Milestone File: agent-ops/roadmap/milestones/MNN-.md + + ## Active Milestones + + - : agent-ops/roadmap/milestones/MNN-.md ``` - Milestone 문서는 해당 Milestone의 Goal, Scope, Required Features, Success Criteria, Non-Goals, Context for Work가 바뀔 때 수정한다 - 상태 값은 `Planned`, `Active`, `Done`, `Paused`, `Dropped` 중 하나만 사용한다 @@ -89,8 +97,8 @@ description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 curr ## 실행 결과 검증 -- [ ] `current.md`의 Active Milestone 경로가 실제 파일을 가리키는가 -- [ ] `current.md`가 `# Current Roadmap Context`, `Active Phase`, `Active Milestone`, `Active Milestone File` 형식을 유지하는가 +- [ ] `current.md`의 Default Milestone과 Active Milestones 경로가 실제 파일을 가리키는가 +- [ ] `current.md`가 `# Current Roadmap Context`, `Active Phase`, `Default Milestone`, `Default Milestone File`, `Active Milestones` 형식을 유지하는가 - [ ] `ROADMAP.md`의 현재 위치와 Milestone 인덱스가 `current.md`와 일치하는가 - [ ] 대상 Milestone 문서의 상태가 `ROADMAP.md`의 Milestone 인덱스 상태와 일치하는가 - [ ] 완료 처리한 기능에 사용자 설명 또는 확인 가능한 evidence가 있는가 @@ -111,7 +119,8 @@ description: 기존 Goal, Phase, Milestone 기반 로드맵을 갱신하고 curr ## 변경 사항 - Phase: <변경 없음 | 이전 → 이후> -- Active Milestone: <변경 없음 | 이전 → 이후> +- Default Milestone: <변경 없음 | 이전 → 이후> +- Active Milestones: <변경 없음 | 추가/제거 요약> - Status: <변경 없음 | 이전 → 이후> - Required Features: <추가/수정/완료/제거 요약>