feat(zio-harness): v1.3.0 — hermes(전령) 에이전트 추가 (5→6인 파이프라인)
- references/hermes.md 신설: ①메시지·알림 전파 ②에이전트 간 산출물 중계 ③배포·전달(Gitea commit/push·배포 확인·릴리즈 노트, 03_delivery.md) - bot PASS 게이트 필수, force push/--no-verify 금지, 자격증명 마스킹 - SKILL.md 배선: Deploy 작업 유형·t5 태스크·bot→hermes 통신·에러 핸들링 - plugin.json/marketplace.json v1.3.0, docs·PROJECT_MAP·CLAUDE.md 동기화 - zioinfo_team.png 6인 다이어그램 재생성 (Hermes 골드 링) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
1876e3a18a
commit
2517bc7489
@ -15,8 +15,8 @@
|
|||||||
{
|
{
|
||||||
"name": "zio-harness",
|
"name": "zio-harness",
|
||||||
"source": "./plugins/zio-harness",
|
"source": "./plugins/zio-harness",
|
||||||
"description": "React + Spring Boot + Mobile App 풀스택 개발 하네스. orchestrator·analyst·designer·agent·bot 에이전트 팀이 기능 개발·디자인(선 SVG 아이콘·디자인 토큰·Stitch 의뢰 design.md)·테스트·배포를 파이프라인으로 처리. PROJECT_MAP.md로 폴더 구조를 세션 간 기억. 설치만으로 graphify 지식 그래프가 소스를 자동 분석(SessionStart 훅)하고, KINTEX 도메인 md 지식 베이스를 내장.",
|
"description": "React + Spring Boot + Mobile App 풀스택 개발 하네스. orchestrator·analyst·designer·agent·bot·hermes 에이전트 팀이 기능 개발·디자인(선 SVG 아이콘·디자인 토큰·Stitch 의뢰 design.md)·테스트·전달(전령 hermes — Gitea push·배포 확인·산출물 중계·알림)을 파이프라인으로 처리. PROJECT_MAP.md로 폴더 구조를 세션 간 기억. 설치만으로 graphify 지식 그래프가 소스를 자동 분석(SessionStart 훅)하고, KINTEX 도메인 md 지식 베이스를 내장.",
|
||||||
"version": "1.2.0"
|
"version": "1.3.0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "proposal-builder",
|
"name": "proposal-builder",
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
| 2026-06-17 | zio-harness 독립 플러그인 분리 (`plugins/zio-harness/`, v1.0.1) | 마켓플레이스·폴더 구조 | 단독 설치 지원, harness 플러그인과 스킬 소유권 분리 |
|
| 2026-06-17 | zio-harness 독립 플러그인 분리 (`plugins/zio-harness/`, v1.0.1) | 마켓플레이스·폴더 구조 | 단독 설치 지원, harness 플러그인과 스킬 소유권 분리 |
|
||||||
| 2026-06-17 | Agent Teams API 사용법 정정 (SKILL.md Phase 2–3 + 오케스트레이터 템플릿) | zio-harness·harness | `TeamCreate(members[])`/`TaskCreate(tasks[])`가 실제 실험 API와 불일치 → 빈 팀+Agent spawn / 개별 TaskCreate+TaskUpdate로 수정 |
|
| 2026-06-17 | Agent Teams API 사용법 정정 (SKILL.md Phase 2–3 + 오케스트레이터 템플릿) | zio-harness·harness | `TeamCreate(members[])`/`TaskCreate(tasks[])`가 실제 실험 API와 불일치 → 빈 팀+Agent spawn / 개별 TaskCreate+TaskUpdate로 수정 |
|
||||||
| 2026-07-17 | **v1.2.0 — designer 에이전트 추가(4→5인 파이프라인)**: analyst→designer(UI 작업 시)→agent→bot. `references/designer.md` 신설 — UI/UX 스펙(01_design_spec.md)·디자인 토큰·선 SVG 아이콘 + **스티치(Stitch) 의뢰 design.md 생성·MCP 연결 시 직접 요청**. zioinfo_team.png(5인 다이어그램)와 실제 동작 일치화 | plugins/zio-harness | "팀 이미지에 Designer 빠짐 → 실제 플러그인도 그렇게 동작하게" + "디자이너 md에 스티치 MCP design.md 생성 추가" 요청 |
|
| 2026-07-17 | **v1.2.0 — designer 에이전트 추가(4→5인 파이프라인)**: analyst→designer(UI 작업 시)→agent→bot. `references/designer.md` 신설 — UI/UX 스펙(01_design_spec.md)·디자인 토큰·선 SVG 아이콘 + **스티치(Stitch) 의뢰 design.md 생성·MCP 연결 시 직접 요청**. zioinfo_team.png(5인 다이어그램)와 실제 동작 일치화 | plugins/zio-harness | "팀 이미지에 Designer 빠짐 → 실제 플러그인도 그렇게 동작하게" + "디자이너 md에 스티치 MCP design.md 생성 추가" 요청 |
|
||||||
|
| 2026-07-21 | **v1.3.0 — hermes(전령) 에이전트 추가(5→6인 파이프라인)**: analyst→designer(UI 시)→agent→bot→hermes(전달 시). `references/hermes.md` 신설 — ①메시지·알림 전파 ②에이전트 간 산출물 중계(핸드오프 요약·`_workspace/` 인덱스) ③배포·전달(Gitea commit/push·배포 확인·릴리즈 노트, `03_delivery.md`). bot PASS 게이트 필수·force push/`--no-verify` 금지·자격증명 마스킹. SKILL.md 배선(작업 유형 Deploy·t5 태스크·bot→hermes 통신·에러 핸들링)·plugin/marketplace v1.3.0·zioinfo_team.png 6인 일치화 | plugins/zio-harness | "플러그인에 헤르메스 에이전트 추가" 요청 — 역할 3종(알림·중계·배포) 모두 채택 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -84,6 +84,7 @@ zio-harness 풀스택 개발 에이전트 팀. 4종 에이전트가 파이프라
|
|||||||
| `SKILL.md` | 오케스트레이터 진입점. 팀 구성·워크플로우·에러 핸들링·테스트 시나리오 포함 |
|
| `SKILL.md` | 오케스트레이터 진입점. 팀 구성·워크플로우·에러 핸들링·테스트 시나리오 포함 |
|
||||||
| `references/folder-map.md` | **PROJECT_MAP.md 생성·유지 시스템**. 폴더 구조 메모리 핵심 가이드 |
|
| `references/folder-map.md` | **PROJECT_MAP.md 생성·유지 시스템**. 폴더 구조 메모리 핵심 가이드 |
|
||||||
| `references/designer.md` | Designer 에이전트 — UI/UX 스펙·디자인 토큰·선 SVG 아이콘·Stitch 의뢰 design.md 생성(MCP 요청) |
|
| `references/designer.md` | Designer 에이전트 — UI/UX 스펙·디자인 토큰·선 SVG 아이콘·Stitch 의뢰 design.md 생성(MCP 요청) |
|
||||||
|
| `references/hermes.md` | Hermes 에이전트 — 전령: Gitea commit/push·배포 확인·에이전트 간 산출물 중계·최종 알림·릴리즈 노트 |
|
||||||
| `references/react.md` | React 18 + TypeScript + TanStack Query + Zustand 패턴 |
|
| `references/react.md` | React 18 + TypeScript + TanStack Query + Zustand 패턴 |
|
||||||
| `references/spring-boot.md` | Spring Boot 3.x 레이어 아키텍처 + JPA + JWT + Flyway |
|
| `references/spring-boot.md` | Spring Boot 3.x 레이어 아키텍처 + JPA + JWT + Flyway |
|
||||||
| `references/mobile.md` | React Native + Expo + React Navigation + AsyncStorage |
|
| `references/mobile.md` | React Native + Expo + React Navigation + AsyncStorage |
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
| 플러그인 | 버전 | 설명 |
|
| 플러그인 | 버전 | 설명 |
|
||||||
|----------|------|------|
|
|----------|------|------|
|
||||||
| **harness** | 1.3.1 | 에이전트 팀 & 스킬 아키텍트. 도메인/프로젝트에 맞는 하네스를 구성하고 전문 에이전트·스킬을 생성하는 메타 스킬. |
|
| **harness** | 1.3.1 | 에이전트 팀 & 스킬 아키텍트. 도메인/프로젝트에 맞는 하네스를 구성하고 전문 에이전트·스킬을 생성하는 메타 스킬. |
|
||||||
| **zio-harness** | 1.2.0 | React + Spring Boot + Mobile App 풀스택 개발 하네스. orchestrator·analyst·designer·agent·bot 5인 팀이 분석→디자인(선 SVG 아이콘·토큰·Stitch 의뢰 design.md)→개발→검증을 파이프라인으로 처리. |
|
| **zio-harness** | 1.3.0 | React + Spring Boot + Mobile App 풀스택 개발 하네스. orchestrator·analyst·designer·agent·bot·hermes 6인 팀이 분석→디자인(선 SVG 아이콘·토큰·Stitch 의뢰 design.md)→개발→검증→전달(전령 hermes — Gitea push·배포 확인·산출물 중계·알림)을 파이프라인으로 처리. |
|
||||||
| **proposal-builder** | 1.0.0 | RFP 문서 + PowerPoint 디자인 템플릿 → 제안서 자동 완성. 전문가 7인 팀이 분석→전략→기술/아키텍처→본문→비주얼→PPTX→검증. SI 구축·SM 유지보수 제안 주력. |
|
| **proposal-builder** | 1.0.0 | RFP 문서 + PowerPoint 디자인 템플릿 → 제안서 자동 완성. 전문가 7인 팀이 분석→전략→기술/아키텍처→본문→비주얼→PPTX→검증. SI 구축·SM 유지보수 제안 주력. |
|
||||||
| **zioinfo** | 1.1.0 | PM·PMO 하네스. 전문가 8인 팀(planner·risk·reporter·auditor·governance·portfolio·ai-commissioner·qa)이 계획(WBS/M/M)→리스크/변경→진척보고(EVM)→감리 대응(모의감리·지적조치)→PMO 표준/게이트→포트폴리오→외부 AI 의뢰서(스티치 design.md·젠스파크·graphify 지식그래프)→정합성 검증. 수주 후 수행 단계 주력(제안은 proposal-builder). |
|
| **zioinfo** | 1.1.0 | PM·PMO 하네스. 전문가 8인 팀(planner·risk·reporter·auditor·governance·portfolio·ai-commissioner·qa)이 계획(WBS/M/M)→리스크/변경→진척보고(EVM)→감리 대응(모의감리·지적조치)→PMO 표준/게이트→포트폴리오→외부 AI 의뢰서(스티치 design.md·젠스파크·graphify 지식그래프)→정합성 검증. 수주 후 수행 단계 주력(제안은 proposal-builder). |
|
||||||
|
|
||||||
|
|||||||
95
graphify-out/.graphify_analysis.json
Normal file
95
graphify-out/.graphify_analysis.json
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
{
|
||||||
|
"communities": {
|
||||||
|
"0": [
|
||||||
|
"docs_gen_intro_deck",
|
||||||
|
"docs_gen_intro_deck_box",
|
||||||
|
"docs_gen_intro_deck_card",
|
||||||
|
"docs_gen_intro_deck_footer",
|
||||||
|
"docs_gen_intro_deck_header",
|
||||||
|
"docs_gen_intro_deck_rationale_57",
|
||||||
|
"docs_gen_intro_deck_set",
|
||||||
|
"docs_gen_intro_deck_text"
|
||||||
|
],
|
||||||
|
"1": [
|
||||||
|
"plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"plugins_zio_harness_scripts_graphify_setup_find_graphify",
|
||||||
|
"plugins_zio_harness_scripts_graphify_setup_has_module",
|
||||||
|
"plugins_zio_harness_scripts_graphify_setup_log",
|
||||||
|
"plugins_zio_harness_scripts_graphify_setup_main",
|
||||||
|
"plugins_zio_harness_scripts_graphify_setup_run_graphify"
|
||||||
|
],
|
||||||
|
"2": [
|
||||||
|
"plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck",
|
||||||
|
"plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_hex_color",
|
||||||
|
"plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_main"
|
||||||
|
],
|
||||||
|
"3": [
|
||||||
|
"plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_inspect_template",
|
||||||
|
"plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_inspect_template_main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"cohesion": {
|
||||||
|
"0": 0.4642857142857143,
|
||||||
|
"1": 0.6190476190476191,
|
||||||
|
"2": 1.0,
|
||||||
|
"3": 1.0
|
||||||
|
},
|
||||||
|
"gods": [
|
||||||
|
{
|
||||||
|
"id": "docs_gen_intro_deck_text",
|
||||||
|
"label": "text()",
|
||||||
|
"degree": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"label": "ensure_installed()",
|
||||||
|
"degree": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_log",
|
||||||
|
"label": "log()",
|
||||||
|
"degree": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_main",
|
||||||
|
"label": "main()",
|
||||||
|
"degree": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "docs_gen_intro_deck_box",
|
||||||
|
"label": "box()",
|
||||||
|
"degree": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "docs_gen_intro_deck_header",
|
||||||
|
"label": "header()",
|
||||||
|
"degree": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "docs_gen_intro_deck_card",
|
||||||
|
"label": "card()",
|
||||||
|
"degree": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_run_graphify",
|
||||||
|
"label": "run_graphify()",
|
||||||
|
"degree": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "docs_gen_intro_deck_set",
|
||||||
|
"label": "_set()",
|
||||||
|
"degree": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "docs_gen_intro_deck_footer",
|
||||||
|
"label": "footer()",
|
||||||
|
"degree": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"surprises": [],
|
||||||
|
"tokens": {
|
||||||
|
"input": 0,
|
||||||
|
"output": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
graphify-out/cache/stat-index.json
vendored
Normal file
1
graphify-out/cache/stat-index.json
vendored
Normal file
File diff suppressed because one or more lines are too long
525
graphify-out/graph.json
Normal file
525
graphify-out/graph.json
Normal file
@ -0,0 +1,525 @@
|
|||||||
|
{
|
||||||
|
"directed": false,
|
||||||
|
"multigraph": false,
|
||||||
|
"graph": {},
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"label": "gen_intro_deck.py",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L1",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "gen_intro_deck.py"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "_set()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L38",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck_set",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "_set()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "box()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L43",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck_box",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "box()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "text()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L55",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck_text",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "text()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "header()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L73",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck_header",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "header()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "footer()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L87",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck_footer",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "footer()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "card()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L92",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck_card",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "card()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "runs: list of paragraphs; each para = list of (txt, size, bold, color).",
|
||||||
|
"file_type": "rationale",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L57",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "docs_gen_intro_deck_rationale_57",
|
||||||
|
"community": 0,
|
||||||
|
"norm_label": "runs: list of paragraphs; each para = list of (txt, size, bold, color)."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "build_deck.py",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/build_deck.py",
|
||||||
|
"source_location": "L1",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck",
|
||||||
|
"community": 2,
|
||||||
|
"norm_label": "build_deck.py"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "hex_color()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/build_deck.py",
|
||||||
|
"source_location": "L22",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_hex_color",
|
||||||
|
"community": 2,
|
||||||
|
"norm_label": "hex_color()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "main()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/build_deck.py",
|
||||||
|
"source_location": "L26",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_main",
|
||||||
|
"community": 2,
|
||||||
|
"norm_label": "main()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "inspect_template.py",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/inspect_template.py",
|
||||||
|
"source_location": "L1",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_inspect_template",
|
||||||
|
"community": 3,
|
||||||
|
"norm_label": "inspect_template.py"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "main()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/inspect_template.py",
|
||||||
|
"source_location": "L12",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_inspect_template_main",
|
||||||
|
"community": 3,
|
||||||
|
"norm_label": "main()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "graphify_setup.py",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L1",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"community": 1,
|
||||||
|
"norm_label": "graphify_setup.py"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "log()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L23",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_log",
|
||||||
|
"community": 1,
|
||||||
|
"norm_label": "log()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "has_module()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L27",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_has_module",
|
||||||
|
"community": 1,
|
||||||
|
"norm_label": "has_module()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "find_graphify()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L34",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_find_graphify",
|
||||||
|
"community": 1,
|
||||||
|
"norm_label": "find_graphify()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "ensure_installed()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L46",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"community": 1,
|
||||||
|
"norm_label": "ensure_installed()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "run_graphify()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L61",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_run_graphify",
|
||||||
|
"community": 1,
|
||||||
|
"norm_label": "run_graphify()"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "main()",
|
||||||
|
"file_type": "code",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L70",
|
||||||
|
"_origin": "ast",
|
||||||
|
"id": "plugins_zio_harness_scripts_graphify_setup_main",
|
||||||
|
"community": 1,
|
||||||
|
"norm_label": "main()"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L43",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck",
|
||||||
|
"target": "docs_gen_intro_deck_box",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L92",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck",
|
||||||
|
"target": "docs_gen_intro_deck_card",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L87",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck",
|
||||||
|
"target": "docs_gen_intro_deck_footer",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L73",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck",
|
||||||
|
"target": "docs_gen_intro_deck_header",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L38",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck",
|
||||||
|
"target": "docs_gen_intro_deck_set",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L55",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck",
|
||||||
|
"target": "docs_gen_intro_deck_text",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L69",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck_text",
|
||||||
|
"target": "docs_gen_intro_deck_set",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L93",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck_card",
|
||||||
|
"target": "docs_gen_intro_deck_box",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L75",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck_header",
|
||||||
|
"target": "docs_gen_intro_deck_box",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L98",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck_card",
|
||||||
|
"target": "docs_gen_intro_deck_text",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L88",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck_footer",
|
||||||
|
"target": "docs_gen_intro_deck_text",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L81",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck_header",
|
||||||
|
"target": "docs_gen_intro_deck_text",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "rationale_for",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "docs/gen_intro_deck.py",
|
||||||
|
"source_location": "L57",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "docs_gen_intro_deck_rationale_57",
|
||||||
|
"target": "docs_gen_intro_deck_text",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/build_deck.py",
|
||||||
|
"source_location": "L22",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck",
|
||||||
|
"target": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_hex_color",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/build_deck.py",
|
||||||
|
"source_location": "L26",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck",
|
||||||
|
"target": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_main",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/build_deck.py",
|
||||||
|
"source_location": "L67",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_main",
|
||||||
|
"target": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_build_deck_hex_color",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/inspect_template.py",
|
||||||
|
"source_location": "L12",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_inspect_template",
|
||||||
|
"target": "plugins_proposal_builder_skills_proposal_builder_orchestrator_scripts_inspect_template_main",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L46",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L34",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_find_graphify",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L27",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_has_module",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L23",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_log",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L70",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_main",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "contains",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L61",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_run_graphify",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L49",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_log",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L85",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup_main",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_log",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L66",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup_run_graphify",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_log",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L47",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_has_module",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L47",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_find_graphify",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L83",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup_main",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_ensure_installed",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"relation": "calls",
|
||||||
|
"context": "call",
|
||||||
|
"confidence": "EXTRACTED",
|
||||||
|
"source_file": "plugins/zio-harness/scripts/graphify_setup.py",
|
||||||
|
"source_location": "L89",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": "plugins_zio_harness_scripts_graphify_setup_main",
|
||||||
|
"target": "plugins_zio_harness_scripts_graphify_setup_run_graphify",
|
||||||
|
"confidence_score": 1.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hyperedges": [],
|
||||||
|
"built_at_commit": "1ef2235939c32a595f463b6ed0bec31cf1f61de1"
|
||||||
|
}
|
||||||
47
graphify-out/manifest.json
Normal file
47
graphify-out/manifest.json
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
".claude-plugin/marketplace.json": {
|
||||||
|
"mtime": 1783864386.2132406,
|
||||||
|
"ast_hash": "9d0b775da9346abaa5e715685ff57eeb",
|
||||||
|
"semantic_hash": "9d0b775da9346abaa5e715685ff57eeb"
|
||||||
|
},
|
||||||
|
".claude-plugin/plugin.json": {
|
||||||
|
"mtime": 1781701993.8895385,
|
||||||
|
"ast_hash": "e3c9cc6c34c30731c419cdb1339445c0",
|
||||||
|
"semantic_hash": "e3c9cc6c34c30731c419cdb1339445c0"
|
||||||
|
},
|
||||||
|
"docs/gen_intro_deck.py": {
|
||||||
|
"mtime": 1782214037.9495027,
|
||||||
|
"ast_hash": "f83ce7bfd9c619a9cec19faeeb0aeddc",
|
||||||
|
"semantic_hash": "f83ce7bfd9c619a9cec19faeeb0aeddc"
|
||||||
|
},
|
||||||
|
"plugins/proposal-builder/.claude-plugin/plugin.json": {
|
||||||
|
"mtime": 1781955526.9070086,
|
||||||
|
"ast_hash": "14f34288f82cf74c29fc20ab7fced9c0",
|
||||||
|
"semantic_hash": "14f34288f82cf74c29fc20ab7fced9c0"
|
||||||
|
},
|
||||||
|
"plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/build_deck.py": {
|
||||||
|
"mtime": 1781955264.4767685,
|
||||||
|
"ast_hash": "271c0bebbd218952ee590fb7b80269dc",
|
||||||
|
"semantic_hash": "271c0bebbd218952ee590fb7b80269dc"
|
||||||
|
},
|
||||||
|
"plugins/proposal-builder/skills/proposal-builder-orchestrator/scripts/inspect_template.py": {
|
||||||
|
"mtime": 1781955238.9461975,
|
||||||
|
"ast_hash": "5350a20f8502e2aefb0fabb7cdbe5a6f",
|
||||||
|
"semantic_hash": "5350a20f8502e2aefb0fabb7cdbe5a6f"
|
||||||
|
},
|
||||||
|
"plugins/zio-harness/.claude-plugin/plugin.json": {
|
||||||
|
"mtime": 1783864406.2638495,
|
||||||
|
"ast_hash": "57f91960099c8f2f29b1952a9f2345d0",
|
||||||
|
"semantic_hash": "57f91960099c8f2f29b1952a9f2345d0"
|
||||||
|
},
|
||||||
|
"plugins/zio-harness/hooks/hooks.json": {
|
||||||
|
"mtime": 1783864316.2916987,
|
||||||
|
"ast_hash": "64710c6c1257f91d1dce6d24dea97b23",
|
||||||
|
"semantic_hash": "64710c6c1257f91d1dce6d24dea97b23"
|
||||||
|
},
|
||||||
|
"plugins/zio-harness/scripts/graphify_setup.py": {
|
||||||
|
"mtime": 1783864304.181733,
|
||||||
|
"ast_hash": "533a297ac099217afdf6c827d8ebc931",
|
||||||
|
"semantic_hash": "533a297ac099217afdf6c827d8ebc931"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "zio-harness",
|
"name": "zio-harness",
|
||||||
"description": "React + Spring Boot + Mobile App 풀스택 개발 하네스. orchestrator·analyst·designer·agent·bot 에이전트 팀이 기능 개발·디자인(선 SVG 아이콘·디자인 토큰·Stitch 의뢰 design.md)·테스트·배포를 파이프라인으로 처리. PROJECT_MAP.md로 폴더 구조를 세션 간 기억. 설치만으로 graphify 지식 그래프가 소스를 자동 분석(SessionStart 훅)하고, KINTEX 도메인 md 지식 베이스를 내장.",
|
"description": "React + Spring Boot + Mobile App 풀스택 개발 하네스. orchestrator·analyst·designer·agent·bot·hermes 에이전트 팀이 기능 개발·디자인(선 SVG 아이콘·디자인 토큰·Stitch 의뢰 design.md)·테스트·전달(전령 hermes — Gitea push·배포 확인·산출물 중계·알림)을 파이프라인으로 처리. PROJECT_MAP.md로 폴더 구조를 세션 간 기억. 설치만으로 graphify 지식 그래프가 소스를 자동 분석(SessionStart 훅)하고, KINTEX 도메인 md 지식 베이스를 내장.",
|
||||||
"version": "1.2.0",
|
"version": "1.3.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "ythong",
|
"name": "ythong",
|
||||||
"url": "https://git.zioinfo.co.kr/ythong"
|
"url": "https://git.zioinfo.co.kr/ythong"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: zio-harness
|
name: zio-harness
|
||||||
description: "React + Spring Boot + Mobile App 풀스택 개발 하네스. (1) 'zio 실행', 'zio-harness 시작', '풀스택 개발 시작' 요청 시, (2) React 컴포넌트/화면 개발, Spring Boot API 개발, 모바일 앱 개발 요청 시, (3) '프로젝트 분석', '폴더 구조 파악', 'PROJECT_MAP 업데이트' 요청 시, (4) Playwright E2E 테스트, 데이터베이스 MCP 작업 요청 시, (5) 기능 추가, 버그 수정, 리팩터링, 코드 리뷰 요청 시, (6) UI 디자인, 화면 시안, 디자인 시스템/토큰, 선(line) SVG 아이콘 제작 요청 시, (7) 오케스트레이터·분석가·디자이너·봇·에이전트 팀 구성 요청 시 반드시 이 스킬을 사용하라. 다시 실행, 재실행, 업데이트, 보완 요청도 포함."
|
description: "React + Spring Boot + Mobile App 풀스택 개발 하네스. (1) 'zio 실행', 'zio-harness 시작', '풀스택 개발 시작' 요청 시, (2) React 컴포넌트/화면 개발, Spring Boot API 개발, 모바일 앱 개발 요청 시, (3) '프로젝트 분석', '폴더 구조 파악', 'PROJECT_MAP 업데이트' 요청 시, (4) Playwright E2E 테스트, 데이터베이스 MCP 작업 요청 시, (5) 기능 추가, 버그 수정, 리팩터링, 코드 리뷰 요청 시, (6) UI 디자인, 화면 시안, 디자인 시스템/토큰, 선(line) SVG 아이콘 제작 요청 시, (7) 배포, Gitea push, 전달, 릴리즈 노트, 결과 알림, 헤르메스(전령) 요청 시, (8) 오케스트레이터·분석가·디자이너·봇·에이전트·전령 팀 구성 요청 시 반드시 이 스킬을 사용하라. 다시 실행, 재실행, 업데이트, 보완 요청도 포함."
|
||||||
---
|
---
|
||||||
|
|
||||||
# zio-harness — Full-Stack Dev Orchestrator
|
# zio-harness — Full-Stack Dev Orchestrator
|
||||||
@ -10,7 +10,7 @@ React + Spring Boot + Mobile App 풀스택 개발을 에이전트 팀이 조율
|
|||||||
## 실행 모드: 에이전트 팀 (파이프라인 패턴)
|
## 실행 모드: 에이전트 팀 (파이프라인 패턴)
|
||||||
|
|
||||||
```
|
```
|
||||||
analyst → designer(UI 작업 시) → agent → bot → (orchestrator 종합)
|
analyst → designer(UI 작업 시) → agent → bot → hermes(전달·배포 시) → (orchestrator 종합)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 에이전트 구성
|
## 에이전트 구성
|
||||||
@ -21,8 +21,9 @@ analyst → designer(UI 작업 시) → agent → bot → (orchestrator 종합)
|
|||||||
| designer | UI/UX 설계·디자인 토큰·컴포넌트 스펙·선 SVG 아이콘·스티치(Stitch) 의뢰 design.md 생성(MCP 연결 시 직접 요청) | `references/designer.md` | `_workspace/01_design_spec.md` + `assets/icons/*.svg` (+ 필요 시 `design.md`) |
|
| designer | UI/UX 설계·디자인 토큰·컴포넌트 스펙·선 SVG 아이콘·스티치(Stitch) 의뢰 design.md 생성(MCP 연결 시 직접 요청) | `references/designer.md` | `_workspace/01_design_spec.md` + `assets/icons/*.svg` (+ 필요 시 `design.md`) |
|
||||||
| agent | React/Spring Boot/Mobile 코드 구현 | `references/react.md`, `spring-boot.md`, `mobile.md` | 실제 코드 파일 |
|
| agent | React/Spring Boot/Mobile 코드 구현 | `references/react.md`, `spring-boot.md`, `mobile.md` | 실제 코드 파일 |
|
||||||
| bot | 테스트 실행·빌드·린트·DB 마이그레이션 | `references/playwright.md`, `database.md` | `_workspace/02_bot_report.md` |
|
| bot | 테스트 실행·빌드·린트·DB 마이그레이션 | `references/playwright.md`, `database.md` | `_workspace/02_bot_report.md` |
|
||||||
|
| hermes | 전령 — 검증 통과 산출물의 Gitea commit/push·배포 트리거·배포 확인, 에이전트 간 산출물 중계, 최종 알림·릴리즈 노트 | `references/hermes.md` | `_workspace/03_delivery.md` |
|
||||||
|
|
||||||
> designer는 **UI가 있는 작업에만** 참여한다 (API만·DB만·리팩터링 작업은 3인 파이프라인).
|
> designer는 **UI가 있는 작업에만**, hermes는 **전달·배포·알림이 있는 작업에만** 참여한다 (분석·로컬 수정만은 3인 파이프라인).
|
||||||
|
|
||||||
## 참조 파일 로딩 가이드
|
## 참조 파일 로딩 가이드
|
||||||
|
|
||||||
@ -35,7 +36,8 @@ analyst → designer(UI 작업 시) → agent → bot → (orchestrator 종합)
|
|||||||
| E2E 테스트 | `references/playwright.md` |
|
| E2E 테스트 | `references/playwright.md` |
|
||||||
| DB/MCP 작업 | `references/database.md` |
|
| DB/MCP 작업 | `references/database.md` |
|
||||||
| UI/UX 디자인·아이콘 제작 | `references/designer.md` |
|
| UI/UX 디자인·아이콘 제작 | `references/designer.md` |
|
||||||
| 에이전트 설계 | `references/orchestrator.md`, `references/analyst.md`, `references/designer.md`, `references/bot.md`, `references/agent.md` |
|
| 배포·push·전달·알림 | `references/hermes.md` |
|
||||||
|
| 에이전트 설계 | `references/orchestrator.md`, `references/analyst.md`, `references/designer.md`, `references/bot.md`, `references/agent.md`, `references/hermes.md` |
|
||||||
| KINTEX 도메인 지식 | `knowledge/kintex/` (기획서·설계·분석·백로그 등 md 전체) |
|
| KINTEX 도메인 지식 | `knowledge/kintex/` (기획서·설계·분석·백로그 등 md 전체) |
|
||||||
| GUARDiA 전사 지식 | `knowledge/guardia/` (솔루션 카탈로그·표준 프레임워크·운영 CI/CD·개발 교훈) |
|
| GUARDiA 전사 지식 | `knowledge/guardia/` (솔루션 카탈로그·표준 프레임워크·운영 CI/CD·개발 교훈) |
|
||||||
|
|
||||||
@ -106,6 +108,7 @@ _workspace/ 존재 여부 확인
|
|||||||
- **Analysis**: 코드/구조 분석만
|
- **Analysis**: 코드/구조 분석만
|
||||||
- **Setup**: 초기 프로젝트 설정
|
- **Setup**: 초기 프로젝트 설정
|
||||||
- **DocMap**: PROJECT_MAP.md 생성/업데이트만
|
- **DocMap**: PROJECT_MAP.md 생성/업데이트만
|
||||||
|
- **Deploy**: 배포·push·전달·알림만 — hermes 담당
|
||||||
|
|
||||||
### Phase 2: 팀 구성
|
### Phase 2: 팀 구성
|
||||||
|
|
||||||
@ -130,14 +133,17 @@ Agent(subagent_type: "agent", team_name: "zio-dev-team", name: "agent"
|
|||||||
prompt: "analyst의 계획과 designer의 01_design_spec.md를 읽고 코드 구현. React/Spring Boot/Mobile 스택에 맞는 컨벤션 준수.")
|
prompt: "analyst의 계획과 designer의 01_design_spec.md를 읽고 코드 구현. React/Spring Boot/Mobile 스택에 맞는 컨벤션 준수.")
|
||||||
Agent(subagent_type: "bot", team_name: "zio-dev-team", name: "bot",
|
Agent(subagent_type: "bot", team_name: "zio-dev-team", name: "bot",
|
||||||
prompt: "구현 완료 후 테스트 실행·린트·빌드 검증. 결과를 _workspace/02_bot_report.md에 기록.")
|
prompt: "구현 완료 후 테스트 실행·린트·빌드 검증. 결과를 _workspace/02_bot_report.md에 기록.")
|
||||||
|
Agent(subagent_type: "general-purpose", team_name: "zio-dev-team", name: "hermes",
|
||||||
|
prompt: "references/hermes.md 지침대로 _workspace/02_bot_report.md PASS 확인 후 전달 패키지(_workspace/03_delivery.md)·commit/push·배포 확인·알림. push는 사용자 요청 시만. 파이프라인 중 산출물 중계 보조.")
|
||||||
```
|
```
|
||||||
|
|
||||||
작업 유형별 팀 조정:
|
작업 유형별 팀 조정:
|
||||||
- **Analysis/DocMap**: analyst만 spawn (팀 불필요)
|
- **Analysis/DocMap**: analyst만 spawn (팀 불필요)
|
||||||
- **Design**: designer만 spawn (필요 시 analyst 선행)
|
- **Design**: designer만 spawn (필요 시 analyst 선행)
|
||||||
- **Test**: bot만 spawn
|
- **Test**: bot만 spawn
|
||||||
- **Feature(UI 포함)**: 4인 전체 파이프라인 (analyst → designer → agent → bot)
|
- **Deploy**: hermes만 spawn (검증 리포트 없으면 bot 선행)
|
||||||
- **Feature(UI 없음)/Bug/Refactor**: designer 제외 3인 파이프라인
|
- **Feature(UI 포함 + 전달)**: 5인 전체 파이프라인 (analyst → designer → agent → bot → hermes)
|
||||||
|
- **Feature(UI 없음)/Bug/Refactor**: designer 제외 — 전달·배포 요청 있으면 hermes 포함, 없으면 3인 파이프라인
|
||||||
|
|
||||||
### Phase 3: 작업 등록 및 실행
|
### Phase 3: 작업 등록 및 실행
|
||||||
|
|
||||||
@ -159,6 +165,10 @@ TaskUpdate(task: t3, owner: "agent", blockedBy: [t2]) # UI 없는 작업은 bl
|
|||||||
t4 = TaskCreate(subject: "테스트 및 검증",
|
t4 = TaskCreate(subject: "테스트 및 검증",
|
||||||
description: "구현 코드 테스트 실행. _workspace/02_bot_report.md 작성.")
|
description: "구현 코드 테스트 실행. _workspace/02_bot_report.md 작성.")
|
||||||
TaskUpdate(task: t4, owner: "bot", blockedBy: [t3])
|
TaskUpdate(task: t4, owner: "bot", blockedBy: [t3])
|
||||||
|
|
||||||
|
t5 = TaskCreate(subject: "전달·배포·알림 (전달 작업 시)",
|
||||||
|
description: "02_bot_report.md PASS 확인 → _workspace/03_delivery.md·commit/push(요청 시)·배포 확인·최종 알림.")
|
||||||
|
TaskUpdate(task: t5, owner: "hermes", blockedBy: [t4])
|
||||||
```
|
```
|
||||||
|
|
||||||
팀원 간 통신 프로토콜 — `SendMessage`는 `{to, summary, message}` 형식이며, 작업 완료는 `TaskUpdate`로 `completed` 처리하면 리더에게 자동 통지된다:
|
팀원 간 통신 프로토콜 — `SendMessage`는 `{to, summary, message}` 형식이며, 작업 완료는 `TaskUpdate`로 `completed` 처리하면 리더에게 자동 통지된다:
|
||||||
@ -166,13 +176,17 @@ TaskUpdate(task: t4, owner: "bot", blockedBy: [t3])
|
|||||||
- designer → agent: `SendMessage(to: "agent", summary: "디자인 스펙 완료", message: "_workspace/01_design_spec.md + assets/icons 참조. 구현 시작.")`
|
- designer → agent: `SendMessage(to: "agent", summary: "디자인 스펙 완료", message: "_workspace/01_design_spec.md + assets/icons 참조. 구현 시작.")`
|
||||||
- agent → bot: `SendMessage(to: "bot", summary: "구현 완료", message: "테스트 실행 요청.")`
|
- agent → bot: `SendMessage(to: "bot", summary: "구현 완료", message: "테스트 실행 요청.")`
|
||||||
- bot → designer: 시각 QA 실패(레이아웃 깨짐·대비 미달) 시 스펙 보완 요청
|
- bot → designer: 시각 QA 실패(레이아웃 깨짐·대비 미달) 시 스펙 보완 요청
|
||||||
|
- bot → hermes: `SendMessage(to: "hermes", summary: "검증 통과", message: "_workspace/02_bot_report.md PASS. 전달 시작.")`
|
||||||
|
- hermes → agent: push 거부·배포 실패가 코드 원인일 때 수정 요청
|
||||||
|
- hermes(중계): 단계 전환 시 이전 산출물 경로+요지를 다음 담당자에게 요약 전달 (대용량은 _workspace/ 파일로)
|
||||||
- 각 팀원: 작업 끝나면 `TaskUpdate(task, status: "completed")` → 리더(오케스트레이터)가 태스크 완료 알림과 `_workspace/` 파일로 진행 파악 (별도 보고 메시지 불필요)
|
- 각 팀원: 작업 끝나면 `TaskUpdate(task, status: "completed")` → 리더(오케스트레이터)가 태스크 완료 알림과 `_workspace/` 파일로 진행 파악 (별도 보고 메시지 불필요)
|
||||||
|
|
||||||
### Phase 4: 결과 종합 및 PROJECT_MAP 업데이트
|
### Phase 4: 결과 종합 및 PROJECT_MAP 업데이트
|
||||||
|
|
||||||
1. `_workspace/02_bot_report.md` 확인 — 실패 항목 있으면 agent에 재작업 지시(`SendMessage`)
|
1. `_workspace/02_bot_report.md` 확인 — 실패 항목 있으면 agent에 재작업 지시(`SendMessage`)
|
||||||
2. 새 파일·폴더가 생성된 경우 `PROJECT_MAP.md` 업데이트 (`references/folder-map.md` 참조)
|
2. 전달 작업이면 `_workspace/03_delivery.md` 확인 — push·배포·알림 결과 검수
|
||||||
3. 변경 사항 요약을 사용자에게 보고
|
3. 새 파일·폴더가 생성된 경우 `PROJECT_MAP.md` 업데이트 (`references/folder-map.md` 참조)
|
||||||
|
4. 변경 사항 요약을 사용자에게 보고
|
||||||
4. 모든 작업 완료 후 팀원 종료(`SendMessage(to, message: {type: "shutdown_request"})`) → `TeamDelete`로 팀·태스크 정리
|
4. 모든 작업 완료 후 팀원 종료(`SendMessage(to, message: {type: "shutdown_request"})`) → `TeamDelete`로 팀·태스크 정리
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -184,6 +198,8 @@ TaskUpdate(task: t4, owner: "bot", blockedBy: [t3])
|
|||||||
| analyst 분석 실패 | 기본 파일 스캔으로 대체, 계속 진행 |
|
| analyst 분석 실패 | 기본 파일 스캔으로 대체, 계속 진행 |
|
||||||
| agent 구현 오류 | 오류 메시지를 analyst에 전달, 재계획 1회 |
|
| agent 구현 오류 | 오류 메시지를 analyst에 전달, 재계획 1회 |
|
||||||
| bot 테스트 실패 | 실패 로그를 agent에 전달, 수정 1회 재시도 |
|
| bot 테스트 실패 | 실패 로그를 agent에 전달, 수정 1회 재시도 |
|
||||||
|
| hermes push 거부 | 원인 진단(behind·훅 실패) 후 보고 — force push·`--no-verify` 우회 금지 |
|
||||||
|
| hermes 배포 확인 실패 | 배포 로그·health 결과를 agent에 전달, 코드 원인이면 수정 후 재전달 1회 |
|
||||||
| PROJECT_MAP.md 손상 | 삭제 후 재생성 (folder-map.md 절차 따름) |
|
| PROJECT_MAP.md 손상 | 삭제 후 재생성 (folder-map.md 절차 따름) |
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -198,7 +214,13 @@ TaskUpdate(task: t4, owner: "bot", blockedBy: [t3])
|
|||||||
5. designer → 로그인 화면 레이아웃·토큰·컴포넌트 스펙 + 선 SVG 아이콘 (`01_design_spec.md`)
|
5. designer → 로그인 화면 레이아웃·토큰·컴포넌트 스펙 + 선 SVG 아이콘 (`01_design_spec.md`)
|
||||||
6. agent → React LoginPage, Spring Boot AuthController, Mobile LoginScreen 구현 (디자인 스펙 준수)
|
6. agent → React LoginPage, Spring Boot AuthController, Mobile LoginScreen 구현 (디자인 스펙 준수)
|
||||||
7. bot → Playwright E2E, JUnit 테스트 실행
|
7. bot → Playwright E2E, JUnit 테스트 실행
|
||||||
8. PROJECT_MAP.md 업데이트
|
8. hermes → 02_bot_report.md PASS 확인 → 03_delivery.md·commit/push(사용자 요청 시)·최종 알림
|
||||||
|
9. PROJECT_MAP.md 업데이트
|
||||||
|
|
||||||
|
**정상 흐름 — 배포·전달(Deploy):**
|
||||||
|
1. 사용자: "이번 변경 Gitea에 push하고 배포 확인해줘"
|
||||||
|
2. hermes 단독 spawn → 기존 `02_bot_report.md` PASS 확인 (없으면 bot 선행 spawn)
|
||||||
|
3. 전달 패키지(03_delivery.md) 구성 → 변경 파일만 add → 커밋·push → webhook 배포 로그·health 확인 → 결과 보고
|
||||||
|
|
||||||
**정상 흐름 — 디자인 의뢰(Design):**
|
**정상 흐름 — 디자인 의뢰(Design):**
|
||||||
1. 사용자: "메인 히어로 이미지를 스티치에 의뢰할 design.md 만들어줘"
|
1. 사용자: "메인 히어로 이미지를 스티치에 의뢰할 design.md 만들어줘"
|
||||||
|
|||||||
75
plugins/zio-harness/skills/zio-harness/references/hermes.md
Normal file
75
plugins/zio-harness/skills/zio-harness/references/hermes.md
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# Hermes 에이전트 정의
|
||||||
|
|
||||||
|
## 역할
|
||||||
|
|
||||||
|
**전령(傳令)**을 담당한다. 세 가지 임무 — ①**메시지·알림 전파**(작업 결과를 사용자·알림 채널에 전달), ②**에이전트 간 산출물 중계**(핸드오프 요약·`_workspace/` 인덱스 관리), ③**배포·전달**(Gitea commit/push·배포 트리거·배포 확인). bot의 검증을 통과한 산출물만 바깥으로 내보내는 **최종 관문**이다. 파이프라인 위치: `analyst → designer → agent → bot → hermes`.
|
||||||
|
|
||||||
|
## 에이전트 파일 위치
|
||||||
|
|
||||||
|
`.claude/agents/hermes.md`
|
||||||
|
|
||||||
|
## 정의 템플릿
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
name: hermes
|
||||||
|
subagent_type: general-purpose
|
||||||
|
model: opus
|
||||||
|
description: "전령 에이전트. 검증 통과 산출물의 Gitea commit/push·배포 트리거·배포 확인, 에이전트 간 산출물 중계(핸드오프 요약·인덱스), 최종 결과 알림·릴리즈 노트 작성을 담당한다. 배포, push, 전달, 알림, 릴리즈 노트 요청 시 사용."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Hermes — 전령
|
||||||
|
|
||||||
|
## 핵심 역할
|
||||||
|
|
||||||
|
bot의 검증 리포트(`_workspace/02_bot_report.md`)가 PASS인 산출물을 전달 패키지로 묶어 커밋·push·배포하고, 결과를 알림으로 전파한다. 파이프라인 진행 중에는 에이전트 간 핸드오프를 중계해 산출물 유실을 막는다.
|
||||||
|
|
||||||
|
## 작업 절차
|
||||||
|
|
||||||
|
1. `_workspace/02_bot_report.md` 읽기 — **PASS 확인이 전제**. 실패 항목이 있으면 전달을 중단하고 리더에게 보고한다 (검증 없는 전달 금지)
|
||||||
|
2. 전달 패키지 구성 — `_workspace/03_delivery.md` 작성: 변경 파일 목록·변경 요약·릴리즈 노트(사용자 관점 변경사항)·후속 조치
|
||||||
|
3. Git 전달 — 변경 파일만 `git add`(경로 명시, `-A` 금지) → 컨벤션 준수 커밋 메시지 → push. **push는 사용자가 요청했거나 오케스트레이터가 명시 지시한 경우만**
|
||||||
|
4. 배포 트리거·확인 — 프로젝트에 배포 파이프라인(webhook·CI)이 있으면 push 후 배포 로그·health 엔드포인트로 반영을 확인하고 결과를 기록
|
||||||
|
5. 알림 전파 — 최종 결과 요약을 리더에게 전달. 외부 알림 채널(메신저·메일 등)은 프로젝트에 배선돼 있고 사용자가 요청한 경우에만 발송
|
||||||
|
6. (상시) 산출물 중계 — 파이프라인 단계 전환 시 이전 단계 산출물의 경로·핵심 요지를 다음 담당자에게 `SendMessage`로 요약 전달, `_workspace/` 파일 인덱스를 최신으로 유지
|
||||||
|
|
||||||
|
## 전령 원칙
|
||||||
|
|
||||||
|
- **검증이 관문이다** — bot PASS 없이 커밋·push·배포·알림을 진행하지 않는다. 게이트를 우회하면 하네스의 품질 보증이 무너진다
|
||||||
|
- **force push 금지** — 히스토리 파괴는 복구 불가능한 전달 사고다. push 거부 시 원인(behind·훅 실패)을 진단해 보고하고, `--no-verify` 우회도 금지
|
||||||
|
- **자격증명 마스킹** — 커밋·전달 패키지·알림·에러 메시지 어디에도 비밀번호·토큰·IP·SSH 계정을 남기지 않는다. remote URL에 자격증명이 포함돼 있으면 로그 인용 시 마스킹한다
|
||||||
|
- **전달은 사실만** — 릴리즈 노트·알림에는 실제 검증된 변경만 기술한다. 테스트 실패·스킵 항목은 축소 없이 명시한다
|
||||||
|
- **중계는 요약, 원본은 파일** — SendMessage에는 경로+요지만 담고, 대용량 내용은 `_workspace/` 파일로 전달한다 (컨텍스트 절약)
|
||||||
|
|
||||||
|
## _workspace/03_delivery.md 구조
|
||||||
|
|
||||||
|
\```
|
||||||
|
# Delivery Report
|
||||||
|
대상: {작업명}
|
||||||
|
## 1. 변경 파일 (경로·변경 유형)
|
||||||
|
## 2. 변경 요약 (기술 관점)
|
||||||
|
## 3. 릴리즈 노트 (사용자 관점)
|
||||||
|
## 4. 커밋/push 결과 (해시·브랜치·push 여부)
|
||||||
|
## 5. 배포 확인 (트리거·health 결과 — 해당 시)
|
||||||
|
## 6. 후속 조치 (미완 항목·다음 단계)
|
||||||
|
\```
|
||||||
|
|
||||||
|
## 재호출 지침
|
||||||
|
|
||||||
|
- 이전 `03_delivery.md`가 있으면 문서 상단에 이력 행을 추가하고 이번 전달분만 갱신한다
|
||||||
|
- push 실패 후 재호출되면 실패 원인 해소 여부를 먼저 확인하고 같은 명령을 반복하지 않는다
|
||||||
|
- 부분 재실행(특정 파일만 재전달)이면 해당 파일만 패키지에 포함한다
|
||||||
|
|
||||||
|
## 협업
|
||||||
|
|
||||||
|
- bot → hermes: 검증 통과 통지 수신 (`SendMessage`) — 전달 시작 신호
|
||||||
|
- hermes → 리더(orchestrator): 전달 완료·실패 보고
|
||||||
|
- hermes → agent: push 거부·배포 실패가 코드 원인일 때 수정 요청
|
||||||
|
- (중계) analyst/designer/agent 단계 전환 시 산출물 요약 전달 보조
|
||||||
|
```
|
||||||
|
|
||||||
|
## 팀 조정 규칙
|
||||||
|
|
||||||
|
- 전달·배포·알림이 없는 작업(분석만·디자인만·로컬 수정만)에서는 hermes를 spawn하지 않는다 — 오케스트레이터가 Phase 1 작업 유형으로 판단
|
||||||
|
- 배포·push·알림만 요청된 작업(**Deploy** 유형)은 hermes 단독 spawn (검증 리포트가 없으면 bot 선행)
|
||||||
|
- push·배포는 되돌리기 어려운 외부 반영이다 — 사용자 요청 또는 오케스트레이터의 명시 지시 없이 hermes가 자체 판단으로 실행하지 않는다
|
||||||
BIN
zioinfo_team.png
BIN
zioinfo_team.png
Binary file not shown.
|
Before Width: | Height: | Size: 305 KiB After Width: | Height: | Size: 698 KiB |
Loading…
Reference in New Issue
Block a user