@elyun/bylane 1.23.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -65,10 +65,10 @@ node src/cli.js install
65
65
  설치 후 Claude Code에서 프로젝트 디렉토리로 이동:
66
66
 
67
67
  ```
68
- /bylane setup
68
+ /bylane-setup
69
69
  ```
70
70
 
71
- 인터랙티브 설정 (GitHub 접근 방법, 알림 채널, 브랜치 패턴, 에이전트 모델).
71
+ 인터랙티브 설정 (GitHub 접근 방법, 이슈 트래커, 알림 채널, 팀 모드, 권한, 루프 모드, 브랜치 패턴, 에이전트 모델).
72
72
 
73
73
  ### 사전 점검
74
74
 
@@ -81,7 +81,7 @@ npx @elyun/bylane preflight
81
81
  또는 Claude Code에서:
82
82
 
83
83
  ```
84
- /bylane preflight
84
+ /bylane 점검해줘
85
85
  ```
86
86
 
87
87
  점검 항목: bylane.json 존재, GitHub CLI 로그인, GITHUB_TOKEN, Slack/Telegram 연동 설정.
@@ -102,15 +102,18 @@ npx @elyun/bylane preflight
102
102
 
103
103
  ## 사용법
104
104
 
105
- ### 전체 워크플로우
105
+ ### 자연어 워크플로우 (`/bylane`)
106
106
 
107
107
  ```
108
108
  /bylane 다크모드 토글 버튼 추가해줘
109
109
  /bylane issue #123 구현해줘
110
110
  /bylane PR #45 리뷰해줘
111
- /bylane 리뷰 #45 반영해줘
111
+ /bylane 리뷰 반영해줘
112
112
  ```
113
113
 
114
+ `/bylane`은 자연어 키워드를 감지하여 적절한 에이전트를 자동 실행합니다.
115
+ 서브커맨드 없이 **자연어만** 받습니다.
116
+
114
117
  ### 효과적인 지시 방법
115
118
 
116
119
  byLane은 지시 내용을 바탕으로 코드베이스를 분석하고 사용자와 문답을 거쳐 이슈를 작성합니다.
@@ -165,45 +168,66 @@ issue-agent가 이슈 본문의 "구현 방향"과 "관련 파일" 섹션을 읽
165
168
  | `/bylane 리팩토링해줘` | 범위 불명확 → 전체 분석 필요 | `/bylane useCart hook이 너무 커서 상태 관리 부분만 분리해줘` |
166
169
  | `/bylane 성능 개선` | 측정 기준 없음 | `/bylane 홈 화면 LCP가 4초 넘는데 이미지 lazy loading 추가해줘` |
167
170
 
168
- ### 개별 에이전트 실행
169
-
170
- ```
171
- /bylane analyze 프로젝트 분석 → .claude/instructions/ 생성
172
- /bylane issue [#번호 | 텍스트] 이슈 생성/분석
173
- /bylane code [#번호] 코드 구현
174
- /bylane test 테스트 실행
175
- /bylane commit 커밋 생성
176
- /bylane pr PR 생성
177
- /bylane review [#PR번호] [scope] PR 인라인 리뷰
178
- /bylane respond [#PR번호] [모드] 리뷰 반박/반영
179
- /bylane notify 알림 발송
180
- /bylane status 현재 상태 요약
181
- ```
171
+ ### 개별 에이전트 직접 실행 (`/bylane-*`)
172
+
173
+ 개별 에이전트를 직접 실행하려면 `/bylane-*` 커맨드를 사용합니다:
174
+
175
+ | 커맨드 | 설명 |
176
+ |---|---|
177
+ | `/bylane-setup` | GitHub 접근, 알림, 팀 모드, 루프, 브랜치, 모델 설정 위자드 |
178
+ | `/bylane-monitor` | TUI 대시보드 실행 안내 (에이전트 상태/큐/로그 실시간 표시) |
179
+ | `/bylane-cleanup` | 파일 권한 수정, 죽은 PID 정리, 큐 복구 일괄 실행 |
180
+ | `/bylane-analyze-agent` | 코드 스타일/디자인 토큰/아키텍처 분석 → `.claude/instructions/` 생성 |
181
+ | `/bylane-issue-agent` | 코드베이스 분석 + 문답 → 전략 스펙 포함 GitHub 이슈 작성 |
182
+ | `/bylane-code-agent` | 이슈 전략 스펙 기반 브랜치 생성 + 코드 구현 |
183
+ | `/bylane-test-agent` | 테스트 실행, FAIL 시 상세 기록으로 재시도 피드백 제공 |
184
+ | `/bylane-commit-agent` | conventional commit 메시지 자동 생성 + 커밋 |
185
+ | `/bylane-pr-agent` | 커밋 히스토리 분석 → PR 제목/요약/테스트 계획 자동 작성 |
186
+ | `/bylane-review-agent` | PR diff 라인별 인라인 리뷰 (grammar/domain/code/security) |
187
+ | `/bylane-respond-agent` | 리뷰 코멘트 accept(수정 반영) 또는 rebut(반박) 대응 |
188
+ | `/bylane-review-loop` | 설정 주기로 review 요청 PR 감지 → 자동 리뷰 실행 |
189
+ | `/bylane-respond-loop` | 설정 주기로 내 PR 리뷰/코멘트 감지 → 자동 대응 실행 |
190
+ | `/bylane-notify-agent` | Slack/Telegram 알림 발송 |
182
191
 
183
192
  ### 자동 루프
184
193
 
185
- 두 루프를 동시에 실행하면 리뷰 요청과 리뷰 대응을 완전 자동화합니다:
194
+ 두 루프를 동시에 실행하면 리뷰 요청과 리뷰 대응을 완전 자동화합니다.
195
+
196
+ #### CLI로 루프 관리 (권장)
186
197
 
187
198
  ```bash
188
- node src/review-loop.js & # 내게 요청된 PR 자동 리뷰 (5분 주기)
189
- node src/respond-loop.js & # PR 리뷰 자동 대응 (5분 주기)
199
+ npx @elyun/bylane loop start # review-loop + respond-loop 동시 시작 (tmux 또는 process)
200
+ npx @elyun/bylane loop stop # 루프 종료
201
+ npx @elyun/bylane loop status # 실행 상태 확인
190
202
  ```
191
203
 
192
- 루프 종료:
204
+ 가지 실행 모드 (`/bylane-setup`에서 설정):
193
205
 
194
- ```bash
195
- kill $(pgrep -f review-loop.js)
196
- kill $(pgrep -f respond-loop.js)
197
- # 또는 모니터에서 [s]
198
- ```
206
+ | 모드 | 설명 |
207
+ |------|------|
208
+ | `tmux` (기본) | tmux 세션에서 백그라운드 실행. 터미널 종료/SSH 끊김 시에도 유지 |
209
+ | `process` | 현재 프로세스에서 직접 실행. tmux 미설치 시 자동 fallback |
210
+
211
+ 두 모드 모두 **절대시간 기반 폴링**을 사용합니다:
212
+ - macOS 잠자기 모드 해제 직후 경과 시간 감지 → 즉시 폴링 실행
213
+ - 잠자기 중에는 CPU 정지로 실행 불가 (OS 제약)
199
214
 
200
- Claude Code에서 실행:
215
+ #### Claude Code에서 실행
201
216
 
202
217
  ```
203
- /bylane review-loop 자동 리뷰 루프 시작 (검사 범위 선택 후 시작)
204
- /bylane respond-loop 자동 대응 루프 시작
218
+ /bylane-review-loop 자동 리뷰 루프 시작 (검사 범위 선택 후 시작)
219
+ /bylane-respond-loop 자동 대응 루프 시작
205
220
  ```
206
221
 
222
+ #### 수동 실행
223
+
224
+ ```bash
225
+ node src/review-loop.js & # 내게 요청된 PR 자동 리뷰
226
+ node src/respond-loop.js & # 내 PR 리뷰 자동 대응
227
+ ```
228
+
229
+ 루프 종료: 모니터에서 `[s]` 키, 또는 `npx @elyun/bylane loop stop`
230
+
207
231
  ---
208
232
 
209
233
  ## 모니터 대시보드
@@ -265,7 +289,7 @@ npx @elyun/bylane monitor
265
289
 
266
290
  인자로도 지정 가능:
267
291
  ```
268
- /bylane review #45 code,security
292
+ /bylane PR #45 code,security만 리뷰해줘
269
293
  ```
270
294
 
271
295
  ### 인라인 코멘트
@@ -306,9 +330,9 @@ docs/REVIEW_TEMPLATE.md
306
330
  | `manual` | 코멘트별로 수정/반박/건너뜀 직접 선택 |
307
331
 
308
332
  ```
309
- /bylane respond #45 auto 모드 (기본)
310
- /bylane respond #45 manual 코멘트별 수동 선택
311
- /bylane respond #45 accept 전체 반영
333
+ /bylane #45 리뷰 대응해줘 auto 모드 (기본)
334
+ /bylane #45 리뷰 코멘트별로 보여줘 manual 모드
335
+ /bylane #45 리뷰 전부 반영해줘 accept 모드
312
336
  ```
313
337
 
314
338
  auto 모드에서는 실행 전 요약을 먼저 보여주고 확인을 받습니다:
@@ -365,7 +389,7 @@ npx @elyun/bylane memory append 123 code-agent "메모 내용" # 직접 추가
365
389
 
366
390
  ## 프로젝트 분석
367
391
 
368
- `/bylane analyze` 실행 시 현재 프로젝트를 자동 분석하여 Claude Code가 참조할 instruction 파일을 생성합니다.
392
+ `/bylane-analyze-agent` (또는 `/bylane 프로젝트 분석해줘`) 실행 시 현재 프로젝트를 자동 분석하여 Claude Code가 참조할 instruction 파일을 생성합니다.
369
393
 
370
394
  | 파일 | 내용 |
371
395
  |------|------|
@@ -376,8 +400,8 @@ npx @elyun/bylane memory append 123 code-agent "메모 내용" # 직접 추가
376
400
  ESLint/Prettier/tsconfig, Tailwind config, CSS 변수 등 설정 파일을 자동 탐색하고 실제 소스 패턴을 샘플링합니다. 분석 후 `CLAUDE.md`에 import 구문을 자동 추가합니다.
