Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 141 additions & 0 deletions .agents/skills/capture-collaboration-idea/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
---
name: capture-collaboration-idea
description: Capture a collaboration idea as a public-safe GitHub issue draft for Codex; require explicit user approval before issue creation.
---

# Capture Collaboration Idea

대화 중 나온 협력 방안, 프로젝트 개선, 아이디에이션을 public-safe GitHub issue draft로 정리할 때 사용한다.

## 범위

- GitHub issue draft를 만든다.
- 사용자가 명시적으로 승인하기 전에는 GitHub issue를 생성하지 않는다.
- target repository에 이미 존재하는 issue form `.github/ISSUE_TEMPLATE/collaboration_idea.yml`을 기준으로 작성한다.
- public repository에 공개해도 되는 정보만 남긴다.

## Public Repo Guardrails

- private repository 이름, 내부 host, secret, token, credential, customer data, private vulnerability detail을 issue draft에 넣지 않는다.
- 내부 경로, 미공개 branch, 비공개 운영 절차는 공개 가능한 일반 설명으로 바꾼다.
- 재현 단계, 영향, 제안 내용은 public-safe 수준으로 축약한다.
- 공개 가능 여부가 애매한 내용은 issue draft에 넣지 말고 `Review Metadata`에 risk로 표시한 뒤 사용자 확인을 요청한다.
- 보안 취약점, credential, exploit detail, private incident 정보가 포함되면 즉시 중단하고 public issue 생성 대신 private disclosure나 비공개 triage를 제안한다.

## Issue Form Contract

target repository에는 다음 issue form이 있어야 한다.

- `.github/ISSUE_TEMPLATE/collaboration_idea.yml`

`Proposal Type`은 아래 세 값 중 하나만 사용한다.

- `협력 방안 제안`
- `프로젝트 개선 제안`
- `아이디에이션`

## Label Contract

`Proposal Type` 값과 GitHub label은 같은 문자열로 매핑한다.

- `협력 방안 제안` -> `협력 방안 제안`
- `프로젝트 개선 제안` -> `프로젝트 개선 제안`
- `아이디에이션` -> `아이디에이션`

label이 target repository에 없으면 issue를 만들기 전에 중단하고 label 준비 또는 label 없이 draft 유지 중 하나를 사용자에게 물어본다.

## Workflow

1. 대화에서 협력 아이디어를 추출한다.
2. 아이디어를 `Proposal Type` 세 값 중 하나로 분류한다.
3. target repository에서 중복 issue를 검색한다.
4. draft 내용을 public-safe 형태로 다시 쓴다.
5. 생성 전 preview를 보여준다.
6. 사용자에게 명시적 승인을 받는다.
7. 승인 후에만 GitHub issue를 생성한다.

## Duplicate Search

중복 검색은 issue 생성 전 검토 자료다. GitHub issue body에는 넣지 않는다.

- query에는 핵심 키워드, Proposal Type, 관련 기능명을 포함한다.
- result에는 중복 후보 issue 번호와 판단을 짧게 적는다.
- 중복 가능성이 높으면 issue 생성을 중단하고 기존 issue에 comment를 달지, 새 issue를 만들지 사용자에게 묻는다.

## Preview Format

preview는 반드시 `Review Metadata`와 `Issue Draft`를 분리한다.

```markdown
## Review Metadata

- Proposal Type: <협력 방안 제안 | 프로젝트 개선 제안 | 아이디에이션>
- Label: <same as Proposal Type>
- Public Safety: <pass | needs-review | blocked>
- Duplicate Search:
- Query: <search query>
- Result: <no likely duplicate | candidate issues and judgment>
- Approval Needed: yes

## Issue Draft

### Title
<public-safe issue title>

### Proposal Type
<협력 방안 제안 | 프로젝트 개선 제안 | 아이디에이션>

### Context
<public-safe background>

### Proposal
<specific proposal or direction>

### Done / Next Decision
<what needs to be decided or done to close this issue>

### Public Safety
- [x] 이 issue에는 real secret, private finding, internal repo/host/path가 없습니다.
```

`Duplicate Search`는 `Review Metadata`에만 둔다. `Issue Draft` 안에는 넣지 않는다.

## Approval Gate

preview 뒤에는 한 문장으로 승인 여부를 묻는다.

예:

```text
이 draft로 GitHub issue를 생성해도 될까요? 승인하면 생성하고, 수정할 점이 있으면 반영하겠습니다.
```

아래처럼 명확한 승인 표현이 있을 때만 issue를 생성한다.

- "승인"
- "생성해"
- "이대로 issue 만들어"
- "create it"

수정 요청, 조건부 승인, 침묵, 애매한 답변은 승인으로 보지 않는다.

## Stop Conditions

- target repository가 public repo인지 확인할 수 없다.
- `.github/ISSUE_TEMPLATE/collaboration_idea.yml` 존재를 확인할 수 없다.
- `Proposal Type`을 세 값 중 하나로 분류할 수 없다.
- public-safe rewrite 후에도 비공개 정보나 민감 정보가 남아 있다.
- 중복 issue 가능성이 높고 사용자가 새 issue 생성을 재승인하지 않았다.
- 필요한 label이 없고 사용자가 처리 방식을 승인하지 않았다.
- 사용자가 issue 생성을 명시적으로 승인하지 않았다.
- GitHub 인증, 권한, 네트워크 상태 때문에 issue 생성 결과를 확인할 수 없다.

중단 시에는 issue를 만들지 않고 이유와 다음 선택지만 한국어로 짧게 말한다.

## Korean Output Style

- 한국어로 응답한다.
- GitHub field name, file path, label, `Proposal Type` 값은 원문 그대로 쓴다.
- preview 전에는 긴 배경 설명을 쓰지 않는다.
- 생성 완료를 말할 때는 issue URL이나 issue 번호를 함께 제시한다.
- 생성하지 않았으면 "생성하지 않음"을 명확히 말한다.
141 changes: 141 additions & 0 deletions .claude/skills/capture-collaboration-idea/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
---
name: capture-collaboration-idea
description: Capture a collaboration idea as a public-safe GitHub issue draft for Claude Code; require explicit user approval before issue creation.
---

# Capture Collaboration Idea

대화 중 나온 협력 방안, 프로젝트 개선, 아이디에이션을 public-safe GitHub issue draft로 정리할 때 사용한다.

## 범위

- GitHub issue draft를 만든다.
- 사용자가 명시적으로 승인하기 전에는 GitHub issue를 생성하지 않는다.
- target repository에 이미 존재하는 issue form `.github/ISSUE_TEMPLATE/collaboration_idea.yml`을 기준으로 작성한다.
- public repository에 공개해도 되는 정보만 남긴다.

## Public Repo Guardrails

- private repository 이름, 내부 host, secret, token, credential, customer data, private vulnerability detail을 issue draft에 넣지 않는다.
- 내부 경로, 미공개 branch, 비공개 운영 절차는 공개 가능한 일반 설명으로 바꾼다.
- 재현 단계, 영향, 제안 내용은 public-safe 수준으로 축약한다.
- 공개 가능 여부가 애매한 내용은 issue draft에 넣지 말고 `Review Metadata`에 risk로 표시한 뒤 사용자 확인을 요청한다.
- 보안 취약점, credential, exploit detail, private incident 정보가 포함되면 즉시 중단하고 public issue 생성 대신 private disclosure나 비공개 triage를 제안한다.

## Issue Form Contract

target repository에는 다음 issue form이 있어야 한다.

- `.github/ISSUE_TEMPLATE/collaboration_idea.yml`

`Proposal Type`은 아래 세 값 중 하나만 사용한다.

- `협력 방안 제안`
- `프로젝트 개선 제안`
- `아이디에이션`

## Label Contract

`Proposal Type` 값과 GitHub label은 같은 문자열로 매핑한다.

- `협력 방안 제안` -> `협력 방안 제안`
- `프로젝트 개선 제안` -> `프로젝트 개선 제안`
- `아이디에이션` -> `아이디에이션`

label이 target repository에 없으면 issue를 만들기 전에 중단하고 label 준비 또는 label 없이 draft 유지 중 하나를 사용자에게 물어본다.

## Workflow

1. 대화에서 협력 아이디어를 추출한다.
2. 아이디어를 `Proposal Type` 세 값 중 하나로 분류한다.
3. target repository에서 중복 issue를 검색한다.
4. draft 내용을 public-safe 형태로 다시 쓴다.
5. 생성 전 preview를 보여준다.
6. 사용자에게 명시적 승인을 받는다.
7. 승인 후에만 GitHub issue를 생성한다.

## Duplicate Search

중복 검색은 issue 생성 전 검토 자료다. GitHub issue body에는 넣지 않는다.

