sync: agent-ops from agentic-framework v1.1.178

This commit is contained in:
toki 2026-07-29 11:14:37 +09:00
parent 4b9acb47ba
commit b867b3c30e
15 changed files with 110 additions and 24 deletions

View file

@ -15,6 +15,8 @@
- `agent-spec/archive/**`는 일반 작업에서 읽지 않는다. 과거 스펙 확인, 복원, 비교, 특정 archive 경로 확인이 필요한 경우에만 `agent-ops/rules/common/rules-agent-spec.md`의 archive 접근 규칙을 따른다.
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
- tracked `docs/`는 사람용 최신 가이드와 공개 설명만 둔다.
- project skill 경로 `agent-ops/skills/project/<skill-name>/SKILL.md`를 선택했을 때 같은 이름의 `agent-ops/skills/private/<skill-name>/SKILL.md`가 있으면 private skill을 우선한다. 없으면 project skill을 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에 명시적으로 라우팅한다. private skill 디렉터리 전체를 탐색하지 않는다.
- API, wire protocol, 런타임 호출, event/config schema, 프로젝트 간 또는 내부 프로세스/컴포넌트 간 요청/응답 계약을 확인해야 하는 작업은 `agent-contract/index.md` 파일이 있을 때만 세션 1회 읽고, 매칭되는 계약 문서만 읽는다.
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.

View file

@ -15,6 +15,8 @@
- `agent-spec/archive/**`는 일반 작업에서 읽지 않는다. 과거 스펙 확인, 복원, 비교, 특정 archive 경로 확인이 필요한 경우에만 `agent-ops/rules/common/rules-agent-spec.md`의 archive 접근 규칙을 따른다.
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
- tracked `docs/`는 사람용 최신 가이드와 공개 설명만 둔다.
- project skill 경로 `agent-ops/skills/project/<skill-name>/SKILL.md`를 선택했을 때 같은 이름의 `agent-ops/skills/private/<skill-name>/SKILL.md`가 있으면 private skill을 우선한다. 없으면 project skill을 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에 명시적으로 라우팅한다. private skill 디렉터리 전체를 탐색하지 않는다.
- API, wire protocol, 런타임 호출, event/config schema, 프로젝트 간 또는 내부 프로세스/컴포넌트 간 요청/응답 계약을 확인해야 하는 작업은 `agent-contract/index.md` 파일이 있을 때만 세션 1회 읽고, 매칭되는 계약 문서만 읽는다.
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.

3
.gitignore vendored
View file

@ -68,3 +68,6 @@ agent-test/runs/
!agent-task/**/*.log
agent-roadmap/current.md
# END Agent-Ops managed gitignore
# Agent-Ops Private Skills
agent-ops/skills/private/

View file

@ -15,6 +15,8 @@
- `agent-spec/archive/**`는 일반 작업에서 읽지 않는다. 과거 스펙 확인, 복원, 비교, 특정 archive 경로 확인이 필요한 경우에만 `agent-ops/rules/common/rules-agent-spec.md`의 archive 접근 규칙을 따른다.
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
- tracked `docs/`는 사람용 최신 가이드와 공개 설명만 둔다.
- project skill 경로 `agent-ops/skills/project/<skill-name>/SKILL.md`를 선택했을 때 같은 이름의 `agent-ops/skills/private/<skill-name>/SKILL.md`가 있으면 private skill을 우선한다. 없으면 project skill을 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에 명시적으로 라우팅한다. private skill 디렉터리 전체를 탐색하지 않는다.
- API, wire protocol, 런타임 호출, event/config schema, 프로젝트 간 또는 내부 프로세스/컴포넌트 간 요청/응답 계약을 확인해야 하는 작업은 `agent-contract/index.md` 파일이 있을 때만 세션 1회 읽고, 매칭되는 계약 문서만 읽는다.
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.

View file

