sync: from iop v1.1.20
This commit is contained in:
parent
0b1ecf0554
commit
5a247c36a2
14 changed files with 118 additions and 428 deletions
|
|
@ -1 +1 @@
|
|||
1.1.19
|
||||
1.1.20
|
||||
|
|
|
|||
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -13,6 +13,5 @@
|
|||
- domain rule 생성
|
||||
- skill 생성
|
||||
- 로드맵/마일스톤 생성·갱신
|
||||
- README 생성·갱신
|
||||
- git commit / push
|
||||
- agent-ops 업데이트 / 진입 파일 재적용
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
# <project-name>
|
||||
|
||||
## 개요
|
||||
|
||||
## 왜 필요한가
|
||||
|
||||
## 핵심 아이디어
|
||||
|
||||
## 빠른 시작
|
||||
|
||||
## 구조
|
||||
|
||||
## 문서
|
||||
|
||||
## 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
|
||||
- 포함 섹션: <섹션 목록>
|
||||
- 연결 문서: <GUIDE/roadmap/rules 등>
|
||||
|
||||
## TODO 항목
|
||||
|
||||
- <확인이 필요한 항목> (해당 시)
|
||||
```
|
||||
|
||||
## 금지 사항
|
||||
|
||||
- 기존의 의미 있는 README를 덮어쓰지 않는다
|
||||
- README를 상세 로드맵, 마일스톤, 작업 상태 관리 문서로 사용하지 않는다
|
||||
- 확인하지 않은 설치/실행 명령을 추측으로 넣지 않는다
|
||||
- agent-ops 내부 규칙이나 스킬 전문을 README에 복사하지 않는다
|
||||
- 프로젝트 특화 문서 생성 요청인데 `agent-ops/skills/common/`을 수정하지 않는다
|
||||
|
|
@ -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-<milestone-slug>.md` | 일반 작업 시 읽는 Milestone 단위 Goal, Scope, 기능 목록, Non-Goals |
|
||||
|
||||
### current.md 형식
|
||||
|
|
@ -51,10 +52,16 @@ agent-ops/
|
|||
# Current Roadmap Context
|
||||
|
||||
- Active Phase: <phase-name>
|
||||
- Active Milestone: <MNN milestone-name>
|
||||
- Active Milestone File: agent-ops/roadmap/milestones/MNN-<milestone-slug>.md
|
||||
- Default Milestone: <MNN milestone-name>
|
||||
- Default Milestone File: agent-ops/roadmap/milestones/MNN-<milestone-slug>.md
|
||||
|
||||
## Active Milestones
|
||||
|
||||
- <MNN milestone-name>: agent-ops/roadmap/milestones/MNN-<milestone-slug>.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-<milestone-slug>.md
|
||||
- Default Milestone: agent-ops/roadmap/milestones/MNN-<milestone-slug>.md
|
||||
- Active Milestones: <N개>
|
||||
- Project Rules 업데이트: <추가함 | 이미 존재함 | rules/project/rules.md 없음>
|
||||
|
||||
## 현재 위치
|
||||
|
||||
- Phase: <phase-name>
|
||||
- Milestone: <MNN milestone-name>
|
||||
- Default Milestone: <MNN milestone-name>
|
||||
|
||||
## TODO 항목
|
||||
|
||||
|
|
|
|||
|
|
@ -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-name>/SKILL.md` 파일이 생성되었는가
|
||||
- [ ] 생성된 파일이 `skill-template.md`의 필수 섹션(목적, 언제 호출할지, 실행 절차, 실행 결과 검증, 출력 형식, 금지 사항)을 포함하는가
|
||||
- [ ] frontmatter에 name, version, description이 올바르게 기재되었는가
|
||||
- [ ] 공통 스킬이면 `agent-ops/skills/common/router.md`, 프로젝트 스킬이면 `agent-ops/rules/project/rules.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/<domain>/rules.md` | 스크립트 실행 후 에이전트가 필요한 최소 도메인만 분석해 생성 |
|
||||
| `agent-ops/rules/project/rules.md` | 프로젝트 분석 후 생성 |
|
||||
| `agent-ops/rules/project/domain/<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 <target_directory>
|
||||
|
|
@ -193,29 +169,31 @@ common/rules.md와 내용이 중복되지 않도록 한다.
|
|||
1. **상태 판별**
|
||||
- 프로젝트 구조, 모듈 경계, agent-ops 파일 유무를 분석하여 신규/운영중을 판별한다
|
||||
|
||||
2. **공통 scaffold 생성**
|
||||
- `./agent-ops/bin/init-agent-ops.sh <target_directory>`를 실행한다
|
||||
- 스크립트 결과로 진입 파일, 공통 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로 둘 파일
|
||||
|
||||
### 도메인 제안
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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` |
|
||||
|
|
|
|||
|
|
@ -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=<name-or-path>` 또는 명시 target을 사용한다
|
||||
3. **있으면**: `agent-ops/bin/sync.sh --pull` 또는 `agent-ops/bin/sync.sh --pull <source-repo>` 실행
|
||||
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 <target>
|
||||
|
|
@ -29,8 +28,8 @@ agent-ops/bin/sync.sh --pull <target>
|
|||
## 실행 결과 검증
|
||||
|
||||
- [ ] 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`와 일치하는가
|
||||
|
||||
## 금지 사항
|
||||
|
||||
|
|
|
|||
|
|
@ -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=<name-or-path>` 또는 명시 target을 사용한다
|
||||
3. **있으면**: `agent-ops/bin/sync.sh` 실행 또는 `agent-ops/bin/sync.sh <source-repo>` 실행
|
||||
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 <target>` 실행
|
||||
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 공통 관리 경로와 진입 파일로 제한되었는가
|
||||
|
||||
## 금지 사항
|
||||
|
|
|
|||
|
|
@ -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: <refresh | split-roadmap | link-docs | structure>
|
||||
- 수정 섹션: <섹션 목록>
|
||||
- 연결 문서: <GUIDE/roadmap/rules 등>
|
||||
|
||||
## TODO 항목
|
||||
|
||||
- <확인이 필요한 항목> (해당 시)
|
||||
```
|
||||
|
||||
## 금지 사항
|
||||
|
||||
- README가 없는데 새로 만들지 않는다. 이 경우 `create-readme`를 사용한다
|
||||
- 기존 README의 중요한 사용법이나 프로젝트 설명을 근거 없이 삭제하지 않는다
|
||||
- README를 상세 로드맵, 마일스톤, 작업 상태 관리 문서로 되돌리지 않는다
|
||||
- 확인하지 않은 설치/실행 명령이나 기능을 추가하지 않는다
|
||||
- agent-ops 내부 규칙이나 스킬 전문을 README에 복사하지 않는다
|
||||
|
|
@ -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: <phase-name>
|
||||
- Active Milestone: <MNN milestone-name>
|
||||
- Active Milestone File: agent-ops/roadmap/milestones/MNN-<milestone-slug>.md
|
||||
- Default Milestone: <MNN milestone-name>
|
||||
- Default Milestone File: agent-ops/roadmap/milestones/MNN-<milestone-slug>.md
|
||||
|
||||
## Active Milestones
|
||||
|
||||
- <MNN milestone-name>: agent-ops/roadmap/milestones/MNN-<milestone-slug>.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: <추가/수정/완료/제거 요약>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue