# Agent 구현 태스크 (Step 2~4) ## 전제 조건 - [ ] Step 1 Skills 구현 완료 (인터페이스 버전 `1.0` 확정) - [ ] Staging K8s 클러스터 접근 가능 --- ## Step 2: Agent 프레임워크 POC **목표**: OpenClaw와 Nanobot 중 하나를 실제 클러스터에서 검증하여 프레임워크를 확정한다. ### POC 범위 (최소) - [ ] 각 프레임워크를 Staging 클러스터에 배포 - [ ] `helm_diff` Skill 하나를 등록 - [ ] Agent가 Skill을 호출하여 실제 결과 반환 확인 - [ ] 두 프레임워크 비교 후 결정 ### 비교 기준 | 항목 | OpenClaw | Nanobot | 결과 | |------|---------|---------|------| | K8s 배포 난이도 | 공식 Helm chart | 직접 구성 | - | | Skill 연결 방식 | - | - | - | | 로그/디버깅 편의성 | - | - | - | | 보안 설정 가능 여부 | - | - | - | > POC 완료 후 이 표를 채운다. **완료 기준**: 두 프레임워크 중 하나 선택, 선택 이유를 [decisions/](../decisions/) 에 기록 --- ## Step 3: Agent 워크플로 정의 **목표**: 선택한 프레임워크에서 모든 Skill을 등록하고 워크플로를 정의한다. ### 태스크 - [ ] 모든 Skill 등록 - `helm_diff`, `breaking_change_check`, `generate_upgrade_doc` - `update_docs_file`, `create_pr`, `deploy_validate` - [ ] 워크플로 정의 (Cron 스케줄 기반) ```yaml workflow: helm-upgrade-automation schedule: "0 8 * * *" steps: - name: detect-versions skill: chart_version_detector output: new_versions[] # current_version + latest_version - name: generate-diffs skill: helm_diff for_each: new_versions output: diff_json[] # 내부에서 최신 차트 pull + 버전 디렉토리 생성 수행 - name: check-breaking skill: breaking_change_check for_each: diff_json output: breaking_results[] - name: generate-docs skill: generate_upgrade_doc # Skill 내부에서 severity 분기: breaking=true or severity≥high → LLM 심층 요약, 그 외 → 간이 템플릿 for_each: [diff_json, breaking_results] output: docs[] - name: update-docs skill: update_docs_file for_each: docs output: updated[] - name: validate-deployments skill: deploy_validate condition: breaking=false and severity=high이면 스킵 → 사람 승인 필요 for_each: updated output: validation_results[] - name: create-prs skill: create_pr for_each: updated output: pr_urls[] - name: notify channel: slack message: "Helm upgrade PRs created: {pr_urls}" ``` - [ ] K8s 이벤트 기반 트리거 설정 (선택: ArgoCD App 상태 변화 등) - [ ] Staging 클러스터에서 E2E 동작 확인 **완료 기준**: Staging에서 airflow chart 신규 버전 감지 → PR 생성까지 E2E 자동 실행 --- ## Step 4: 보안 정책 수립 후 운영 **목표**: 운영 클러스터 투입 전 보안 정책을 확립한다. ### 태스크 - [ ] RBAC 설정 (test namespace만 허용) ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: helm-test rules: - apiGroups: ["apps"] resources: ["deployments", "statefulsets"] verbs: ["get", "list", "create", "update", "delete"] - apiGroups: [""] resources: ["pods", "services", "configmaps"] verbs: ["get", "list", "create", "update", "delete"] ``` - [ ] NetworkPolicy 설정 (허용 egress만 통과) - GitHub API (`api.github.com`) - LLM API (`api.anthropic.com` 또는 `api.openai.com`) - Slack API (알림용) - [ ] Skill allowlist 관리 (shell skill 비활성화 필수) - [ ] 입력 sanitization (Prompt Injection 방지) - [ ] `breaking=true` PR은 사람이 직접 머지 승인 유지 **완료 기준**: 보안 체크리스트 전항목 충족, 운영 클러스터 투입 --- ## 관련 문서 - [design/05-on-cluster-agent.md](../design/05-on-cluster-agent.md) — Agent 배포 설계 + 보안 고려사항 - [design/04-skill-interface.md](../design/04-skill-interface.md) — Agent가 호출할 Skill 인터페이스 - [decisions/001-agentic-first.md](../decisions/001-agentic-first.md) — 파이프라인 건너뛰기 결정 배경