@ -15,6 +15,8 @@
- `agent-spec/archive/**`는 일반 작업에서 읽지 않는다. 과거 스펙 확인, 복원, 비교, 특정 archive 경로 확인이 필요한 경우에만 `agent-ops/rules/common/rules-agent-spec.md`의 archive 접근 규칙을 따른다.
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
- tracked `docs/`는 사람용 최신 가이드와 공개 설명만 둔다.
- project skill 경로 `agent-ops/skills/project/<skill-name>/SKILL.md`를 선택했을 때 같은 이름의 `agent-ops/skills/private/<skill-name>/SKILL.md`가 있으면 private skill을 우선한다. 없으면 project skill을 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에 명시적으로 라우팅한다. private skill 디렉터리 전체를 탐색하지 않는다.
- API, wire protocol, 런타임 호출, event/config schema, 프로젝트 간 또는 내부 프로세스/컴포넌트 간 요청/응답 계약을 확인해야 하는 작업은 `agent-contract/index.md` 파일이 있을 때만 세션 1회 읽고, 매칭되는 계약 문서만 읽는다.
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.

View file

@ -15,6 +15,8 @@
- `agent-spec/archive/**`는 일반 작업에서 읽지 않는다. 과거 스펙 확인, 복원, 비교, 특정 archive 경로 확인이 필요한 경우에만 `agent-ops/rules/common/rules-agent-spec.md`의 archive 접근 규칙을 따른다.
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
- tracked `docs/`는 사람용 최신 가이드와 공개 설명만 둔다.
- project skill 경로 `agent-ops/skills/project/<skill-name>/SKILL.md`를 선택했을 때 같은 이름의 `agent-ops/skills/private/<skill-name>/SKILL.md`가 있으면 private skill을 우선한다. 없으면 project skill을 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에 명시적으로 라우팅한다. private skill 디렉터리 전체를 탐색하지 않는다.
- API, wire protocol, 런타임 호출, event/config schema, 프로젝트 간 또는 내부 프로세스/컴포넌트 간 요청/응답 계약을 확인해야 하는 작업은 `agent-contract/index.md` 파일이 있을 때만 세션 1회 읽고, 매칭되는 계약 문서만 읽는다.
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.

View file

@ -1 +1 @@
1.1.177
1.1.178

View file