377
401
 
378
402
  ```
379
- /bylane analyze 기존 파일 있으면 확인 요청
380
- /bylane analyze --force 강제 덮어쓰기
403
+ /bylane-analyze-agent 기존 파일 있으면 확인 요청
404
+ /bylane 프로젝트 분석 강제로 해줘 강제 덮어쓰기
381
405
  ```
382
406
 
383
407
  ---
@@ -495,7 +519,7 @@ npx @elyun/bylane # 재설치/업데이트
495
519
 
496
520
  ### 루프 중복 실행
497
521
 
498
- review-loop / respond-loop는 PID를 상태 파일에 기록합니다. 모니터의 `[s]` 또는 `pgrep`으로 확인 종료하세요.
522
+ review-loop / respond-loop는 PID를 상태 파일에 기록합니다. `npx @elyun/bylane loop status`로 상태를 확인하고, `npx @elyun/bylane loop stop` 또는 모니터 `[s]` 키로 종료하세요.
499
523
 
500
524
  ### GitHub MCP vs CLI
501
525
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-analyze-agent
3
- description: 현재 프로젝트를 분석하여 코드 스타일, 디자인 토큰, 아키텍처, 폴더 구조를 `.claude/instructions/` 하위에 instruction 파일로 저장하고 CLAUDE.md에 import를 추가한다.
3
+ description: 프로젝트의 코드 스타일, 디자인 토큰, 아키텍처, 폴더 구조, 의존성을 병렬 분석하여 .claude/instructions/ 하위에 instruction 파일로 저장한다. CLAUDE.md에 import를 자동 추가하여 이후 에이전트가 프로젝트 컨텍스트를 활용할 수 있게 한다.
4
4
  ---
5
5
 
6
6
  # Analyze Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-cleanup
3
- description: 상태 파일 권한 수정, 좀비 에이전트/루프 초기화, 큐 복구를 한 번에 실행한다.
3
+ description: .bylane/state/ 파일 권한 수정(755/644), 죽은 루프 PID 정리, 30분 초과 in_progress→failed 전환, reviewing/responding→pending 큐 복구를 한 번에 실행한다.
4
4
  ---
5
5
 
6
6
  # /bylane cleanup
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-code-agent
3
- description: issue-agent 전략 스펙을 기반으로 코드를 구현한다.
3
+ description: issue-agent 작성한 전략 스펙(이슈 본문)을 기반으로 브랜치를 생성하고 코드를 구현한다. issueMemory에 진행 상황을 기록하며, 실패 시 피드백 루프로 재시도한다.
4
4
  ---
5
5
 
6
6
  # Code Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-commit-agent
3
- description: 변경된 파일들을 conventional commit 형식으로 커밋한다.
3
+ description: 변경된 파일들을 분석하여 conventional commit(feat/fix/refactor 등) 형식의 메시지를 자동 생성하고 커밋한다. 시크릿 파일은 자동 제외.
4
4
  ---
5
5
 
6
6
  # Commit Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-issue-agent
3
- description: 코드베이스 분석 + 사용자 문답으로 전략을 수립하고 GitHub 이슈를 작성한다.
3
+ description: 코드베이스를 병렬 분석(구조/스타일/의존성)하고 사용자 문답으로 요구사항을 구체화한 뒤, 전략 스펙이 포함된 GitHub 이슈를 작성한다. code-agent의 입력이 된다.
4
4
  ---
5
5
 
6
6
  # Issue Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-monitor
3
- description: byLane 실시간 TUI 모니터 대시보드 실행 안내. Claude가 직접 실행하지 않고 사용자 터미널 명령을 안내한다.
3
+ description: blessed 기반 실시간 TUI 모니터 대시보드 실행 안내. 에이전트 상태, 루프 큐, 로그를 1초 주기로 폴링하여 2열 그리드로 표시한다. 터미널에서 직접 실행해야 하므로 명령만 안내한다.
4
4
  ---
5
5
 
6
6
  # /bylane monitor
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-notify-agent
3
- description: 워크플로우 완료 또는 개입 필요 시 Slack/Telegram으로 알림을 보낸다.
3
+ description: 워크플로우 완료, 테스트 실패, 리뷰 대기, 개입 필요 등 주요 이벤트 발생 설정된 채널(Slack/Telegram)로 알림을 보낸다. bylane.json의 notifications 설정을 따른다.
4
4
  ---
5
5
 
6
6
  # Notify Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-orchestrator
3
- description: byLane 메인 오케스트레이터. 전략 수립 에이전트 파이프라인을 실행한다.
3
+ description: byLane 메인 오케스트레이터. 자연어 의도를 파싱하여 4가지 파이프라인(새 기능/기존 이슈/리뷰/단일 에이전트) 하나를 선택하고 에이전트 체인을 순차 실행한다.
4
4
  ---
5
5
 
6
6
  # byLane Orchestrator
@@ -29,21 +29,54 @@ npx @elyun/bylane models
29
29
 
30
30
  ## 의도 파싱 규칙
