docs(agent): 에이전트 가이드를 정리한다
This commit is contained in:
53
docs/agent-guides/agent-execution-policy.md
Normal file
53
docs/agent-guides/agent-execution-policy.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 에이전트 실행 정책 상세 가이드
|
||||
|
||||
`AGENTS.md`의 실행 정책을 보완하는 상세 설명이다. 충돌 시 `AGENTS.md`의 우선순위 체계를 먼저 따른다.
|
||||
|
||||
## 우선순위 체계
|
||||
아래 순서가 높을수록 우선한다.
|
||||
|
||||
1. 사용자 직접 지시
|
||||
2. `AGENTS.md`
|
||||
3. 프로젝트별 제약 조건
|
||||
4. `oh-my-openagent` 플러그인의 `agents` / `workflows` / `hooks`
|
||||
5. `superpowers` skills
|
||||
6. 기본 모델 동작
|
||||
|
||||
충돌 시 항상 더 높은 우선순위의 지시를 따른다. 사용자 직접 지시가 명확할 경우 사용자 지시가 최우선이다.
|
||||
|
||||
## CORE EXECUTION PRINCIPLES 적용
|
||||
- plugin / skill / workflow 지시가 `CORE EXECUTION PRINCIPLES`와 충돌하면 `CORE EXECUTION PRINCIPLES`를 따른다.
|
||||
- 불확실하거나 모호한 경우 추측하지 말고 확인하거나, 가능한 최소 범위의 안전한 조치를 취한다.
|
||||
- 모든 실행은 단순성, 최소 변경, 검증 가능성을 우선한다.
|
||||
|
||||
## oh-my-openagent 제어 정책
|
||||
- `oh-my-openagent`는 opencode의 플러그인 기반 실행 오케스트레이션 계층이다.
|
||||
- `oh-my-openagent`는 의사결정 권한이 아니라 실행 보조 권한만 가진다.
|
||||
- 작은 작업에는 multi-agent 실행이나 과도한 workflow를 사용하지 않는다.
|
||||
- 병렬 실행은 명확한 이득이 있을 때만 사용한다.
|
||||
- 모든 `oh-my-openagent` 동작은 `CORE EXECUTION PRINCIPLES`를 따라야 한다.
|
||||
|
||||
## superpowers 사용 정책
|
||||
- `superpowers`는 선택적 스킬 계층이다.
|
||||
- `superpowers` skill은 필요한 경우에만 사용한다.
|
||||
- `superpowers`가 과도한 리팩토링, 불필요한 범위 확장, 가정 기반 실행을 유도하면 따르지 않는다.
|
||||
- `superpowers`를 사용할 때도 최소 변경, 단순성, 검증 가능성을 우선한다.
|
||||
- 모든 `superpowers` 동작은 `CORE EXECUTION PRINCIPLES`를 따라야 한다.
|
||||
|
||||
## 실행 모드
|
||||
### 기본 모드: 보수적 실행
|
||||
- 최소 변경
|
||||
- 단순한 구현
|
||||
- 검증 가능한 결과
|
||||
|
||||
### 확장 모드
|
||||
- 사용자가 명시적으로 요청한 경우에만 사용한다.
|
||||
- 대규모 리팩토링, 브레인스토밍, 다중 에이전트 실행, 병렬 workflow를 허용한다.
|
||||
|
||||
## 작업 절차 체크리스트
|
||||
- 변경 전: 유사 기능 코드를 먼저 찾아 네이밍/예외/응답 패턴을 맞춘다.
|
||||
- 변경 중: 공개 API 스키마를 임의 변경하지 말고 작은 단위로 안전하게 수정한다.
|
||||
- 변경 후: 영향 범위 파일에 대해 빌드/테스트/로그/다국어 키를 점검한다.
|
||||
- 커밋 직후: `commit-policy` 스킬을 로드하고 메시지 검증 스크립트를 실행한다.
|
||||
|
||||
## 문서 유지보수 규칙
|
||||
- 문서 작성, 분리, 유지보수 규칙은 `docs/agent-guides/documentation-policy.md`를 참조한다.
|
||||
31
docs/agent-guides/build-test-verification.md
Normal file
31
docs/agent-guides/build-test-verification.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# 빌드/테스트/검증 가이드
|
||||
|
||||
`SodaLive` 저장소에서 확인된 빌드, 테스트, 검증 명령의 공식 진입점이다. 명령/경로/타깃명이 바뀌면 이 문서와 `AGENTS.md` 참조를 함께 갱신한다.
|
||||
|
||||
## 1) 의존성 설치
|
||||
- `pod install`
|
||||
- 근거: `Podfile`에 CocoaPods 타깃(`SodaLive`, `SodaLive-dev`) 정의.
|
||||
|
||||
## 2) 스킴/타깃 확인
|
||||
- `xcodebuild -workspace "SodaLive.xcworkspace" -list`
|
||||
- 근거: 공유 스킴 `SodaLive`, `SodaLive-dev` 존재.
|
||||
|
||||
## 3) 빌드
|
||||
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build`
|
||||
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build`
|
||||
|
||||
## 4) 테스트(전체)
|
||||
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test`
|
||||
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test`
|
||||
|
||||
## 5) 단일 테스트 실행
|
||||
- 일반 형식(테스트 타깃이 있는 경우):
|
||||
- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -only-testing:"SodaLiveTests/TestClass/testMethod" test`
|
||||
- **현재 주의사항**:
|
||||
- `SodaLive.xcodeproj/project.pbxproj` 기준으로 앱 타깃 중심 구성이고 테스트 번들 타깃이 확인되지 않는다.
|
||||
- 따라서 현재 상태에서는 단일 테스트 지정이 실질적으로 동작하지 않을 수 있다.
|
||||
|
||||
## 6) 린트/포맷
|
||||
- 저장소에 공식 `swiftlint`/`swiftformat` 실행 스크립트는 확인되지 않았다.
|
||||
- `generated/*.generated.swift`에 `swiftlint:disable all` 주석은 존재하나, 이는 생성 코드 보호 목적이다.
|
||||
- 린트 도구를 도입/추가하면 이 문서와 `AGENTS.md`를 즉시 갱신한다.
|
||||
54
docs/agent-guides/code-style.md
Normal file
54
docs/agent-guides/code-style.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 코드 스타일 가이드
|
||||
|
||||
`SodaLive` iOS 코드 작성 시 따르는 스타일 규칙이다. 기존 코드 관례와 충돌하면 더 가까운 주변 코드의 패턴을 우선한다.
|
||||
|
||||
## 아키텍처/레이어
|
||||
- 기본 흐름은 `View -> ViewModel -> Repository -> Api(TargetType)`를 따른다.
|
||||
- API는 `enum ...Api: TargetType`, 저장소는 `final class ...Repository` 형태를 우선 사용한다.
|
||||
- 상태 모델은 `struct`/`enum` 중심으로 두고, 화면 상태는 `ObservableObject`에서 관리한다.
|
||||
|
||||
## 임포트 규칙
|
||||
- 시스템 프레임워크(`Foundation`, `SwiftUI`, `Combine`)를 먼저 배치한다.
|
||||
- 서드파티(`Moya`, `CombineMoya`, SDK들)는 이후 배치한다.
|
||||
- import 그룹 사이에는 한 줄 공백으로 의미 단위를 분리한다.
|
||||
|
||||
## 포맷/구조
|
||||
- 들여쓰기는 4칸 스페이스를 사용한다.
|
||||
- 프로퍼티 선언, 비즈니스 로직, 헬퍼 메서드는 공백 줄로 구획한다.
|
||||
- 클로저 체인은 줄바꿈해 가독성을 유지한다.
|
||||
|
||||
## 타입/상태 관리
|
||||
- ViewModel은 `final class ...: ObservableObject` 패턴을 우선한다.
|
||||
- View가 소유하는 객체는 `@StateObject`, 외부 주입 객체는 `@ObservedObject`를 사용한다.
|
||||
- 네트워크 반환은 `AnyPublisher<Response, MoyaError>` 패턴을 기본으로 따른다.
|
||||
|
||||
## 네이밍 규칙
|
||||
- 타입명은 PascalCase (`HomeViewModel`, `UserRepository`, `UserApi`).
|
||||
- 변수/함수는 camelCase (`errorMessage`, `getMemberInfo`).
|
||||
- 역할을 이름에 반영한다 (`*View`, `*ViewModel`, `*Repository`, `*Api`, `*Request`, `*Response`).
|
||||
|
||||
## 비동기/Combine 규칙
|
||||
- 비동기 처리는 Combine의 `sink`, `receiveValue`, `.store(in: &subscription)` 패턴을 따른다.
|
||||
- `sink` 완료 블록에서 `.failure`를 반드시 처리한다.
|
||||
- 클로저 캡처는 상황에 맞게 `[weak self]` 또는 `[unowned self]`를 선택한다.
|
||||
|
||||
## 에러 처리 규칙
|
||||
- 사용자 노출 오류는 `errorMessage`와 팝업 플래그(`isShowPopup`)로 일관되게 처리한다.
|
||||
- JSON 파싱은 `do/catch + JSONDecoder` 패턴을 따른다.
|
||||
- **신규 코드에서 빈 `catch`는 금지**하고, 최소한 로깅 또는 명시적 무시 사유를 남긴다.
|
||||
|
||||
## 로깅 규칙
|
||||
- 디버그 로그는 `DEBUG_LOG`, 오류 로그는 `ERROR_LOG`를 사용한다.
|
||||
- `print`는 임시 디버깅 목적 외 신규 코드에서 지양한다.
|
||||
|
||||
## 네트워크/헤더 규칙
|
||||
- 공통 Moya 플러그인(`AuthPlugin`, `AcceptLanguagePlugin`) 흐름을 유지한다.
|
||||
- 언어 헤더는 `LanguageHeaderProvider.current`를 기준으로 사용한다.
|
||||
|
||||
## 문자열/다국어
|
||||
- 신규 사용자 노출 문자열은 가능하면 `I18n` 경로를 우선 사용한다.
|
||||
- 다국어 기능 수정 시 `Settings/Language` 모듈과 `Accept-Language` 헤더 흐름을 함께 점검한다.
|
||||
|
||||
## 주석/문서화
|
||||
- 자명한 코드에는 주석을 남기지 않는다.
|
||||
- 복잡한 분기, 외부 제약, 부작용이 있는 로직에만 주석을 추가한다.
|
||||
25
docs/agent-guides/documentation-policy.md
Normal file
25
docs/agent-guides/documentation-policy.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# 문서 작성 및 유지보수 정책
|
||||
|
||||
`SodaLive` 저장소에서 에이전트가 작업 계획 문서와 가이드 문서를 작성, 갱신, 검증할 때 따르는 규칙이다.
|
||||
|
||||
## 작업 계획 문서 규칙
|
||||
- 모든 작업 시작 전에 `docs` 폴더 아래 계획 문서를 먼저 생성하고, 해당 문서를 기준으로 구현한다.
|
||||
- 계획 문서 파일명은 `[날짜]_구현할내용한글.md` 형식을 사용한다.
|
||||
- 날짜는 `YYYYMMDD` 8자리 숫자를 사용한다.
|
||||
- 구현 항목은 기능/작업 단위 체크박스(`- [ ]`)로 작성하고 완료 즉시 `- [x]`로 갱신한다.
|
||||
- 작업 도중 범위가 변경되면 계획 문서 체크리스트를 먼저 업데이트한 뒤 구현한다.
|
||||
- 결과 보고 시 문서 하단에 검증 기록(무엇/왜/어떻게, 실행 명령, 결과)을 한국어로 남긴다.
|
||||
- 후속 수정이 발생해도 기존 검증 기록은 삭제/덮어쓰기 없이 누적한다.
|
||||
|
||||
## 문서 유지보수 규칙
|
||||
- 불확실한 규칙은 추측으로 채우지 말고 근거 파일 경로를 먼저 확인한다.
|
||||
- 에이전트 안내 문구는 한국어 중심으로 유지한다.
|
||||
- `CORE EXECUTION PRINCIPLES (andrej-karpathy-skills)` 섹션은 공식 원문을 영어로 유지한다.
|
||||
- 명령/경로/타깃명이 바뀌면 `AGENTS.md`와 `docs/agent-guides/**`를 즉시 업데이트한다.
|
||||
|
||||
## 문서 분리 기준
|
||||
- `AGENTS.md`에는 실행 판단에 필요한 핵심 정책과 참조 경로만 남긴다.
|
||||
- 빌드/테스트/검증 명령은 `docs/agent-guides/build-test-verification.md`에 둔다.
|
||||
- 코드 스타일 규칙은 `docs/agent-guides/code-style.md`에 둔다.
|
||||
- 에이전트 실행 정책 상세는 `docs/agent-guides/agent-execution-policy.md`에 둔다.
|
||||
- 문서 작성 및 유지보수 규칙은 이 문서에 둔다.
|
||||
19
docs/agent-guides/sodalive-ios-development.md
Normal file
19
docs/agent-guides/sodalive-ios-development.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# SodaLive iOS 개발 세부 가이드
|
||||
|
||||
`AGENTS.md`의 핵심 지침을 보완하는 iOS 개발 문서의 색인이다. 각 세부 규칙은 목적별 문서를 우선 참조한다.
|
||||
|
||||
## 세부 문서
|
||||
- 빌드/테스트/검증 명령: `docs/agent-guides/build-test-verification.md`
|
||||
- 코드 스타일 가이드: `docs/agent-guides/code-style.md`
|
||||
|
||||
## Cursor/Copilot 규칙 반영
|
||||
- 아래 파일 존재 여부를 확인해 `AGENTS.md`와 함께 유지한다.
|
||||
- `.cursor/rules/**`
|
||||
- `.cursorrules`
|
||||
- `.github/copilot-instructions.md`
|
||||
- 현재 저장소에서는 위 파일들이 확인되지 않았다.
|
||||
- 추후 파일이 추가되면 `AGENTS.md`에 요약 규칙을 동기화한다.
|
||||
- 충돌 우선순위 기본값:
|
||||
- 범위가 더 구체적인 규칙이 우선한다(경로 특화 > 저장소 전역).
|
||||
- Cursor: `.cursor/rules/**` > `.cursorrules` > `AGENTS.md`
|
||||
- Copilot: `.github/instructions/**`(존재 시) > `.github/copilot-instructions.md` > `AGENTS.md`
|
||||
Reference in New Issue
Block a user