@ -56,6 +56,26 @@ agent_ops_ensure_gitignore_task_artifact_block() {
fi
}
agent_ops_ensure_private_overrides_gitignore() {
local file="$1"
touch "$file"
if ! grep -qxF "agent-ops/rules/private/" "$file"; then
if [[ -s "$file" ]]; then
printf "\n" >> "$file"
fi
printf "%s\n" "# Agent-Ops Private Rules" >> "$file"
printf "%s\n" "agent-ops/rules/private/" >> "$file"
fi
if ! grep -qxF "agent-ops/skills/private/" "$file"; then
if [[ -s "$file" ]]; then
printf "\n" >> "$file"
fi
printf "%s\n" "# Agent-Ops Private Skills" >> "$file"
printf "%s\n" "agent-ops/skills/private/" >> "$file"
fi
}
agent_ops_ensure_ai_ignore_block() {
local file="$1"
local tmp
@ -215,6 +235,7 @@ ensure_agent_ops_ai_ignore_config() {
local target_dir="$1"
local ignore_file
agent_ops_ensure_private_overrides_gitignore "$target_dir/.gitignore"
if [[ -f "$target_dir/.agent-ops-source" ]]; then
echo " AI ignore 보강 건너뜀: .agent-ops-source repo"
return

View file

@ -23,6 +23,7 @@ create_project_agent_ops_dirs() {
mkdir -p "$agent_ops_dir/rules/project/domain"
mkdir -p "$agent_ops_dir/rules/private"
mkdir -p "$agent_ops_dir/skills/project"
mkdir -p "$agent_ops_dir/skills/private"
}
copy_common_agent_ops() {
@ -323,11 +324,6 @@ ensure_agent_ops_ai_ignore_config "$TARGET_DIR"
TOUCH_GITIGNORE="$TARGET_DIR/.gitignore"
touch "$TOUCH_GITIGNORE"
agent_ops_ensure_gitignore_task_artifact_block "$TOUCH_GITIGNORE"
if ! grep -q "agent-ops/rules/private/" "$TOUCH_GITIGNORE"; then
echo "" >> "$TOUCH_GITIGNORE"
echo "# Agent-Ops Private Rules" >> "$TOUCH_GITIGNORE"
echo "agent-ops/rules/private/" >> "$TOUCH_GITIGNORE"
fi
if ! grep -qxF "# Agent-Test Local Environment" "$TOUCH_GITIGNORE"; then
echo "" >> "$TOUCH_GITIGNORE"
echo "# Agent-Test Local Environment" >> "$TOUCH_GITIGNORE"
@ -340,4 +336,5 @@ ensure_agent_test_local "$TARGET_DIR"
echo "Successfully initialized agent-ops in $TARGET_DIR"
echo "Note: agent-ops/rules/project and agent-ops/skills/project are initialized as empty."
echo "Note: agent-ops/rules/private and agent-ops/skills/private are initialized and ignored by git."
echo "Note: agent-test/local rules and baseline test profiles are initialized and ignored by git."

View file

@ -73,6 +73,8 @@ sync_common() {
sync_folder "$src/rules/common" "$dst/rules/common"
sync_folder "$src/skills/common" "$dst/skills/common"
sync_folder "$src/bin" "$dst/bin"
create_project_agent_ops_dirs "$dst"
agent_ops_ensure_private_overrides_gitignore "$(dirname "$dst")/.gitignore"
}
common_differs() {
@ -110,6 +112,7 @@ create_project_agent_ops_dirs() {
mkdir -p "$agent_ops_dir/rules/project/domain"
mkdir -p "$agent_ops_dir/rules/private"
mkdir -p "$agent_ops_dir/skills/project"
mkdir -p "$agent_ops_dir/skills/private"
}
copy_common_scaffold() {
@ -160,6 +163,33 @@ agent_ops_git_paths() {
done
}
stage_private_gitignore_only() {
local file=".gitignore"
local index_file private_file patch_file
if ! git ls-files --error-unmatch "$file" >/dev/null 2>&1; then
echo -e "${RED}Error: $file 이 추적 중이 아니어서 private ignore만 분리 stage할 수 없습니다.${RESET}"
return 1
fi
if ! git diff --cached --quiet -- "$file"; then
echo -e "${RED}Error: $file 에 기존 staged 변경이 있어 private ignore만 분리 stage할 수 없습니다.${RESET}"
return 1
fi
index_file="$(mktemp)"
private_file="$(mktemp)"
patch_file="$(mktemp)"
git show ":$file" > "$index_file"
cp "$index_file" "$private_file"
agent_ops_ensure_private_overrides_gitignore "$private_file"
if ! cmp -s "$index_file" "$private_file"; then
diff -u --label "a/$file" --label "b/$file" "$index_file" "$private_file" > "$patch_file" || true
git apply --cached "$patch_file"
fi
rm -f "$index_file" "$private_file" "$patch_file"
}
commit_and_push_agent_ops_scope() {
local repo="$1" message="$2"
local include_ai_config="${3:-1}"
@ -172,6 +202,10 @@ commit_and_push_agent_ops_scope() {
(
cd "$repo"
mapfile -t paths < <(agent_ops_git_paths "$include_ai_config")
if [[ "$include_ai_config" == "private-gitignore" ]]; then
stage_private_gitignore_only
paths+=(".gitignore")
fi
git add -- "${paths[@]}"
if git ls-files --error-unmatch "$AGENT_ROADMAP_CURRENT_LOCAL_PATTERN" >/dev/null 2>&1 \
&& grep -qxF "$AGENT_ROADMAP_CURRENT_LOCAL_PATTERN" ".gitignore" 2>/dev/null; then
@ -372,7 +406,7 @@ echo "$NEW_VER" > "$DST_AO/.version"
apply_agent_ops_entry_files "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT"
apply_agent_ops_entry_files "$DST_AO/rules/common/rules.md" "$TARGET"
commit_and_push_agent_ops_scope "$TARGET" "sync: from $(basename "$PROJECT_ROOT") v$NEW_VER" "0"
commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: to agentic-framework v$NEW_VER" "0"
commit_and_push_agent_ops_scope "$TARGET" "sync: from $(basename "$PROJECT_ROOT") v$NEW_VER" "private-gitignore"
commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: to agentic-framework v$NEW_VER" "private-gitignore"
echo -e "${GREEN}✓ 완료 (v$SRC_VER → v$NEW_VER)${RESET}"

View file

@ -15,6 +15,8 @@
- `agent-spec/archive/**`는 일반 작업에서 읽지 않는다. 과거 스펙 확인, 복원, 비교, 특정 archive 경로 확인이 필요한 경우에만 `agent-ops/rules/common/rules-agent-spec.md`의 archive 접근 규칙을 따른다.
- agent-ops 구조, 규칙, 스킬, 로드맵, 런타임 책임 경계를 설계하거나 수정할 때만 `agent-ops/rules/common/philosophy.md`를 읽는다.
- tracked `docs/`는 사람용 최신 가이드와 공개 설명만 둔다.
- project skill 경로 `agent-ops/skills/project/<skill-name>/SKILL.md`를 선택했을 때 같은 이름의 `agent-ops/skills/private/<skill-name>/SKILL.md`가 있으면 private skill을 우선한다. 없으면 project skill을 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에 명시적으로 라우팅한다. private skill 디렉터리 전체를 탐색하지 않는다.
- API, wire protocol, 런타임 호출, event/config schema, 프로젝트 간 또는 내부 프로세스/컴포넌트 간 요청/응답 계약을 확인해야 하는 작업은 `agent-contract/index.md` 파일이 있을 때만 세션 1회 읽고, 매칭되는 계약 문서만 읽는다.
**세션 최초 1회 아래 파일을 순서대로 반드시 읽는다.** 파일이나 디렉터리가 없는 항목은 건너뛴다. 그외에 스킵은 금지한다.

View file

@ -1,6 +1,6 @@
---
name: create-skill
version: 1.0.0
version: 1.0.1
description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬
---
@ -17,7 +17,8 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬
### 생성 위치 결정
- `.agent-ops-source` 파일이 **있으면** (공통 관리 레포): `agent-ops/skills/common/<skill-name>/SKILL.md`
- `.agent-ops-source` 파일이 **없으면** (타겟 프로젝트): `agent-ops/skills/project/<skill-name>/SKILL.md`
- `.agent-ops-source` 파일이 **없고** 사용자가 private 또는 operator-local을 명시하면 (타겟 프로젝트): `agent-ops/skills/private/<skill-name>/SKILL.md`
- `.agent-ops-source` 파일이 **없고** private 요청이 없으면 (타겟 프로젝트): `agent-ops/skills/project/<skill-name>/SKILL.md`
## 언제 호출할지
@ -29,19 +30,22 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬
- `skill-name`: 생성할 skill 이름, kebab-case (필수)
- `purpose`: 이 skill이 해결하는 문제 한 줄 요약 (필수)
- `visibility`: `common`, `project`, `private` 중 하나. 사용자가 private 또는 operator-local을 명시했을 때만 `private`을 선택한다. (선택)
- `trigger-cases`: 이 skill을 호출해야 하는 상황 목록 (선택)
## 먼저 확인할 것
- [ ] `agent-ops/skills/common/``agent-ops/skills/project/` 하위에 동일 이름의 디렉터리가 이미 존재하는지 확인
- [ ] `agent-ops/skills/common/`, `agent-ops/skills/project/`, `agent-ops/skills/private/` 하위에 동일 이름의 디렉터리가 이미 존재하는지 확인
- [ ] `agent-ops/skills/common/router.md``agent-ops/rules/project/rules.md` 에 이미 유사한 라우팅 항목이 있는지 확인
- [ ] `agent-ops/skills/common/_templates/skill-template.md` 를 읽어 최신 템플릿 형식 파악
## 실행 절차
1. **중복 확인**
- `agent-ops/skills/common/<skill-name>/``agent-ops/skills/project/<skill-name>/` 폴더 존재 여부 확인
- 기능이 겹치는 기존 skill이 있으면 사용자에게 알리고 중단한다
- 같은 visibility 경로에 이미 있는 skill은 덮어쓰지 않고 중단한다.
- private 요청에서 같은 이름의 project skill은 의도된 override 후보이므로 중복으로 중단하지 않는다. common skill과의 같은 이름 또는 다른 기능의 중복은 사용자에게 알리고 중단한다.
- private override가 아닌 기능 중복은 사용자에게 알리고 중단한다.
- project skill과 같은 이름의 private override는 해당 project skill의 책임을 완전히 대체하는지 확인한다.
2. **목적 분석**
- `purpose``trigger-cases` 를 바탕으로 아래 항목을 도출한다
@ -53,7 +57,7 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬
- 금지 사항
3. **SKILL.md 생성**
- 경로: 생성 위치 결정 규칙에 따라 `common/` 또는 `project/` 하위에 생성
- 경로: 생성 위치 결정 규칙에 따라 `common/`, `project/`, 또는 `private/` 하위에 생성
- `skill-template.md` 형식을 따른다
- agent-ops 내부 스킬은 기존 로컬 관례에 맞춰 `version`을 둘 수 있다. Codex 설치형 스킬로 배포할 목적이면 `version`이나 `depends` 같은 비표준 frontmatter를 넣지 않는다.
- 프로젝트 특화 내용보다 범용 절차를 우선한다
@ -61,7 +65,10 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬
4. **라우팅 업데이트**
- `.agent-ops-source` 마커가 **있으면** (공통 관리 레포): `agent-ops/skills/common/router.md`에 라우팅 항목 추가
- `.agent-ops-source` 마커가 **없으면** (타겟 프로젝트): `agent-ops/rules/project/rules.md`의 프로젝트 스킬 라우터 섹션에 라우팅 항목 추가
- private skill이 같은 이름의 project skill을 override하면 별도 라우팅 항목을 추가하지 않는다. 공통 규칙의 private 우선순위를 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에만 라우팅 항목을 추가한다. 파일이 없으면 private route만 담은 ignored local rule을 생성한다.
- private rule의 trigger는 project router와 중복 등록하지 않는다.
- `.agent-ops-source` 마커가 **없고** private skill이 아니면 (타겟 프로젝트): `agent-ops/rules/project/rules.md`의 프로젝트 스킬 라우터 섹션에 라우팅 항목 추가
- 기존 공통 스킬을 수정해 trigger가 달라졌다면 새 skill을 만들지 말고 `agent-ops/skills/common/router.md`의 기존 행을 갱신한다
- 이 skill이 속할 라우팅 축(구조 분석/코드 변경/흐름 추적 등)을 판단한다
- 기존 라우팅 구조를 깨지 않는다
@ -76,7 +83,7 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬
```
## 생성 완료
- SKILL 경로: agent-ops/skills/{common|project}/<skill-name>/SKILL.md
- SKILL 경로: agent-ops/skills/{common|project|private}/<skill-name>/SKILL.md
- 라우팅 추가: <대상 파일><라우팅 ><skill-name>
## 주의사항 (해당 시)
@ -85,15 +92,16 @@ description: 새로운 SKILL.md 파일을 생성하기 위한 범용 스킬
## 실행 결과 검증
- [ ] `agent-ops/skills/{common|project}/<skill-name>/SKILL.md` 파일이 생성되었는가
- [ ] `agent-ops/skills/{common|project|private}/<skill-name>/SKILL.md` 파일이 생성되었는가
- [ ] 생성된 파일이 `skill-template.md`의 필수 섹션(목적, 언제 호출할지, 실행 절차, 실행 결과 검증, 출력 형식, 금지 사항)을 포함하는가
- [ ] frontmatter에 name, description이 올바르게 기재되었는가
- [ ] agent-ops 내부 스킬이면 version 등 로컬 관례를 따르고, Codex 설치형 스킬이면 시스템 `skill-creator` frontmatter 규칙을 따르는가
- [ ] 라우팅 대상 파일에 해당 스킬의 라우팅 항목이 추가되었는가
- [ ] private override는 동일 이름의 project skill보다 우선되고, 짝이 없는 private skill만 private rule에 라우팅되었는가
- 검증 실패 시: 누락된 섹션 또는 라우팅 항목을 사용자에게 알리고 해당 부분만 보완한다
## 금지 사항
- private skill 또는 private rule의 내용을 tracked common·project 경로에 복사하지 않는다
- 이미 존재하는 skill 을 덮어쓰지 않는다
- 프로젝트 특화 경로(예: `app/screens/`)를 skill 본문에 하드코딩하지 않는다
- skill 생성과 무관한 코드 파일을 수정하지 않는다

View file

@ -72,7 +72,8 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드
| `agent-ops/rules/project/rules.md` | 프로젝트 분석 후 생성 |
| `agent-ops/rules/project/domain/<domain>/rules.md` | 도메인 분석 후 생성 |
| `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) |
| `.gitignore``agent-ops/rules/private/` 추가 | git 추적 제외 |
| `agent-ops/skills/private/` | 폴더만 생성 (내용은 개인이 작성) |
| `.gitignore``agent-ops/rules/private/`, `agent-ops/skills/private/` 추가 | git 추적 제외 |
| `.gitignore`의 Agent-Ops 관리 block | `*.log` 같은 전역 ignore가 있어도 `agent-task/**/*.md`, `agent-task/**/*.log` task 산출물이 추적되도록 unignore하고 `agent-roadmap/current.md`는 로컬 포인터로 ignore |
| `agent-test/local/rules.md` | `init-agent-ops.sh`가 최소 내용으로 생성 |
| `agent-test/local/project-smoke.md` | 도메인이 아직 없으면 `init-agent-ops.sh`가 fallback baseline으로 생성 |
@ -254,7 +255,7 @@ common/rules.md와 내용이 중복되지 않도록 한다.
- [ ] `agent-ops/rules/project/rules.md`가 생성되었고, 필수 항목(응답 언어, 프로젝트 개요, 기술 스택)이 포함되어 있는가
- [ ] 생성된 domain rules.md가 `domain-rule-template.md` 형식을 따르는가
- [ ] `rules/project/rules.md`의 도메인 매핑 테이블에 생성된 도메인이 모두 등록되어 있는가
- [ ] `.gitignore`에 `agent-ops/rules/private/` 항목이 추가되어 있는가
- [ ] `agent-ops/rules/private/`, `agent-ops/skills/private/`가 생성되고 `.gitignore`에 각각의 항목이 추가되어 있는가
- [ ] `.gitignore`에 Agent-Ops 관리 block이 있고 `!agent-task/`, `!agent-task/**/`, `!agent-task/**/*.md`, `!agent-task/**/*.log`, `agent-roadmap/current.md`가 포함되어 있는가
- [ ] `agent-test/local/rules.md`가 생성되었는가
- [ ] 생성되었거나 기존에 있던 모든 domain rule에 대응하는 `agent-test/local/<domain>-smoke.md`가 있는가

View file

@ -2,6 +2,8 @@
라우팅 우선순위:
- project skill 경로를 선택한 뒤 같은 이름의 `agent-ops/skills/private/<skill-name>/SKILL.md`가 있으면 private skill을 우선한다. 없으면 선택한 project skill을 사용한다.
- project skill과 짝이 없는 private skill은 `agent-ops/rules/private/rules.md`에 명시적으로 라우팅한다. private skill 전체를 탐색하지 않는다.
- SDD/spec gate 자체의 작성, 갱신, gate 확인, 사용자 리뷰, 잠금 해제는 `roadmap-sdd`로 보낸다.
- 로드맵/마일스톤 생성 또는 갱신 요청 안에 SDD 필요 여부와 gate 연결이 포함되면 `create-roadmap` 또는 `update-roadmap`을 진입점으로 삼고, 해당 흐름에서 `roadmap-sdd` create/check를 처리한다.
- agent-spec은 구현 후 현재 상태를 설명하는 living spec이다. SDD/spec gate와 구분하며, 현재 구현 스펙 생성은 `create-spec`, 갱신은 `update-spec`으로 보낸다.

View file

@ -36,7 +36,7 @@ description: 현재 프로젝트의 agent-ops를 공통 원본 repo로 올리거
5. 공통 관리 파일 변경이 없어도 현재 프로젝트 또는 공통 원본 repo의 진입 파일이 `agent-ops/rules/common/rules.md`와 다르면 진입 파일만 재적용하고 commit/push 한다
6. 공통 관리 파일 변경이 있으면 `sync.sh`가 버전을 한 단계 올리고 현재 프로젝트와 공통 원본 repo에 같은 버전을 반영한다
7. 이때 현재 프로젝트와 공통 원본 repo의 진입 파일은 각각 자기 `agent-ops/rules/common/rules.md` 내용으로 재적용한다
8. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다
8. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다. 단, `agent-ops/rules/private/``agent-ops/skills/private/` ignore 항목만 보장하기 위해 `.gitignore`은 함께 stage한다.
### 현 프로젝트가 공통 원본 repo인 경우 (`.agent-ops-source` 있음)
@ -66,7 +66,15 @@ description: 현재 프로젝트의 agent-ops를 공통 원본 repo로 올리거
## Gitignore / AI Ignore / Permission 재적용
- 이 절차는 `.agent-ops-source`가 있는 공통 원본 repo에서 대상 프로젝트로 push할 때와 `--pull`로 공통 원본 repo에서 현재 프로젝트로 내려받을 때만 적용한다.
- 일반 프로젝트에서 공통 원본 repo로 올리는 push에서는 `.gitignore`와 AI ignore / permission 파일을 수정하거나 stage하지 않는다.
- 일반 프로젝트에서 공통 원본 repo로 올리는 push에서는 AI ignore / permission 파일을 수정하거나 stage하지 않는다. 단, private 규칙·스킬의 로컬 전용 경로를 보장하는 아래 두 `.gitignore` 항목은 추가·stage할 수 있다.
```text
# Agent-Ops Private Rules
agent-ops/rules/private/
# Agent-Ops Private Skills
agent-ops/skills/private/
```
- `.gitignore`는 사용자 영역을 수정하지 않고 아래 관리 block만 추가하거나 교체한다. 이 예외는 `*.log` 같은 전역 ignore가 있어도 plan/review/archive task 산출물이 git에 잡히도록 하고, `agent-roadmap/current.md`는 브랜치별 로컬 포인터로 남긴다.
```text
@ -98,7 +106,7 @@ agent-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`의 진입 파일로 제한한다. 예외적으로 `agent-roadmap/current.md`가 이미 추적 중이고 `.gitignore`에 로컬 current ignore가 있으면 파일을 보존한 채 git 추적에서 제거하는 삭제만 함께 commit할 수 있다. `.gitignore`와 AI ignore / permission 파일은 `.agent-ops-source`가 있는 공통 원본 repo에서 일반 프로젝트로 내려보내는 경우에만 대상 repo에서 추가 stage한다.
푸시 대상 path는 항상 `agent-ops/.version`, `agent-ops/bin`, `agent-ops/rules/common`, `agent-ops/skills/common`, `AGENT_OPS_ENTRY_FILES`의 진입 파일로 제한한다. 예외적으로 `agent-roadmap/current.md`가 이미 추적 중이고 `.gitignore`에 로컬 current ignore가 있으면 파일을 보존한 채 git 추적에서 제거하는 삭제만 함께 commit할 수 있다. `.gitignore`와 AI ignore / permission 파일은 `.agent-ops-source`가 있는 공통 원본 repo에서 일반 프로젝트로 내려보내는 경우에만 대상 repo에서 추가 stage한다. 일반 프로젝트에서 공통 원본 repo로 올릴 때에는 private 규칙·스킬 ignore 두 항목을 반영하는 `.gitignore`만 추가 stage할 수 있다.
## 실행 결과 검증
@ -112,7 +120,7 @@ agent-ops/bin/sync.sh [target]
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**``agent-roadmap/archive/**`가 포함되어 있는가
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.claude/settings.json``opencode.json``agent-task/archive/**` 또는 `agent-roadmap/archive/**` hard read/glob deny가 남아 있지 않은가
- [ ] 대상 프로젝트에 기존 archive hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
- [ ] 일반 프로젝트에서 공통 원본 repo로 push한 경우, `.gitignore` AI ignore / permission 파일이 공통 원본 repo에 유입되지 않았는가
- [ ] 일반 프로젝트에서 공통 원본 repo로 push한 경우, private 규칙·스킬 ignore 두 항목 외의 `.gitignore` 변경과 AI ignore / permission 파일이 공통 원본 repo에 유입되지 않았는가
- [ ] 대상 repo에 commit/push 된 path가 방향별 허용 범위로 제한되었는가
## 금지 사항