31
31
 
32
- | 패턴 | 실행 흐름 |
32
+ 오케스트레이터는 `/bylane`에서 **복합 의도** 또는 **기능 요청 자연어**가 넘어올 때 실행된다.
33
+ 단일 에이전트 키워드는 `/bylane`이 직접 라우팅하므로, 오케스트레이터는 **파이프라인 실행**에 집중한다.
34
+
35
+ ### 파이프라인 A — 새 기능 / 이슈 없는 구현 요청
36
+
37
+ **감지 키워드**: `만들어`, `추가해`, `구현해`, `개발해`, `넣어줘`, `바꿔줘`, `변경해`, `개선해`, `수정해`,
38
+ `리팩터`, `리팩토링`, `마이그레이션`, `~해줘` (기능 설명 포함), 이슈 번호 없음
39
+
40
+ **실행 흐름**:
41
+ 전략 수립 → `issue-agent` → `code-agent` → `test-agent` → `commit-agent` → `pr-agent` → `review-agent` → `notify-agent`
42
+
43
+ ### 파이프라인 B — 기존 이슈 구현
44
+
45
+ **감지 키워드**: `#N`, `이슈 #N`, `issue #N`, `#N 구현`, `#N 작업`, `#N 해줘`, `#N 처리`
46
+
47
+ **실행 흐름**:
48
+ 전략 수립(기존 이슈 분석) → `code-agent` → `test-agent` → `commit-agent` → `pr-agent` → `review-agent` → `notify-agent`
49
+
50
+ ### 파이프라인 C — 리뷰 관련
51
+
52
+ | 감지 키워드 | 실행 |
33
53
  |---|---|
34
- | "구현", "만들어", "추가해", 이슈 없음 | **전략 수립** issue-agent → code-agent → test-agent → commit-agent → pr-agent → review-agent notify-agent |
35
- | "issue #N 구현", "이슈 #N 작업" | **전략 수립(기존 이슈 분석)** → code-agent → test-agent → commit-agent → pr-agent → review-agent → notify-agent |
36
- | "PR #N 리뷰", "리뷰해줘" | review-agent(PR번호 전달) |
37
- | "리뷰 #N 반영", "리뷰 수락" | respond-agent(PR번호, 모드=accept) |
38
- | "리뷰 #N 반박" | respond-agent(PR번호, 모드=rebut) |
39
- | "커밋해줘" | commit-agent |
40
- | "PR 만들어줘" | pr-agent |
41
- | "테스트해줘" | test-agent |
42
- | "프로젝트 분석", "analyze" | analyze-agent |
43
-
44
- ## 전략 수립 단계 (새 기능 / 이슈 구현 시 필수)
45
-
46
- `리뷰`, `커밋`, `PR`, `테스트` 단독 요청이 아닌 경우 반드시 전략 수립 후 진행.
54
+ | `PR #N 리뷰`, `리뷰해줘`, `코드 리뷰`, `#N 봐줘` | `review-agent`(PR번호 전달) |
55
+ | `리뷰 반영`, `수락`, `accept`, `LGTM 반영`, `코멘트 반영` | `respond-agent`(모드=accept) |
56
+ | `반박`, `rebut`, `동의 해`, `이유 설명`, `왜 이렇게 했냐면` | `respond-agent`(모드=rebut) |
57
+
58
+ ### 파이프라인 D 단일 에이전트 (오케스트레이터 경유 시)
59
+
60
+ | 감지 키워드 | 실행 |
61
+ |---|---|
62
+ | `커밋`, `commit`, `커밋해줘`, `변경사항 저장` | `commit-agent` |
63
+ | `PR`, `풀리퀘`, `PR 만들어`, `PR 올려` | `pr-agent` |
64
+ | `테스트`, `test`, `검증`, `시험`, `테스트 돌려` | `test-agent` |
65
+ | `분석`, `analyze`, `구조 파악`, `코드 분석` | `analyze-agent` |
66
+ | `알림`, `notify`, `슬랙`, `텔레그램`, `통보` | `notify-agent` |
67
+
68
+ ### 파이프라인 판단 기준
69
+
70
+ 1. 이슈 번호(`#N`)가 있으면 → **파이프라인 B**
71
+ 2. 기능/변경 요청 키워드가 있고 이슈 번호 없으면 → **파이프라인 A**
72
+ 3. 리뷰/대응 키워드가 있으면 → **파이프라인 C**
73
+ 4. 단일 에이전트 키워드만 있으면 → **파이프라인 D**
74
+ 5. 복합 키워드 ("이슈 만들고 구현까지", "테스트하고 커밋") → 파이프라인 A 또는 해당 에이전트 순차 실행
75
+ 6. 판단 불가 → 사용자에게 의도 확인
76
+
77
+ ## 전략 수립 단계 (파이프라인 A, B 필수)
78
+
79
+ 파이프라인 C, D (단일 에이전트 요청)가 아닌 경우 반드시 전략 수립 후 진행.
47
80
 
48
81
  issue-agent를 `model` 파라미터와 함께 호출한다. issue-agent 내부에서 다음을 수행:
49
82
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-pr-agent
3
- description: 현재 브랜치의 커밋들로 GitHub Pull Request를 생성한다.
3
+ description: 현재 브랜치의 전체 커밋 히스토리를 분석하여 GitHub Pull Request를 생성한다. 제목, 요약, 테스트 계획을 자동 작성하고 팀 모드 시 리뷰어를 할당한다.
4
4
  ---
5
5
 
6
6
  # PR Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-respond-agent
3
- description: PR 리뷰 코멘트에 반박하거나 코드를 수정하여 반영한다.
3
+ description: PR 리뷰 코멘트를 분석하여 accept(코드 수정 후 재커밋) 또는 rebut(근거를 들어 반박 코멘트 작성) 모드로 대응한다. CHANGES_REQUESTED와 일반 코멘트 모두 처리.
4
4
  ---
5
5
 
6
6
  # Respond Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-respond-loop
3
- description: 5분 주기로 내 PR에 달린 리뷰/코멘트를 감지하여 자동으로 반박하거나 반영한다.
3
+ description: 백그라운드 폴러가 설정 주기(기본 5분)로 내 PR에 달린 CHANGES_REQUESTED/코멘트를 감지하여 respond-queue에 기록한다. pending 항목 발생 시 respond-agent를 자동 실행하며, 대응 후 새 코멘트 감지 시 재처리한다.
4
4
  ---
5
5
 
6
6
  # Respond Loop Agent
@@ -94,4 +94,4 @@ kill $(pgrep -f respond-loop.js)
94
94
 
95
95
  ## 수동 실행
96
96
 
97
- `/bylane respond-loop`
97
+ `/bylane-respond-loop`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-review-agent
3
- description: PR의 diff를 분석하여 코드 라인별 인라인 리뷰 코멘트를 작성한다.
3
+ description: PR의 diff를 파일별로 분석하여 코드 라인별 인라인 리뷰 코멘트를 작성한다. grammar/domain/code/security 4개 검사 범위를 지원하며 심각도(critical/warning/suggestion)를 분류한다.
4
4
  ---
5
5
 
6
6
  # Review Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-review-loop
3
- description: 5분 주기로 GitHub review 요청된 PR을 감지하여 자동으로 리뷰한다. 재요청 포함.
3
+ description: 백그라운드 폴러가 설정 주기(기본 5분)로 GitHub review 요청 PR을 감지하여 review-queue에 기록한다. pending 항목 발생 시 review-agent를 자동 실행하며, 리뷰 후 updatedAt 변경 시 재요청도 처리한다.
4
4
  ---
5
5
 
6
6
  # Review Loop Agent
@@ -109,4 +109,4 @@ kill $(pgrep -f review-loop.js)
109
109
 
110
110
  ## 수동 실행
111
111
 
112
- `/bylane review-loop`
112
+ `/bylane-review-loop`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-setup
3
- description: byLane 하네스 최초 설치 및 설정 위자드. /bylane setup 으로 실행.
3
+ description: byLane 최초 설치 및 설정 위자드. GitHub 접근, 이슈 트래커, 알림 채널, 팀 모드, 권한, 루프 모드, 브랜치 네이밍, 모델을 단계별로 설정하여 .bylane/bylane.json을 생성한다.
4
4
  ---
5
5
 
6
6
  # byLane Setup Wizard
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane-test-agent
3
- description: 변경된 코드의 테스트를 실행하고 결과를 반환한다.
3
+ description: 변경된 코드의 테스트를 실행하고 PASS/FAIL 결과를 반환한다. FAIL 시 실패 상세(failureDetails)를 state에 기록하여 code-agent 재시도 피드백으로 사용된다.
4
4
  ---
5
5
 
6
6
  # Test Agent
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bylane
3
- description: byLane 메인 커맨드. 자연어로 전체 개발 워크플로우를 실행한다.
3
+ description: byLane 메인 진입점. 자연어 명령을 키워드 감지하여 적절한 에이전트로 자동 라우팅한다. 복합 의도는 오케스트레이터로 전달.
4
4
  ---
5
5
 
6
6
  # /bylane
@@ -8,33 +8,41 @@ description: byLane 메인 커맨드. 자연어로 전체 개발 워크플로우
8
8
  ## 사용법
9
9
 
10
10
  ```
11
- /bylane [자연어 명령] — 전체 워크플로우 자동 실행
12
- /bylane setup — 셋업 위자드 (재실행 가능)
13
- /bylane analyze — 프로젝트 분석 후 .claude/instructions/ 에 instruction 파일 생성
14
- /bylane monitor — 실시간 TUI 대시보드
15
- /bylane issue [#번호 | 텍스트]
16
- /bylane code [#번호]
17
- /bylane test
18
- /bylane commit
19
- /bylane pr
20
- /bylane review [PR번호]
21
- /bylane review-loop — 5분 주기 자동 리뷰 루프 시작
22
- /bylane respond [PR번호]
23
- /bylane respond-loop — 5분 주기 자동 대응 루프 시작
24
- /bylane notify
25
- /bylane status — 현재 상태 한 줄 요약
11
+ /bylane [자연어 명령]
26
12
  ```
27
13
 