- query에는 핵심 키워드, Proposal Type, 관련 기능명을 포함한다.
- result에는 중복 후보 issue 번호와 판단을 짧게 적는다.
- 중복 가능성이 높으면 issue 생성을 중단하고 기존 issue에 comment를 달지, 새 issue를 만들지 사용자에게 묻는다.

## Preview Format

preview는 반드시 `Review Metadata`와 `Issue Draft`를 분리한다.

```markdown
## Review Metadata

- Proposal Type: <협력 방안 제안 | 프로젝트 개선 제안 | 아이디에이션>
- Label: <same as Proposal Type>
- Public Safety: <pass | needs-review | blocked>
- Duplicate Search:
- Query: <search query>
- Result: <no likely duplicate | candidate issues and judgment>
- Approval Needed: yes

## Issue Draft

### Title
<public-safe issue title>

### Proposal Type
<협력 방안 제안 | 프로젝트 개선 제안 | 아이디에이션>

### Context
<public-safe background>

### Proposal
<specific proposal or direction>

### Done / Next Decision
<what needs to be decided or done to close this issue>

### Public Safety
- [x] 이 issue에는 real secret, private finding, internal repo/host/path가 없습니다.
```

`Duplicate Search`는 `Review Metadata`에만 둔다. `Issue Draft` 안에는 넣지 않는다.

## Approval Gate

preview 뒤에는 한 문장으로 승인 여부를 묻는다.

예:

```text
이 draft로 GitHub issue를 생성해도 될까요? 승인하면 생성하고, 수정할 점이 있으면 반영하겠습니다.
```

아래처럼 명확한 승인 표현이 있을 때만 issue를 생성한다.

- "승인"
- "생성해"
- "이대로 issue 만들어"
- "create it"

수정 요청, 조건부 승인, 침묵, 애매한 답변은 승인으로 보지 않는다.

## Stop Conditions

- target repository가 public repo인지 확인할 수 없다.
- `.github/ISSUE_TEMPLATE/collaboration_idea.yml` 존재를 확인할 수 없다.
- `Proposal Type`을 세 값 중 하나로 분류할 수 없다.
- public-safe rewrite 후에도 비공개 정보나 민감 정보가 남아 있다.
- 중복 issue 가능성이 높고 사용자가 새 issue 생성을 재승인하지 않았다.
- 필요한 label이 없고 사용자가 처리 방식을 승인하지 않았다.
- 사용자가 issue 생성을 명시적으로 승인하지 않았다.
- GitHub 인증, 권한, 네트워크 상태 때문에 issue 생성 결과를 확인할 수 없다.

중단 시에는 issue를 만들지 않고 이유와 다음 선택지만 한국어로 짧게 말한다.

## Korean Output Style

- 한국어로 응답한다.
- GitHub field name, file path, label, `Proposal Type` 값은 원문 그대로 쓴다.
- preview 전에는 긴 배경 설명을 쓰지 않는다.
- 생성 완료를 말할 때는 issue URL이나 issue 번호를 함께 제시한다.
- 생성하지 않았으면 "생성하지 않음"을 명확히 말한다.
47 changes: 47 additions & 0 deletions .github/ISSUE_TEMPLATE/collaboration_idea.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Collaboration Idea
description: 협력 방안, 프로젝트 개선, 아이디에이션 제안
title: "[Proposal] "
body:
- type: dropdown
id: proposal_type
attributes:
label: Proposal Type
description: 이 제안의 성격을 하나만 선택합니다.
options:
- 협력 방안 제안
- 프로젝트 개선 제안
- 아이디에이션
validations:
required: true

- type: textarea
id: context
attributes:
label: Context
description: 왜 이 내용을 논의해야 하는지, 누구에게 영향이 있는지 적습니다.
validations:
required: true

- type: textarea
id: proposal
attributes:
label: Proposal
description: 제안 내용 또는 같이 정해야 할 방향을 적습니다.
validations:
required: true

- type: textarea
id: done_next_decision
attributes:
label: Done / Next Decision
description: 이 issue가 닫히려면 무엇이 결정되거나 실행되어야 하는지 적습니다.
validations:
required: true

- type: checkboxes
id: public_safety
attributes:
label: Public Safety
options:
- label: 이 issue에는 real secret, private finding, internal repo/host/path가 없습니다.
required: true
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,9 @@ build/
*.swp

# Local agent/harness settings
.claude/
.claude/*
!.claude/skills/
!.claude/skills/**
.routine-harness/

# Local git worktrees
Expand Down