dart-app-core/agent-ops/skills/common/sync-push/SKILL.md

8.5 KiB

name description
sync-push 현재 프로젝트의 agent-ops를 공통 원본 repo로 올리거나, `.agent-ops-source`가 있는 공통 원본 repo의 agent-ops를 대상 프로젝트 또는 상위 폴더의 agent-ops 적용 프로젝트 전체로 push하고 푸시한다. "agent-ops 싱크해", "agent-ops 동기화해", "agentic-framework에 올려줘" 요청 시 사용한다.

sync-push

목적

agent-ops/bin/sync.sh를 호출해 agent-ops 공통 파일을 push 방향으로 동기화한다.

  • 일반 프로젝트에서는 현재 프로젝트 → .agent-ops-source가 있는 공통 원본 repo 방향으로 올린다.
  • .agent-ops-source가 있는 공통 원본 repo에서는 원본 repo → 대상 프로젝트 방향으로 보내고, 대상 repo를 commit/push 한다.
  • 공통 원본 repo에서 대상이 명시되지 않으면 현재 프로젝트의 상위 폴더에 있는 agent-ops 적용 프로젝트 전체로 보낸다.

버전 정책

  • 현재 프로젝트 루트에 .agent-ops-source가 있으면, 대상 프로젝트로 전파하는 push 동기화는 버전을 올리지 않는다.
  • 이 경우 현재 공통 원본 repo의 agent-ops/.version 값을 그대로 대상 repo에 전파한다.
  • 일반 프로젝트에서 .agent-ops-source가 있는 공통 원본 repo로 공통 변경을 올리는 push 동기화는 기존처럼 sync.sh가 버전을 한 단계 올린다.

언제 호출할지

  • "agent-ops 싱크해", "agent-ops 동기화해" 요청 시
  • "agentic-framework에 올려줘" 요청 시
  • "agent-ops를 [프로젝트]로 싱크해" 요청 시

실행 절차

현 프로젝트가 일반 프로젝트인 경우 (.agent-ops-source 없음)

  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가 버전을 한 단계 올리고 현재 프로젝트와 공통 원본 repo에 같은 버전을 반영한다
  6. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다

현 프로젝트가 공통 원본 repo인 경우 (.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는 현재 공통 원본 repo의 agent-ops/rules/common/rules.md 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다
  6. 적용 후 각 대상 repo에서 agent-ops 공통 관리 경로(rules/common/rules.md 포함), 진입 파일, .gitignore, AI ignore / permission 파일을 stage 하여 commit/push 한다
  7. .gitignore와 AI ignore / permission 파일은 대상 프로젝트의 기존 내용을 덮어쓰지 않고, Agent-Ops 관리 block 또는 Agent-Ops 전용 permission key만 보강한다
  8. 이 과정에서는 버전을 새로 올리지 않고 현재 공통 원본 repo의 agent-ops/.version 값을 그대로 대상 프로젝트에 반영한다

덮어쓰기 대상은 init-agent-ops 초기 세팅과 동일하며, 실제 목록은 agent-ops/bin/entry-files.shAGENT_OPS_ENTRY_FILES를 단일 기준으로 사용한다.

에이전트 파일명
Gemini GEMINI.md
Claude CLAUDE.md
Kilo Code / OpenCode AGENTS.md
Cursor .cursorrules
Cline .clinerules

대상 프로젝트에 기존 진입 파일이 있어도 보존하거나 병합하지 않고 agent-ops/rules/common/rules.md 내용으로 교체한다.

Gitignore / AI Ignore / Permission 재적용

  • 이 절차는 .agent-ops-source가 있는 공통 원본 repo에서 대상 프로젝트로 push할 때와 --pull로 공통 원본 repo에서 현재 프로젝트로 내려받을 때만 적용한다.
  • 일반 프로젝트에서 공통 원본 repo로 올리는 push에서는 .gitignore와 AI ignore / permission 파일을 수정하거나 stage하지 않는다.
  • .gitignore는 사용자 영역을 수정하지 않고 아래 관리 block만 추가하거나 교체한다. 이 예외는 *.log 같은 전역 ignore가 있어도 plan/review/archive task 산출물이 git에 잡히도록 하고, agent-roadmap/current.md는 브랜치별 로컬 포인터로 남긴다.
# BEGIN Agent-Ops managed gitignore
!agent-task/
!agent-task/**/
!agent-task/**/*.md
!agent-task/**/*.log
agent-roadmap/current.md
# END Agent-Ops managed gitignore
  • .geminiignore, .aiexclude, .cursorignore, .clineignore는 사용자 영역을 수정하지 않고 아래 관리 block만 추가하거나 교체한다.
# BEGIN Agent-Ops managed ignore
agent-task/archive/**
agent-roadmap/archive/**
# END Agent-Ops managed ignore
  • 관리 block 밖의 기존 ignore 항목은 사용자 소유로 보고 삭제, 정렬, 중복 제거하지 않는다.
  • .claude/settings.jsonopencode.json은 기존 사용자 설정을 보존하고 agent-task/archive/**agent-roadmap/archive/** hard read/glob deny를 제거한다.
  • archive는 기본 컨텍스트에서 제외하되 필요한 경우 명시 경로로 읽을 수 있어야 하므로 .claude/settings.json이나 opencode.json의 hard read/glob deny로 두지 않는다.
  • 대상 프로젝트에 기존 archive hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다.
  • opencode.json의 watcher ignore에는 agent-task/archive/**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한다.

실행 결과 검증

  • sync.sh 가 오류 없이 완료됐는가
  • 버전 충돌 경고가 없었는가 — 있었다면 사용자에게 수동 머지 필요함을 알린다
  • 대상 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한 경우, .gitignore에 Agent-Ops 관리 gitignore block이 있고 !agent-task/, !agent-task/**/, !agent-task/**/*.md, !agent-task/**/*.log, agent-roadmap/current.md가 포함되어 있는가
  • 대상 프로젝트에서 agent-roadmap/current.md가 있으면 파일은 보존되고 git 추적 대상에서는 제거됐는가
  • 공통 원본 repo에서 대상 프로젝트로 push한 경우, .geminiignore, .aiexclude, .cursorignore, .clineignore에 Agent-Ops 관리 block이 있고 그 안에 agent-task/archive/**agent-roadmap/archive/**가 포함되어 있는가
  • 공통 원본 repo에서 대상 프로젝트로 push한 경우, .claude/settings.jsonopencode.jsonagent-task/archive/** 또는 agent-roadmap/archive/** hard read/glob deny가 남아 있지 않은가
  • 대상 프로젝트에 기존 archive hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가
  • 일반 프로젝트에서 공통 원본 repo로 push한 경우, .gitignore와 AI ignore / permission 파일이 공통 원본 repo에 유입되지 않았는가
  • 대상 repo에 commit/push 된 path가 방향별 허용 범위로 제한되었는가

금지 사항

  • sync.sh 를 거치지 않고 직접 파일을 복사하지 않는다