28
- ## 사전 점검 (모든 명령 자동 실행)
14
+ 자연어로 개발 의도를 전달하면 키워드를 감지해 적절한 에이전트를 자동 실행한다.
15
+ 서브커맨드 없이 **자연어만** 받는다. 개별 에이전트는 `/bylane-*`로 직접 실행한다.
29
16
 
30
- 서브커맨드를 라우팅하기 아래 점검을 실행한다:
17
+ ### 개별 에이전트 직접 실행
18
+
19
+ | 커맨드 | 설명 |
20
+ |---|---|
21
+ | `/bylane-setup` | GitHub 접근, 이슈 트래커, 알림, 팀 모드, 루프, 브랜치, 모델을 단계별로 설정하여 `.bylane/bylane.json` 생성 |
22
+ | `/bylane-monitor` | blessed 기반 TUI 대시보드 실행 안내. 에이전트 상태/큐/로그를 1초 주기로 표시 |
23
+ | `/bylane-cleanup` | 파일 권한 수정, 죽은 PID 정리, 30분 초과 작업 실패 전환, 큐 pending 복구를 일괄 실행 |
24
+ | `/bylane-analyze-agent` | 코드 스타일/디자인 토큰/아키텍처를 분석하여 `.claude/instructions/`에 저장, CLAUDE.md에 import 추가 |
25
+ | `/bylane-issue-agent` | 코드베이스 병렬 분석 + 사용자 문답으로 전략 스펙 포함 GitHub 이슈 작성. code-agent 입력이 됨 |
26
+ | `/bylane-code-agent` | 이슈 전략 스펙 기반으로 브랜치 생성 + 코드 구현. issueMemory 기록, 실패 시 피드백 재시도 |
27
+ | `/bylane-test-agent` | 테스트 실행 후 PASS/FAIL 반환. FAIL 시 failureDetails를 state에 기록하여 재시도 피드백 제공 |
28
+ | `/bylane-commit-agent` | 변경 파일 분석 → conventional commit(feat/fix/refactor) 메시지 자동 생성. 시크릿 자동 제외 |
29
+ | `/bylane-pr-agent` | 전체 커밋 히스토리 분석 → PR 제목/요약/테스트 계획 자동 작성. 팀 모드 시 리뷰어 할당 |
30
+ | `/bylane-review-agent` | PR diff를 파일별 분석 → 라인별 인라인 코멘트. grammar/domain/code/security 검사, 심각도 분류 |
31
+ | `/bylane-respond-agent` | 리뷰 코멘트 분석 → accept(코드 수정+재커밋) 또는 rebut(근거 반박). CHANGES_REQUESTED 포함 처리 |
32
+ | `/bylane-review-loop` | 설정 주기로 review 요청 PR 감지 → review-queue 기록 → review-agent 자동 실행. 재요청 포함 |
33
+ | `/bylane-respond-loop` | 설정 주기로 내 PR 리뷰/코멘트 감지 → respond-queue 기록 → respond-agent 자동 실행. 재감지 포함 |
34
+ | `/bylane-notify-agent` | 워크플로우 완료/테스트 실패/리뷰 대기/개입 필요 시 Slack/Telegram 알림 발송 |
35
+
36
+ ## 사전 점검 (자동 실행)
37
+
38
+ 키워드 라우팅 전 아래 점검을 실행한다:
31
39
 
32
40
  ```bash
33
41
  npx @elyun/bylane preflight
34
42
  ```
35
43
 
36
44
  점검 항목:
37
- - `.bylane/bylane.json` 존재 여부 → 없으면 `/bylane setup` 안내 후 중단
45
+ - `.bylane/bylane.json` 존재 여부 → 없으면 `bylane-setup` 스킬 실행 후 중단
38
46
  - GitHub 접근 방법 (`github.method` 기준):
39
47
  - `cli`: `gh auth status` → 로그인 안 됐으면 `gh auth login` 안내
40
48
  - `api`: `GITHUB_TOKEN` 환경변수 → 없으면 설정 방법 안내
@@ -42,44 +50,77 @@ npx @elyun/bylane preflight
42
50
  - 알림 채널 (활성화된 경우만): Slack 채널 설정 여부, Telegram 토큰 여부
43
51
 
44
52
  문제가 있으면 각 항목마다 수정 방법을 출력하고 중단한다.
45
- `setup`, `status`, `preflight` 서브커맨드는 점검 없이 바로 실행한다.
53
+ **셋업/상태 관련 키워드는 점검 없이 바로 실행한다.**
46
54
 
47
- ## 실행 흐름
55
+ ## 키워드 감지 및 라우팅
48
56
 
49
- 번째 인자가 서브커맨드인지 확인.
50
- **반드시 아래 표의 "실행 스킬" 전체 이름을 Skill 도구에 전달한다. 서브커맨드 이름(analyze, setup 등)을 그대로 스킬 이름으로 사용하지 않는다.**
57
+ 입력된 자연어에서 키워드를 감지하여 적절한 스킬로 라우팅한다.
58
+ 반드시 아래 표의 **"실행 스킬" 전체 이름**을 Skill 도구에 전달한다.
59
+ **매칭되는 키워드가 없거나 복합 의도이면 `bylane-orchestrator`로 전달한다.**
51
60
 
