diff --git a/.clinerules b/.clinerules index ff8588e..c04484d 100644 --- a/.clinerules +++ b/.clinerules @@ -2,3 +2,4 @@ - 이 프로젝트에서 작업을 하나 완료할 때마다 `agent-ops/bin/bump-version.sh`를 실행해 `agent-ops/.version`을 한 단계 올린다. 예: `next="$(agent-ops/bin/bump-version.sh "$(cat agent-ops/.version)")" && printf '%s\n' "$next" > agent-ops/.version` +- 단, 현재 프로젝트 루트에 `.agent-ops-source`가 있고 다른 프로젝트로 `agent-ops push 동기화`만 수행하는 작업에서는 버전을 올리지 않는다. 현재 `agent-ops/.version` 값을 그대로 전파한다. diff --git a/.cursorrules b/.cursorrules index ff8588e..c04484d 100644 --- a/.cursorrules +++ b/.cursorrules @@ -2,3 +2,4 @@ - 이 프로젝트에서 작업을 하나 완료할 때마다 `agent-ops/bin/bump-version.sh`를 실행해 `agent-ops/.version`을 한 단계 올린다. 예: `next="$(agent-ops/bin/bump-version.sh "$(cat agent-ops/.version)")" && printf '%s\n' "$next" > agent-ops/.version` +- 단, 현재 프로젝트 루트에 `.agent-ops-source`가 있고 다른 프로젝트로 `agent-ops push 동기화`만 수행하는 작업에서는 버전을 올리지 않는다. 현재 `agent-ops/.version` 값을 그대로 전파한다. diff --git a/AGENTS.md b/AGENTS.md index 04f64db..c04484d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,4 +2,4 @@ - 이 프로젝트에서 작업을 하나 완료할 때마다 `agent-ops/bin/bump-version.sh`를 실행해 `agent-ops/.version`을 한 단계 올린다. 예: `next="$(agent-ops/bin/bump-version.sh "$(cat agent-ops/.version)")" && printf '%s\n' "$next" > agent-ops/.version` -- 단, `agentic-framework` 원본에서 다른 프로젝트로 `agent-ops push 동기화`만 수행하는 작업에서는 버전을 올리지 않는다. 현재 `agent-ops/.version` 값을 그대로 전파한다. +- 단, 현재 프로젝트 루트에 `.agent-ops-source`가 있고 다른 프로젝트로 `agent-ops push 동기화`만 수행하는 작업에서는 버전을 올리지 않는다. 현재 `agent-ops/.version` 값을 그대로 전파한다. diff --git a/CLAUDE.md b/CLAUDE.md index ff8588e..c04484d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,3 +2,4 @@ - 이 프로젝트에서 작업을 하나 완료할 때마다 `agent-ops/bin/bump-version.sh`를 실행해 `agent-ops/.version`을 한 단계 올린다. 예: `next="$(agent-ops/bin/bump-version.sh "$(cat agent-ops/.version)")" && printf '%s\n' "$next" > agent-ops/.version` +- 단, 현재 프로젝트 루트에 `.agent-ops-source`가 있고 다른 프로젝트로 `agent-ops push 동기화`만 수행하는 작업에서는 버전을 올리지 않는다. 현재 `agent-ops/.version` 값을 그대로 전파한다. diff --git a/GEMINI.md b/GEMINI.md index ff8588e..c04484d 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -2,3 +2,4 @@ - 이 프로젝트에서 작업을 하나 완료할 때마다 `agent-ops/bin/bump-version.sh`를 실행해 `agent-ops/.version`을 한 단계 올린다. 예: `next="$(agent-ops/bin/bump-version.sh "$(cat agent-ops/.version)")" && printf '%s\n' "$next" > agent-ops/.version` +- 단, 현재 프로젝트 루트에 `.agent-ops-source`가 있고 다른 프로젝트로 `agent-ops push 동기화`만 수행하는 작업에서는 버전을 올리지 않는다. 현재 `agent-ops/.version` 값을 그대로 전파한다. diff --git a/README.md b/README.md index b665ae5..00a6f5f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ AI 에이전트가 매 작업마다 필요한 컨텍스트만 읽도록 `agent-o 이 저장소는 `agent-ops/` 공통 파일의 원본 저장소입니다. 루트의 `.agent-ops-source` 마커가 있으므로 공통 규칙, 공통 스킬, 동기화 스크립트는 이 저장소에서 수정하고 다른 프로젝트로 배포합니다. -현재 프레임워크 버전은 `agent-ops/.version`에 기록되며, 이 README를 갱신한 시점의 버전은 `1.1.55`입니다. 이 저장소는 애플리케이션 런타임이 아니라 문서와 셸 스크립트 중심의 프레임워크라서 별도의 빌드나 테스트 설정 파일은 없습니다. +현재 프레임워크 버전은 `agent-ops/.version`에 기록되며, 이 README를 갱신한 시점의 버전은 `1.1.68`입니다. 이 저장소는 애플리케이션 런타임이 아니라 문서와 셸 스크립트 중심의 프레임워크라서 별도의 빌드나 테스트 설정 파일은 없습니다. ## 빠른 시작 @@ -31,12 +31,12 @@ agent-ops/skills/common/init-agent-ops/SKILL.md 를 읽고 실행해줘. | 목적 | 명령 | 비고 | |------|------|------| | 공통 scaffold 배치 | `bash agent-ops/bin/init-agent-ops.sh /path/to/target-project` | source 저장소에서 대상 프로젝트로 공통 파일과 진입 파일을 배치 | -| 전체 sibling 프로젝트로 push 동기화 | `agent-ops/bin/sync.sh` | `agentic-framework`에서 실행하면 상위 폴더의 agent-ops 적용 프로젝트 전체에 반영 | +| 전체 sibling 프로젝트로 push 동기화 | `agent-ops/bin/sync.sh` | `.agent-ops-source`가 있는 원본 repo에서 실행하면 상위 폴더의 agent-ops 적용 프로젝트 전체에 반영 | | 특정 프로젝트로 push 동기화 | `agent-ops/bin/sync.sh ` | 폴더명, 상대경로, 절대경로 사용 가능 | -| 대상 프로젝트에서 framework로 변경 올리기 | `agent-ops/bin/sync.sh agentic-framework` | 일반 프로젝트에서 실행 | -| framework에서 대상 프로젝트로 내려받기 | `agent-ops/bin/sync.sh --pull agentic-framework` | 일반 프로젝트에서 실행 | +| 대상 프로젝트에서 공통 원본 repo로 변경 올리기 | `agent-ops/bin/sync.sh agentic-framework` | 일반 프로젝트에서 실행 | +| 공통 원본 repo에서 대상 프로젝트로 내려받기 | `agent-ops/bin/sync.sh --pull agentic-framework` | 일반 프로젝트에서 실행 | | 버전 patch 증가 계산 | `agent-ops/bin/bump-version.sh ` | 결과 버전만 stdout으로 출력 | -| 작업 완료 버전 증가 | `next="$(agent-ops/bin/bump-version.sh "$(cat agent-ops/.version)")" && printf '%s\n' "$next" > agent-ops/.version` | 이 프로젝트에서 작업을 하나 완료할 때마다 실행. 단, agentic-framework 원본에서 다른 프로젝트로 agent-ops push 동기화만 수행할 때는 실행하지 않음 | +| 작업 완료 버전 증가 | `next="$(agent-ops/bin/bump-version.sh "$(cat agent-ops/.version)")" && printf '%s\n' "$next" > agent-ops/.version` | 이 프로젝트에서 작업을 하나 완료할 때마다 실행. 단, 현재 프로젝트 루트에 `.agent-ops-source`가 있고 다른 프로젝트로 agent-ops push 동기화만 수행할 때는 실행하지 않음 | ## 구조 @@ -136,8 +136,8 @@ agent-ops는 AI-first 작업 프레임워크입니다. 규칙, 스킬, 로드맵 | `plan` | 구현 작업용 `PLAN-*-G??.md`와 `CODE_REVIEW-*-G??.md` 초안 생성 | | `code-review` | plan-code-review 루프의 리뷰, 판정, archive, 후속 plan 생성 | | `commit-push` | 변경 사항을 한국어 커밋 메시지로 커밋하고 푸시 | -| `sync-pull` | agentic-framework에서 현재 프로젝트로 agent-ops 내려받기 | -| `sync-push` | 현재 agent-ops를 agentic-framework 또는 대상 프로젝트로 push 동기화 | +| `sync-pull` | 공통 원본 repo에서 현재 프로젝트로 agent-ops 내려받기 | +| `sync-push` | 현재 agent-ops를 공통 원본 repo 또는 대상 프로젝트로 push 동기화 | ## 로드맵 @@ -165,9 +165,9 @@ Phase와 Milestone에는 순번을 강제하지 않습니다. 진행 순서는 ` 2. 에이전트에게 `agent-ops/skills/common/init-agent-ops/SKILL.md` 실행을 요청합니다. 3. 생성된 `rules/project/rules.md`와 도메인 규칙을 확인하고 보완합니다. 4. 반복 작업은 공통 스킬 또는 프로젝트 스킬로 정의합니다. -5. 공통 파일 변경은 agentic-framework에서 관리하고 `sync-push` / `sync-pull`로 동기화합니다. +5. 공통 파일 변경은 `.agent-ops-source`가 있는 공통 원본 repo에서 관리하고 `sync-push` / `sync-pull`로 동기화합니다. -초기화와 framework에서 일반 프로젝트로 내려가는 동기화는 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`를 에이전트가 기본적으로 읽지 않도록 각 도구별 ignore 또는 permission 파일도 함께 보강합니다. 단, `agent-ops/roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read/glob deny가 아니라 ignore 또는 watcher ignore 기준으로만 관리합니다. +초기화와 `.agent-ops-source`가 있는 공통 원본 repo에서 일반 프로젝트로 내려가는 동기화는 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`를 에이전트가 기본적으로 읽지 않도록 각 도구별 ignore 또는 permission 파일도 함께 보강합니다. 단, `agent-ops/roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read/glob deny가 아니라 ignore 또는 watcher ignore 기준으로만 관리합니다. ## 동기화 흐름 @@ -175,20 +175,20 @@ Phase와 Milestone에는 순번을 강제하지 않습니다. 진행 순서는 ` | 실행 위치 | 명령 | 방향 | |-----------|------|------| -| `agentic-framework` | `agent-ops/bin/sync.sh` | 원본에서 sibling 프로젝트 전체로 push | -| `agentic-framework` | `agent-ops/bin/sync.sh ` | 원본에서 특정 대상 프로젝트로 push | -| 일반 프로젝트 | `agent-ops/bin/sync.sh` | 현재 프로젝트의 공통 변경을 sibling `agentic-framework`로 push | -| 일반 프로젝트 | `agent-ops/bin/sync.sh --pull agentic-framework` | `agentic-framework` 공통 파일을 현재 프로젝트로 pull | +| 공통 원본 repo | `agent-ops/bin/sync.sh` | 원본에서 sibling 프로젝트 전체로 push | +| 공통 원본 repo | `agent-ops/bin/sync.sh ` | 원본에서 특정 대상 프로젝트로 push | +| 일반 프로젝트 | `agent-ops/bin/sync.sh` | 현재 프로젝트의 공통 변경을 sibling 공통 원본 repo로 push | +| 일반 프로젝트 | `agent-ops/bin/sync.sh --pull agentic-framework` | 공통 원본 repo의 공통 파일을 현재 프로젝트로 pull | -push 대상은 `agent-ops/.version`, `agent-ops/bin`, `agent-ops/rules/common`, `agent-ops/skills/common`, `entry-files.sh`에 정의된 진입 파일로 제한됩니다. 단, framework에서 일반 프로젝트로 내려보내는 push에서는 대상 프로젝트의 AI ignore / permission 파일을 덮어쓰지 않고 누락된 표준 설정만 보강하며, 버전을 올리지 않고 현재 `agent-ops/.version` 값을 그대로 전파합니다. 일반 프로젝트에서 framework로 올리는 push에서는 AI ignore / permission 파일을 보강하거나 stage하지 않으며, 공통 변경이 있으면 버전을 한 단계 올립니다. +push 대상은 `agent-ops/.version`, `agent-ops/bin`, `agent-ops/rules/common`, `agent-ops/skills/common`, `entry-files.sh`에 정의된 진입 파일로 제한됩니다. 단, `.agent-ops-source`가 있는 공통 원본 repo에서 일반 프로젝트로 내려보내는 push에서는 대상 프로젝트의 AI ignore / permission 파일을 덮어쓰지 않고 누락된 표준 설정만 보강하며, 버전을 올리지 않고 현재 `agent-ops/.version` 값을 그대로 전파합니다. 일반 프로젝트에서 공통 원본 repo로 올리는 push에서는 AI ignore / permission 파일을 보강하거나 stage하지 않으며, 공통 변경이 있으면 버전을 한 단계 올립니다. ## 관리 원칙 -- 공통 파일은 agentic-framework에서 수정합니다. +- 공통 파일은 `.agent-ops-source`가 있는 공통 원본 repo에서 수정합니다. - 대상 프로젝트에서는 `rules/project/`, `rules/private/`, `skills/project/`를 프로젝트에 맞게 수정합니다. - `agent-ops/rules/common/`, `agent-ops/skills/common/`, `agent-ops/bin/`은 공통 관리 영역입니다. - 공통 파일 변경 후에는 `agent-ops/.version`을 함께 관리하고 동기화합니다. -- 이 프로젝트에서 작업을 하나 완료할 때마다 `agent-ops/bin/bump-version.sh`로 `agent-ops/.version`을 한 단계 올립니다. 단, agentic-framework 원본에서 다른 프로젝트로 agent-ops push 동기화만 수행하는 작업에서는 버전을 올리지 않습니다. +- 이 프로젝트에서 작업을 하나 완료할 때마다 `agent-ops/bin/bump-version.sh`로 `agent-ops/.version`을 한 단계 올립니다. 단, 현재 프로젝트 루트에 `.agent-ops-source`가 있고 다른 프로젝트로 agent-ops push 동기화만 수행하는 작업에서는 버전을 올리지 않습니다. - `agent-ops/rules/private/`는 개인 규칙 영역이며 대상 프로젝트의 `.gitignore`에 추가됩니다. ## 작업 맥락 diff --git a/agent-ops/.version b/agent-ops/.version index 0516ac1..03f7611 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.65 +1.1.68 diff --git a/agent-ops/bin/sync.sh b/agent-ops/bin/sync.sh index 5f45045..a1a7592 100755 --- a/agent-ops/bin/sync.sh +++ b/agent-ops/bin/sync.sh @@ -202,10 +202,10 @@ usage() { echo "사용법: $0 [--pull] [target]" echo "" echo " (기본) push 동기화" - echo " --pull target(agentic-framework) → 현재 프로젝트 로 pull" + echo " --pull target(공통 원본 repo, 기본 agentic-framework) → 현재 프로젝트 로 pull" echo "" echo " target: 폴더명 (동일 레벨 탐색) | 상대경로 | 절대경로" - echo " agentic-framework에서 target 생략 시 상위 폴더의 agent-ops 적용 프로젝트 전체 동기화" + echo " .agent-ops-source 원본 repo에서 target 생략 시 상위 폴더의 agent-ops 적용 프로젝트 전체 동기화" } # ───────────────────────────────────────────────────────────────────────────── @@ -220,7 +220,7 @@ TARGET_INPUT="${1:-}" SRC_AO="$AGENT_OPS_DIR" IS_FRAMEWORK="$([[ -f "$PROJECT_ROOT/.agent-ops-source" ]] && echo "1" || echo "0")" -# ── pull 모드: agentic-framework → 현재 프로젝트 ───────────────────────────── +# ── pull 모드: .agent-ops-source 원본 repo → 현재 프로젝트 ─────────────────── if [[ "$PULL_MODE" == "1" ]]; then if [[ -z "$TARGET_INPUT" ]]; then usage; exit 1 @@ -233,17 +233,17 @@ if [[ "$PULL_MODE" == "1" ]]; then DST_AO="$TARGET/agent-ops" if [[ "$IS_FRAMEWORK" == "1" ]]; then - echo -e "${RED}Error: agentic-framework에서는 --pull을 사용할 수 없습니다.${RESET}" + echo -e "${RED}Error: .agent-ops-source가 있는 공통 원본 repo에서는 --pull을 사용할 수 없습니다.${RESET}" exit 1 fi if [[ ! -f "$TARGET/.agent-ops-source" ]]; then - echo -e "${RED}Error: target이 agentic-framework가 아닙니다 (.agent-ops-source 없음)${RESET}" + echo -e "${RED}Error: target이 공통 원본 repo가 아닙니다 (.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 | framework 버전: $DST_VER" + echo " 현재 버전: $SRC_VER | 원본 버전: $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" @@ -253,8 +253,10 @@ if [[ "$PULL_MODE" == "1" ]]; then exit 0 fi -# ── agentic-framework에서 다른 프로젝트로 ──────────────────────────────────── +# ── .agent-ops-source 원본 repo에서 다른 프로젝트로 ────────────────────────── if [[ "$IS_FRAMEWORK" == "1" ]]; then + SRC_VER="$(cat "$SRC_AO/.version" 2>/dev/null || echo "0.0.0")" + echo " .agent-ops-source 감지: push 동기화에서는 버전 bump 없이 v$SRC_VER 그대로 전파" if [[ -n "$TARGET_INPUT" ]]; then TARGET="$(resolve_target "$TARGET_INPUT")" if [[ -z "$TARGET" ]]; then @@ -280,7 +282,7 @@ if [[ "$IS_FRAMEWORK" == "1" ]]; then exit 0 fi -# ── 일반 프로젝트에서 agentic-framework로 (push) ───────────────────────────── +# ── 일반 프로젝트에서 .agent-ops-source 원본 repo로 (push) ─────────────────── if [[ -z "$TARGET_INPUT" ]]; then TARGET_INPUT="agentic-framework" fi @@ -295,13 +297,13 @@ DST_AO="$TARGET/agent-ops" echo "▶ $(basename "$PROJECT_ROOT") → $(basename "$TARGET")" if [[ ! -f "$TARGET/.agent-ops-source" ]]; then - echo -e "${RED}Error: target이 agentic-framework가 아닙니다 (.agent-ops-source 없음)${RESET}" + echo -e "${RED}Error: target이 공통 원본 repo가 아닙니다 (.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 | framework 버전: $DST_VER" +echo " 현재 버전: $SRC_VER | 원본 버전: $DST_VER" COMMON_CHANGED="1" if ! common_differs "$SRC_AO" "$DST_AO"; then @@ -309,7 +311,7 @@ if ! common_differs "$SRC_AO" "$DST_AO"; then fi if [[ "$COMMON_CHANGED" == "1" ]] && version_gt "$DST_VER" "$SRC_VER"; then - echo -e "${RED}⚠ 버전 충돌: framework($DST_VER) > current($SRC_VER)${RESET}" + echo -e "${RED}⚠ 버전 충돌: 원본 repo($DST_VER) > current($SRC_VER)${RESET}" echo -e "${YELLOW} 먼저 sync-pull로 내려받은 뒤 재시도하세요.${RESET}" exit 1 fi diff --git a/agent-ops/rules/common/philosophy.md b/agent-ops/rules/common/philosophy.md index 2c38975..29dd29d 100644 --- a/agent-ops/rules/common/philosophy.md +++ b/agent-ops/rules/common/philosophy.md @@ -46,6 +46,17 @@ - code-review는 PASS 산출물을 만들고 완료 이벤트 메타데이터를 남긴다. - roadmap 반영 여부와 호출 타이밍은 런타임이 완료 이벤트를 보고 판단한다. +## 스킬 그룹 경계 + +- 스킬 그룹은 자기 라이프사이클 안에서만 강한 계약을 가진다. +- 스킬 그룹끼리는 다른 그룹의 내부 절차를 자동 호출하거나 전제하지 않는다. +- 그룹 간 연결은 사용자 명령, 런타임 이벤트, 또는 판별 가능한 파일 상태로만 한다. +- 구현 작업 그룹은 `plan`과 `code-review`의 PLAN/CODE_REVIEW 루프를 소유한다. +- 로드맵 그룹은 `create-roadmap`과 `update-roadmap`의 Phase/Milestone 상태, 구현 잠금, archive 흐름을 소유한다. +- `code-review`가 남긴 PASS 완료 이벤트를 로드맵에 반영할지, 언제 반영할지는 런타임이 판단하고 `update-roadmap` 흐름으로 넘긴다. +- cross-project 잠금이나 `.agent-roadmap-sync` 같은 workspace-level 상태는 로드맵 그룹과 런타임의 책임이다. `plan`과 `code-review`에 의존성 동기화 규칙을 넣지 않는다. +- 새 스킬을 만들기 전에 기존 그룹의 자연스러운 입력, 상태 전환, 후처리 지점에 넣을 수 있는지 먼저 본다. 다만 다른 그룹 경계를 침범해야 하면 런타임 이벤트로 분리한다. + ## 로드맵 - roadmap은 장기 기억이고, agent-task는 실행 상태다. diff --git a/agent-ops/skills/common/sync-push/SKILL.md b/agent-ops/skills/common/sync-push/SKILL.md index c0274d1..67fe9bf 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를 agentic-framework로 올리거나, agentic-framework의 공통 agent-ops를 대상 프로젝트 또는 상위 폴더의 agent-ops 적용 프로젝트 전체로 push하고 푸시한다. "agent-ops 싱크해", "agent-ops 동기화해", "agentic-framework에 올려줘" 요청 시 사용한다. +description: 현재 프로젝트의 agent-ops를 공통 원본 repo로 올리거나, `.agent-ops-source`가 있는 공통 원본 repo의 agent-ops를 대상 프로젝트 또는 상위 폴더의 agent-ops 적용 프로젝트 전체로 push하고 푸시한다. "agent-ops 싱크해", "agent-ops 동기화해", "agentic-framework에 올려줘" 요청 시 사용한다. --- # sync-push @@ -9,15 +9,15 @@ description: 현재 프로젝트의 agent-ops를 agentic-framework로 올리거 `agent-ops/bin/sync.sh`를 호출해 agent-ops 공통 파일을 push 방향으로 동기화한다. -- 일반 프로젝트에서는 현재 프로젝트 → agentic-framework 방향으로 올린다. -- agentic-framework 원본 프로젝트에서는 agentic-framework → 대상 프로젝트 방향으로 보내고, 대상 repo를 commit/push 한다. -- agentic-framework 원본 프로젝트에서 대상이 명시되지 않으면 현재 프로젝트의 상위 폴더에 있는 agent-ops 적용 프로젝트 전체로 보낸다. +- 일반 프로젝트에서는 현재 프로젝트 → `.agent-ops-source`가 있는 공통 원본 repo 방향으로 올린다. +- `.agent-ops-source`가 있는 공통 원본 repo에서는 원본 repo → 대상 프로젝트 방향으로 보내고, 대상 repo를 commit/push 한다. +- 공통 원본 repo에서 대상이 명시되지 않으면 현재 프로젝트의 상위 폴더에 있는 agent-ops 적용 프로젝트 전체로 보낸다. ## 버전 정책 -- `agentic-framework` 원본 프로젝트에서 대상 프로젝트로 전파하는 push 동기화는 버전을 올리지 않는다. -- 이 경우 현재 `agentic-framework`의 `agent-ops/.version` 값을 그대로 대상 repo에 전파한다. -- 일반 프로젝트에서 `agentic-framework`로 공통 변경을 올리는 push 동기화는 기존처럼 `sync.sh`가 버전을 한 단계 올린다. +- 현재 프로젝트 루트에 `.agent-ops-source`가 있으면, 대상 프로젝트로 전파하는 push 동기화는 버전을 올리지 않는다. +- 이 경우 현재 공통 원본 repo의 `agent-ops/.version` 값을 그대로 대상 repo에 전파한다. +- 일반 프로젝트에서 `.agent-ops-source`가 있는 공통 원본 repo로 공통 변경을 올리는 push 동기화는 기존처럼 `sync.sh`가 버전을 한 단계 올린다. ## 언제 호출할지 @@ -29,23 +29,23 @@ description: 현재 프로젝트의 agent-ops를 agentic-framework로 올리거 ### 현 프로젝트가 일반 프로젝트인 경우 (`.agent-ops-source` 없음) -1. 현재 프로젝트의 **상위 폴더(`../`)** 에 `agentic-framework` 폴더가 있는지 확인한다 (현재 폴더 내부가 아님) +1. 현재 프로젝트의 **상위 폴더(`../`)** 에 `.agent-ops-source`가 있는 공통 원본 repo가 있는지 확인한다. 기본 후보는 `agentic-framework`다. 2. **있으면**: `agent-ops/bin/sync.sh` 실행 또는 `agent-ops/bin/sync.sh agentic-framework` 실행 3. **없으면**: 사용자에게 agentic-framework 경로 입력을 안내하고, 입력받은 경로로 실행 4. 공통 관리 파일 변경 없이 `agent-ops/.version`만 다른 경우 `sync.sh`는 버전 갱신과 commit/push를 건너뛴다 -5. 공통 관리 파일 변경이 있으면 `sync.sh`가 버전을 한 단계 올리고 현재 프로젝트와 `agentic-framework`에 같은 버전을 반영한다 -6. 일반 프로젝트에서 agentic-framework로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다 +5. 공통 관리 파일 변경이 있으면 `sync.sh`가 버전을 한 단계 올리고 현재 프로젝트와 공통 원본 repo에 같은 버전을 반영한다 +6. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다 -### 현 프로젝트가 agentic-framework인 경우 (`.agent-ops-source` 있음) +### 현 프로젝트가 공통 원본 repo인 경우 (`.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`는 현재 agentic-framework의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다 +5. `sync.sh`는 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다 6. 적용 후 각 대상 repo에서 agent-ops 공통 관리 경로(`rules/common/rules.md` 포함), 진입 파일, AI ignore / permission 파일을 stage 하여 commit/push 한다 7. AI ignore / permission 파일은 대상 프로젝트의 기존 내용을 덮어쓰지 않고, Agent-Ops 관리 block 또는 Agent-Ops 전용 permission key만 보강한다 -8. 이 과정에서는 버전을 새로 올리지 않고 현재 agentic-framework의 `agent-ops/.version` 값을 그대로 대상 프로젝트에 반영한다 +8. 이 과정에서는 버전을 새로 올리지 않고 현재 공통 원본 repo의 `agent-ops/.version` 값을 그대로 대상 프로젝트에 반영한다 덮어쓰기 대상은 `init-agent-ops` 초기 세팅과 동일하며, 실제 목록은 `agent-ops/bin/entry-files.sh`의 `AGENT_OPS_ENTRY_FILES`를 단일 기준으로 사용한다. @@ -61,8 +61,8 @@ description: 현재 프로젝트의 agent-ops를 agentic-framework로 올리거 ## AI Ignore / Permission 재적용 -- 이 절차는 agentic-framework 원본 프로젝트에서 대상 프로젝트로 push할 때와 `--pull`로 agentic-framework에서 현재 프로젝트로 내려받을 때만 적용한다. -- 일반 프로젝트에서 agentic-framework로 올리는 push에서는 AI ignore / permission 파일을 수정하거나 stage하지 않는다. +- 이 절차는 `.agent-ops-source`가 있는 공통 원본 repo에서 대상 프로젝트로 push할 때와 `--pull`로 공통 원본 repo에서 현재 프로젝트로 내려받을 때만 적용한다. +- 일반 프로젝트에서 공통 원본 repo로 올리는 push에서는 AI ignore / permission 파일을 수정하거나 stage하지 않는다. - `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`는 사용자 영역을 수정하지 않고 아래 관리 block만 추가하거나 교체한다. ```text @@ -82,18 +82,18 @@ agent-ops/roadmap/archive/** agent-ops/bin/sync.sh [target] ``` -푸시 대상 path는 항상 `agent-ops/.version`, `agent-ops/bin`, `agent-ops/rules/common`, `agent-ops/skills/common`, `AGENT_OPS_ENTRY_FILES`의 진입 파일로 제한한다. AI ignore / permission 파일은 framework에서 일반 프로젝트로 내려보내는 경우에만 대상 repo에서 추가 stage한다. +푸시 대상 path는 항상 `agent-ops/.version`, `agent-ops/bin`, `agent-ops/rules/common`, `agent-ops/skills/common`, `AGENT_OPS_ENTRY_FILES`의 진입 파일로 제한한다. AI ignore / permission 파일은 `.agent-ops-source`가 있는 공통 원본 repo에서 일반 프로젝트로 내려보내는 경우에만 대상 repo에서 추가 stage한다. ## 실행 결과 검증 - [ ] sync.sh 가 오류 없이 완료됐는가 - [ ] 버전 충돌 경고가 없었는가 — 있었다면 사용자에게 수동 머지 필요함을 알린다 -- [ ] 대상 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`와 일치하는가 -- [ ] framework에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가 -- [ ] framework에서 대상 프로젝트로 push한 경우, `.claude/settings.json`과 `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가 +- [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가 +- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가 +- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가 +- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.claude/settings.json`과 `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가 - [ ] 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가 -- [ ] 일반 프로젝트에서 agentic-framework로 push한 경우, AI ignore / permission 파일이 agentic-framework에 유입되지 않았는가 +- [ ] 일반 프로젝트에서 공통 원본 repo로 push한 경우, AI ignore / permission 파일이 공통 원본 repo에 유입되지 않았는가 - [ ] 대상 repo에 commit/push 된 path가 방향별 허용 범위로 제한되었는가 ## 금지 사항