52
- | 서브커맨드 | 실행 스킬 |
53
- |---|---|
54
- | (없음 or 자연어) | `bylane-orchestrator` |
55
- | `setup` | `bylane-setup` |
56
- | `monitor` | 아래 참조 |
57
- | `issue` | `bylane-issue-agent` |
58
- | `code` | `bylane-code-agent` |
59
- | `test` | `bylane-test-agent` |
60
- | `commit` | `bylane-commit-agent` |
61
- | `pr` | `bylane-pr-agent` |
62
- | `review` | `bylane-review-agent` |
63
- | `analyze` | `bylane-analyze-agent` |
64
- | `review-loop` | `bylane-review-loop` |
65
- | `respond` | `bylane-respond-agent` |
66
- | `respond-loop` | `bylane-respond-loop` |
67
- | `notify` | `bylane-notify-agent` |
68
- | `status` | `.bylane/state/` 파일 읽어 한 줄 요약 출력 |
69
- | `preflight` | 연동 상태 점검 및 문제 안내 |
70
-
71
- ## monitor 서브커맨드
61
+ ### 유틸리티 (점검 생략)
72
62
 
73
- ```bash
74
- npm run monitor --prefix PATH_TO_BYLANE
75
- ```
63
+ | 키워드 | 실행 스킬 | 예시 입력 |
64
+ |---|---|---|
65
+ | `setup`, `셋업`, `설정 위자드`, `초기 설정`, `설치` | `bylane-setup` | "셋업 다시 해줘", "초기 설정" |
66
+ | `monitor`, `모니터`, `대시보드`, `dashboard` | `bylane-monitor` | "모니터 켜줘", "대시보드 보고 싶어" |
67
+ | `cleanup`, `정리`, `상태 초기화`, `리셋`, `reset` | `bylane-cleanup` | "상태 정리해줘", "리셋" |
68
+ | `status`, `상태`, `현황`, `지금 뭐 하고 있어` | 상태 요약 출력 | "상태 보여줘", "현황 알려줘" |
69
+ | `preflight`, `점검`, `연동 확인`, `헬스체크` | preflight 실행 | "점검해줘", "연동 확인" |
76
70
 
77
- 또는 byLane이 PATH에 설치된 경우:
78
- ```bash
79
- bylane-monitor
80
- ```
71
+ ### 분석
72
+
73
+ | 키워드 | 실행 스킬 | 예시 입력 |
74
+ |---|---|---|
75
+ | `analyze`, `분석`, `프로젝트 분석`, `코드 분석`, `구조 분석` | `bylane-analyze-agent` | "프로젝트 분석해줘", "코드 구조 파악해줘" |
76
+
77
+ ### 이슈 & 구현
78
+
79
+ | 키워드 | 실행 스킬 | 예시 입력 |
80
+ |---|---|---|
81
+ | `이슈 만들어`, `이슈 작성`, `이슈 생성`, `issue 생성` | `bylane-issue-agent` | "이슈 만들어줘", "버그 이슈 작성" |
82
+ | `#N 구현`, `이슈 #N`, `코드 작성`, `코딩`, `구현` + 이슈번호 | `bylane-code-agent` | "#32 구현해줘", "이슈 #15 코딩" |
83
+
84
+ ### 테스트 & 커밋 & PR
85
+
86
+ | 키워드 | 실행 스킬 | 예시 입력 |
87
+ |---|---|---|
88
+ | `test`, `테스트`, `검증`, `테스트 돌려`, `시험` | `bylane-test-agent` | "테스트 돌려줘", "검증해줘" |
89
+ | `commit`, `커밋`, `커밋해`, `변경사항 저장` | `bylane-commit-agent` | "커밋해줘", "변경사항 커밋" |
90
+ | `pr`, `PR`, `풀리퀘`, `풀 리퀘스트`, `PR 생성`, `PR 만들어` | `bylane-pr-agent` | "PR 만들어줘", "풀리퀘 올려줘" |
91
+
92
+ ### 리뷰 & 대응
93
+
94
+ | 키워드 | 실행 스킬 | 예시 입력 |
95
+ |---|---|---|
96
+ | `리뷰해`, `코드 리뷰`, `review` + PR번호 | `bylane-review-agent` | "PR #45 리뷰해줘", "코드 리뷰 해줘" |
97
+ | `반영`, `반박`, `대응`, `respond`, `수정 반영`, `리뷰 수락` | `bylane-respond-agent` | "리뷰 반영해줘", "#45 반박해" |
98
+ | `리뷰 루프`, `자동 리뷰`, `리뷰 자동화`, `review loop` | `bylane-review-loop` | "자동 리뷰 시작", "리뷰 루프 켜줘" |
99
+ | `대응 루프`, `자동 대응`, `대응 자동화`, `respond loop` | `bylane-respond-loop` | "자동 대응 시작", "대응 루프 시작" |
100
+ | `루프 시작`, `loop start`, `루프 켜`, `자동화 시작` | `bylane-review-loop` + `bylane-respond-loop` 순차 실행 | "루프 시작해줘", "자동화 켜" |
101
+ | `루프 종료`, `loop stop`, `루프 꺼`, `자동화 중단` | 루프 종료 안내 | "루프 꺼줘", "자동화 중단" |
102
+
103
+ ### 알림
104
+
105
+ | 키워드 | 실행 스킬 | 예시 입력 |
106
+ |---|---|---|
107
+ | `notify`, `알림`, `알려줘`, `슬랙`, `텔레그램`, `통보` | `bylane-notify-agent` | "슬랙에 알림 보내줘" |
108
+
109
+ ### 복합 의도 → 오케스트레이터
110
+
111
+ 아래 경우는 `bylane-orchestrator`로 전달한다:
112
+ - 키워드가 2개 이상 카테고리에 걸칠 때 ("이슈 만들고 구현까지 해줘")
113
+ - 기능 요청 자연어 ("다크모드 토글 추가해줘", "로그인 페이지 만들어줘")
114
+ - 매칭되는 키워드가 없을 때
115
+
116
+ ## 라우팅 우선순위
117
+
118
+ 1. **유틸리티 키워드** — setup, monitor, cleanup, status, preflight
119
+ 2. **루프 키워드** — 리뷰 루프, 대응 루프, 루프 시작/종료
120
+ 3. **단일 에이전트 키워드** — review, commit, test, pr 등
121
+ 4. **복합 의도 / 자연어** → `bylane-orchestrator`
81
122
 
82
- ## status 서브커맨드
123
+ ## status 동작
83
124
 
84
125
  `.bylane/state/*.json` 파일을 읽어 각 에이전트의 현재 상태를 한 줄로 출력:
85
126
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elyun/bylane",
3
- "version": "1.23.0",
3
+ "version": "1.25.0",
4
4
  "description": "Frontend development harness for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
package/src/cli.js CHANGED
@@ -256,32 +256,44 @@ if (command === 'install') {
256
256
  respond.on('exit', onExit)
257
257
  }
258
258
  } else if (subCmd === 'stop') {
259
- const mode = resolveLoopMode()
260
- if (mode === 'tmux') {
259
+ let stopped = false
260
+
261
+ // 1) tmux 세션 종료 시도 (모드 무관)
262
+ if (isTmuxSessionAlive(sessionName)) {
261
263
  stopTmuxLoops(sessionName)
262
- } else {
263
- // process 모드: state에서 PID를 읽어 종료
264
- const { readState } = await import('./state.js')
265
- for (const loopName of ['review-loop', 'respond-loop']) {
266
- const state = readState(loopName)
267
- if (state?.pid) {
268
- try {
269
- process.kill(state.pid, 'SIGTERM')
270
- console.log(` ${loopName} (PID: ${state.pid}) 종료`)
271
- } catch {
272
- console.log(` ${loopName} (PID: ${state.pid}) 이미 종료됨`)
273
- }
274
- }
264
+ stopped = true
265
+ }
266
+
267
+ // 2) process 모드 PID 종료 시도 (모드 무관)
268
+ const { readState, writeState } = await import('./state.js')
269
+ for (const loopName of ['review-loop', 'respond-loop']) {
270
+ const state = readState(loopName)
271
+ if (!state?.pid) continue
272
+ const pid = Number(state.pid)
273
+ try {
274
+ process.kill(pid, 0) // PID 살아있는지 확인
275
+ process.kill(pid, 'SIGTERM')
276
+ writeState(loopName, { ...state, status: 'stopped', stoppedAt: new Date().toISOString() })
277
+ console.log(` ${loopName} (PID: ${pid}) 종료`)
278
+ stopped = true
279
+ } catch {
280
+ console.log(` ${loopName} (PID: ${pid}) 이미 종료됨`)
275
281
  }
276
282
  }
283
+
284
+ if (!stopped) {
285
+ console.log(' 실행 중인 루프가 없습니다.')
286
+ }
277
287
  } else if (subCmd === 'status') {
278
288
  const alive = isTmuxSessionAlive(sessionName)
279
289
  const { readState } = await import('./state.js')
280
290
  const reviewState = readState('review-loop')
281
291
  const respondState = readState('respond-loop')
282
- console.log(`\n tmux 세션 (${sessionName}): ${alive ? '실행 중' : '없음'}`)
283
- console.log(` review-loop: ${reviewState?.status ?? 'unknown'}`)
284
- console.log(` respond-loop: ${respondState?.status ?? 'unknown'}\n`)
292
+ const mode = resolveLoopMode()
293
+ console.log(`\n 모드: ${mode}`)
294
+ console.log(` tmux 세션 (${sessionName}): ${alive ? '실행 중' : '없음'}`)
295
+ console.log(` review-loop: ${reviewState?.status ?? 'unknown'}${reviewState?.pid ? ` (PID: ${reviewState.pid})` : ''}`)
296
+ console.log(` respond-loop: ${respondState?.status ?? 'unknown'}${respondState?.pid ? ` (PID: ${respondState.pid})` : ''}\n`)
285
297
  } else {
286
298
  console.error('사용법: bylane loop <start|stop|status>')
287
299
  process.exit(1)