codesyncer 2.1.1 → 2.1.3
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/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +71 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/templates/en/root_claude.md +239 -0
- package/dist/templates/en/setup_guide.md +30 -11
- package/dist/templates/ko/root_claude.md +239 -0
- package/dist/templates/ko/setup_guide.md +30 -11
- package/package.json +1 -1
- package/src/templates/en/root_claude.md +239 -0
- package/src/templates/en/setup_guide.md +30 -11
- package/src/templates/ko/root_claude.md +239 -0
- package/src/templates/ko/setup_guide.md +30 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAY,MAAM,UAAU,CAAC;AAGnD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,iBA4KzD"}
|
package/dist/commands/update.js
CHANGED
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.updateCommand = updateCommand;
|
|
40
40
|
const chalk_1 = __importDefault(require("chalk"));
|
|
41
41
|
const ora_1 = __importDefault(require("ora"));
|
|
42
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
43
|
const fs = __importStar(require("fs-extra"));
|
|
43
44
|
const path = __importStar(require("path"));
|
|
44
45
|
const scanner_1 = require("../utils/scanner");
|
|
@@ -51,6 +52,18 @@ async function updateCommand(options) {
|
|
|
51
52
|
console.log(chalk_1.default.gray('Run `codesyncer init` first.\n'));
|
|
52
53
|
return;
|
|
53
54
|
}
|
|
55
|
+
// Detect language from existing SETUP_GUIDE
|
|
56
|
+
let lang = 'en';
|
|
57
|
+
const setupGuidePath = path.join(currentDir, '.codesyncer', 'SETUP_GUIDE.md');
|
|
58
|
+
try {
|
|
59
|
+
const setupGuide = await fs.readFile(setupGuidePath, 'utf-8');
|
|
60
|
+
if (setupGuide.includes('한국어') || setupGuide.includes('레포지토리')) {
|
|
61
|
+
lang = 'ko';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Default to English
|
|
66
|
+
}
|
|
54
67
|
const spinner = (0, ora_1.default)('Scanning for changes...').start();
|
|
55
68
|
// Scan for repositories
|
|
56
69
|
const foundRepos = await (0, scanner_1.scanForRepositories)(currentDir);
|
|
@@ -114,6 +127,64 @@ async function updateCommand(options) {
|
|
|
114
127
|
catch (error) {
|
|
115
128
|
updateSpinner.fail('Failed to update WORKSPACE_MAP.md');
|
|
116
129
|
}
|
|
130
|
+
// Check if root CLAUDE.md exists
|
|
131
|
+
const rootClaudePath = path.join(currentDir, 'CLAUDE.md');
|
|
132
|
+
const hasRootClaude = await fs.pathExists(rootClaudePath);
|
|
133
|
+
if (!hasRootClaude) {
|
|
134
|
+
console.log(chalk_1.default.bold.yellow('\n⚠️ Missing root CLAUDE.md (new in v2.1.2)\n'));
|
|
135
|
+
console.log(chalk_1.default.gray('This file allows Claude to automatically load context at session start.\n'));
|
|
136
|
+
const { createRootClaude } = await inquirer_1.default.prompt([
|
|
137
|
+
{
|
|
138
|
+
type: 'confirm',
|
|
139
|
+
name: 'createRootClaude',
|
|
140
|
+
message: lang === 'ko' ? '루트 CLAUDE.md를 생성할까요?' : 'Create root CLAUDE.md?',
|
|
141
|
+
default: true,
|
|
142
|
+
},
|
|
143
|
+
]);
|
|
144
|
+
if (createRootClaude) {
|
|
145
|
+
const spinner = (0, ora_1.default)(lang === 'ko' ? '루트 CLAUDE.md 생성 중...' : 'Creating root CLAUDE.md...').start();
|
|
146
|
+
try {
|
|
147
|
+
// Read template
|
|
148
|
+
const templatePath = path.join(__dirname, '..', 'templates', lang, 'root_claude.md');
|
|
149
|
+
let template = await fs.readFile(templatePath, 'utf-8');
|
|
150
|
+
// Extract project info from existing MASTER_CODESYNCER.md
|
|
151
|
+
const masterPath = path.join(currentDir, '.codesyncer', 'MASTER_CODESYNCER.md');
|
|
152
|
+
let projectName = path.basename(currentDir);
|
|
153
|
+
let githubUsername = 'your-username';
|
|
154
|
+
try {
|
|
155
|
+
const masterContent = await fs.readFile(masterPath, 'utf-8');
|
|
156
|
+
const nameMatch = masterContent.match(/프로젝트[:\s]*([^\n]+)|Project[:\s]*([^\n]+)/i);
|
|
157
|
+
const githubMatch = masterContent.match(/github\.com\/([^/\s]+)/i);
|
|
158
|
+
if (nameMatch)
|
|
159
|
+
projectName = (nameMatch[1] || nameMatch[2]).trim();
|
|
160
|
+
if (githubMatch)
|
|
161
|
+
githubUsername = githubMatch[1];
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Use defaults
|
|
165
|
+
}
|
|
166
|
+
const repoCount = foundRepos.length;
|
|
167
|
+
const today = new Date().toISOString().split('T')[0];
|
|
168
|
+
// Replace placeholders
|
|
169
|
+
template = template
|
|
170
|
+
.replace(/\[PROJECT_NAME\]/g, projectName)
|
|
171
|
+
.replace(/\[GITHUB_USERNAME\]/g, githubUsername)
|
|
172
|
+
.replace(/\[TODAY\]/g, today)
|
|
173
|
+
.replace(/\[REPO_COUNT\]/g, String(repoCount));
|
|
174
|
+
// Write root CLAUDE.md
|
|
175
|
+
await fs.writeFile(rootClaudePath, template, 'utf-8');
|
|
176
|
+
spinner.succeed(lang === 'ko' ? '루트 CLAUDE.md 생성 완료!' : 'Root CLAUDE.md created!');
|
|
177
|
+
console.log(chalk_1.default.green(` ✓ ${rootClaudePath}\n`));
|
|
178
|
+
console.log(chalk_1.default.cyan(lang === 'ko'
|
|
179
|
+
? '💡 이제 Claude가 세션 시작 시 자동으로 컨텍스트를 로드합니다!'
|
|
180
|
+
: '💡 Claude will now automatically load context at session start!\n'));
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
spinner.fail(lang === 'ko' ? '루트 CLAUDE.md 생성 실패' : 'Failed to create root CLAUDE.md');
|
|
184
|
+
console.error(chalk_1.default.red(`Error: ${error}\n`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
117
188
|
console.log(chalk_1.default.bold.green('\n✅ Update complete!\n'));
|
|
118
189
|
if (newRepos.length > 0) {
|
|
119
190
|
console.log(chalk_1.default.bold('📝 Next steps:\n'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# CLAUDE.md - [PROJECT_NAME] Multi-Repo Project
|
|
2
|
+
|
|
3
|
+
> **🎯 This is a Multi-Repository Workspace**
|
|
4
|
+
>
|
|
5
|
+
> Each repository is an independent project, working together collaboratively.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 First Thing to Do
|
|
10
|
+
|
|
11
|
+
**If you've read this file, immediately read the following file:**
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
.codesyncer/MASTER_CODESYNCER.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
→ This file contains **all repository information**, **auto-switching rules**, and **keyword mappings**.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 🏗️ Project Overview
|
|
22
|
+
|
|
23
|
+
- **Project Name**: [PROJECT_NAME]
|
|
24
|
+
- **GitHub**: https://github.com/[GITHUB_USERNAME]/[PROJECT_NAME]
|
|
25
|
+
- **Created**: [TODAY]
|
|
26
|
+
- **Repositories**: [REPO_COUNT]
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🗂️ Repository Structure
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
[PROJECT_NAME]/
|
|
34
|
+
├── CLAUDE.md (current file)
|
|
35
|
+
├── .codesyncer/
|
|
36
|
+
│ └── MASTER_CODESYNCER.md ⭐ Multi-repo navigation
|
|
37
|
+
│
|
|
38
|
+
├── [repo1]/
|
|
39
|
+
│ └── .claude/
|
|
40
|
+
│ └── CLAUDE.md (individual repo rules)
|
|
41
|
+
│
|
|
42
|
+
├── [repo2]/
|
|
43
|
+
│ └── .claude/
|
|
44
|
+
│ └── CLAUDE.md (individual repo rules)
|
|
45
|
+
│
|
|
46
|
+
└── ...
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 🚨 Important Rules
|
|
52
|
+
|
|
53
|
+
### 1. Check Repository Before Working
|
|
54
|
+
Always verify which repository you're working in:
|
|
55
|
+
```bash
|
|
56
|
+
pwd # Check current directory
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Read CLAUDE.md When Switching Repos
|
|
60
|
+
Every time you work in a new repo:
|
|
61
|
+
```
|
|
62
|
+
"Read [repo-name]/.claude/CLAUDE.md"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. No Work in Root Directory
|
|
66
|
+
Never code in root directory. Always navigate to specific repo before working.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 🔄 Multi-Repo Workflow
|
|
71
|
+
|
|
72
|
+
### Scenario 1: User Specifies Specific Repo
|
|
73
|
+
```
|
|
74
|
+
User: "Add login API to backend"
|
|
75
|
+
↓
|
|
76
|
+
1. Check MASTER_CODESYNCER.md for "backend" keyword → find api-server repo
|
|
77
|
+
2. Read api-server/.claude/CLAUDE.md
|
|
78
|
+
3. Work in api-server
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Scenario 2: Multiple Repos Need Changes
|
|
82
|
+
```
|
|
83
|
+
User: "Add order feature"
|
|
84
|
+
↓
|
|
85
|
+
1. "Order feature requires both backend (API) and frontend (UI). Proceed?"
|
|
86
|
+
2. After user confirmation
|
|
87
|
+
3. Work on API in api-server → report completion
|
|
88
|
+
4. Work on UI in web-client → report completion
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Scenario 3: Unclear Which Repo
|
|
92
|
+
```
|
|
93
|
+
1. Check keyword mapping in MASTER_CODESYNCER.md
|
|
94
|
+
2. If unclear, ask user
|
|
95
|
+
"Which repo should I work in?"
|
|
96
|
+
- A) api-server (backend)
|
|
97
|
+
- B) web-client (frontend)
|
|
98
|
+
- C) mobile-app (mobile)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 📝 Project-Wide Common Rules
|
|
104
|
+
|
|
105
|
+
The following rules apply to **all repositories**:
|
|
106
|
+
|
|
107
|
+
### Coding Standards
|
|
108
|
+
- ✅ Use TypeScript strict mode
|
|
109
|
+
- ✅ Explicit type definitions required
|
|
110
|
+
- ✅ Prefer functional programming
|
|
111
|
+
- ✅ Document all functions/components
|
|
112
|
+
- ✅ Error handling required
|
|
113
|
+
|
|
114
|
+
### Comment Tag System
|
|
115
|
+
Use the same tags across all repos:
|
|
116
|
+
```typescript
|
|
117
|
+
@codesyncer-rule // Special rules
|
|
118
|
+
@codesyncer-inference // Inference with reasoning
|
|
119
|
+
@codesyncer-decision // Decisions after discussion
|
|
120
|
+
@codesyncer-todo // User confirmation needed
|
|
121
|
+
@codesyncer-context // Business context explanation
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Details: `.claude/COMMENT_GUIDE.md` in each repo
|
|
125
|
+
|
|
126
|
+
### No-Inference Zones
|
|
127
|
+
**Never infer, always ask the user:**
|
|
128
|
+
- 💰 Business logic numbers (prices, fees, limits, discounts)
|
|
129
|
+
- 🔌 API endpoint URLs
|
|
130
|
+
- 🔐 Security settings (token expiry, encryption methods)
|
|
131
|
+
- 🗄️ Database schema
|
|
132
|
+
- 🌐 External service integration details
|
|
133
|
+
|
|
134
|
+
### Discussion-Required Keywords
|
|
135
|
+
When these keywords are detected, **stop work automatically** and discuss with user:
|
|
136
|
+
- 🔴 **CRITICAL**: payment, billing, auth, permission, delete, personal data, GDPR
|
|
137
|
+
- 🟡 **IMPORTANT**: API integration, DB schema, deployment, caching, email
|
|
138
|
+
- 🟢 **MINOR**: optimization, testing, logging, UI/UX
|
|
139
|
+
|
|
140
|
+
Full keyword list: `.codesyncer/MASTER_CODESYNCER.md`
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 🎯 Session Start Checklist
|
|
145
|
+
|
|
146
|
+
When AI reads this file:
|
|
147
|
+
|
|
148
|
+
1. ✅ Immediately read `.codesyncer/MASTER_CODESYNCER.md`
|
|
149
|
+
2. ✅ Understand overall repository structure
|
|
150
|
+
3. ✅ Check keyword mappings
|
|
151
|
+
4. ✅ Output ready message:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
✅ [PROJECT_NAME] multi-repo project ready!
|
|
155
|
+
|
|
156
|
+
📁 Repositories: [REPO_COUNT]
|
|
157
|
+
📋 Read MASTER_CODESYNCER.md
|
|
158
|
+
🎯 Ready to work
|
|
159
|
+
|
|
160
|
+
Which repo should we work in?
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 💡 Useful Commands
|
|
166
|
+
|
|
167
|
+
### Navigation
|
|
168
|
+
```
|
|
169
|
+
"Show repo list" → List repos from MASTER_CODESYNCER.md
|
|
170
|
+
"Go to backend" → Read api-server/.claude/CLAUDE.md
|
|
171
|
+
"Switch to frontend" → Read web-client/.claude/CLAUDE.md
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Document Updates
|
|
175
|
+
```
|
|
176
|
+
"Update all structures" → Refresh all ARCHITECTURE.md files
|
|
177
|
+
"Check decision log" → Review DECISIONS.md in each repo
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Multi-Repo Tasks
|
|
181
|
+
```
|
|
182
|
+
"Add ESLint to all repos" → Work sequentially on each repo
|
|
183
|
+
"Need common type defs" → Discuss where to place them
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 📚 Related Documents
|
|
189
|
+
|
|
190
|
+
### Root Documents
|
|
191
|
+
- **Multi-repo Navigation**: `.codesyncer/MASTER_CODESYNCER.md` ⭐ **Required**
|
|
192
|
+
- **Setup Guide**: `.codesyncer/SETUP_GUIDE.md` (Reference after AI setup)
|
|
193
|
+
|
|
194
|
+
### Individual Repo Documents
|
|
195
|
+
In each repo's `.claude/` folder:
|
|
196
|
+
- **CLAUDE.md** - Repo-specific coding rules
|
|
197
|
+
- **ARCHITECTURE.md** - Project structure
|
|
198
|
+
- **COMMENT_GUIDE.md** - Comment writing guide
|
|
199
|
+
- **DECISIONS.md** - Discussion decision log
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 🔍 Search Comments (Entire Project)
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Find all TODOs across repos
|
|
207
|
+
grep -r "@codesyncer-todo" ./*/.claude/
|
|
208
|
+
|
|
209
|
+
# Find all decision records
|
|
210
|
+
grep -r "@codesyncer-decision" ./*/
|
|
211
|
+
|
|
212
|
+
# Search for specific keyword
|
|
213
|
+
grep -r "payment" ./*/
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## ⚠️ Important Notes
|
|
219
|
+
|
|
220
|
+
1. **Context Switch When Changing Repos**
|
|
221
|
+
- Each repo may have independent rules
|
|
222
|
+
- Always check that repo's CLAUDE.md
|
|
223
|
+
|
|
224
|
+
2. **Cross-Repo Dependencies**
|
|
225
|
+
- Discuss changes affecting multiple repos with user
|
|
226
|
+
- Explain clearly when order matters
|
|
227
|
+
|
|
228
|
+
3. **Common Code Management**
|
|
229
|
+
- Discuss location for shared types, utilities
|
|
230
|
+
- Establish duplication prevention strategy
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
**Version**: 1.0.0 (Powered by CodeSyncer)
|
|
235
|
+
**AI Tools**: Optimized for Claude Code | Compatible: Cursor, GitHub Copilot, Continue.dev
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
*CodeSyncer is open source: https://github.com/bitjaru/codesyncer*
|
|
@@ -158,20 +158,35 @@ Use template: `./templates/[lang]/decisions.md`
|
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
161
|
-
## 🌐 Step 4: Generate
|
|
161
|
+
## 🌐 Step 4: Generate Root Documents
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
Create the following files at the workspace root:
|
|
164
164
|
|
|
165
|
-
###
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
### 4.1 CLAUDE.md ⭐ **Claude Reads This First**
|
|
166
|
+
|
|
167
|
+
Create `CLAUDE.md` at root (automatically discovered by Claude):
|
|
168
|
+
|
|
169
|
+
Use template: `./templates/[lang]/root_claude.md`
|
|
170
|
+
- Replace [PROJECT_NAME], [GITHUB_USERNAME], [TODAY]
|
|
171
|
+
- Replace [REPO_COUNT] with actual repository count
|
|
172
|
+
- Indicate this is a multi-repo project
|
|
173
|
+
- Instruct to read MASTER_CODESYNCER.md first
|
|
174
|
+
- Specify project-wide common rules
|
|
175
|
+
|
|
176
|
+
**Important**: This file must exist for Claude to automatically load context at session start!
|
|
177
|
+
|
|
178
|
+
### 4.2 .codesyncer/MASTER_CODESYNCER.md
|
|
179
|
+
|
|
180
|
+
Create `.codesyncer/MASTER_CODESYNCER.md` at workspace root:
|
|
170
181
|
|
|
171
182
|
Use template: `./templates/[lang]/master.md`
|
|
172
183
|
- Replace [REPO_TABLE] with actual detected repos
|
|
173
184
|
- Replace [KEYWORD_MAPPING] with repo-specific keywords
|
|
174
185
|
- Replace [PROJECT_NAME], [GITHUB_USERNAME]
|
|
186
|
+
- List all repositories with their roles
|
|
187
|
+
- Automatic repository switching rules
|
|
188
|
+
- Keyword-based navigation mapping
|
|
189
|
+
- Multi-repo workflow examples
|
|
175
190
|
|
|
176
191
|
---
|
|
177
192
|
|
|
@@ -183,8 +198,10 @@ After generating all files, present a summary:
|
|
|
183
198
|
✅ CodeSyncer Setup Complete!
|
|
184
199
|
|
|
185
200
|
Created files:
|
|
186
|
-
📁
|
|
187
|
-
|
|
201
|
+
📁 Root/
|
|
202
|
+
├── CLAUDE.md ⭐ Claude reads this first
|
|
203
|
+
└── .codesyncer/
|
|
204
|
+
└── MASTER_CODESYNCER.md
|
|
188
205
|
|
|
189
206
|
📁 [repo1]/.claude/
|
|
190
207
|
├── CLAUDE.md
|
|
@@ -197,8 +214,10 @@ Created files:
|
|
|
197
214
|
|
|
198
215
|
Next Steps:
|
|
199
216
|
1. Review the generated files
|
|
200
|
-
2. Customize
|
|
201
|
-
3.
|
|
217
|
+
2. Customize each repo's CLAUDE.md
|
|
218
|
+
3. Read root CLAUDE.md or individual repo CLAUDE.md to start development
|
|
219
|
+
|
|
220
|
+
💡 Claude automatically finds and reads root CLAUDE.md!
|
|
202
221
|
|
|
203
222
|
Ready to start using CodeSyncer!
|
|
204
223
|
```
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# CLAUDE.md - [PROJECT_NAME] 멀티레포 프로젝트
|
|
2
|
+
|
|
3
|
+
> **🎯 이것은 멀티레포 워크스페이스입니다**
|
|
4
|
+
>
|
|
5
|
+
> 각 레포지토리는 독립적인 프로젝트이며, 함께 협업합니다.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 첫 번째 할 일
|
|
10
|
+
|
|
11
|
+
**이 파일을 읽었다면, 다음 파일을 즉시 읽어주세요:**
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
.codesyncer/MASTER_CODESYNCER.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
→ 이 파일에 **모든 레포지토리 정보**, **자동 전환 규칙**, **키워드 매핑**이 있습니다.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 🏗️ 프로젝트 개요
|
|
22
|
+
|
|
23
|
+
- **프로젝트명**: [PROJECT_NAME]
|
|
24
|
+
- **GitHub**: https://github.com/[GITHUB_USERNAME]/[PROJECT_NAME]
|
|
25
|
+
- **생성일**: [TODAY]
|
|
26
|
+
- **레포지토리 수**: [REPO_COUNT]개
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🗂️ 레포지토리 구조
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
[PROJECT_NAME]/
|
|
34
|
+
├── CLAUDE.md (지금 읽는 파일)
|
|
35
|
+
├── .codesyncer/
|
|
36
|
+
│ └── MASTER_CODESYNCER.md ⭐ 멀티레포 네비게이션
|
|
37
|
+
│
|
|
38
|
+
├── [repo1]/
|
|
39
|
+
│ └── .claude/
|
|
40
|
+
│ └── CLAUDE.md (개별 레포 규칙)
|
|
41
|
+
│
|
|
42
|
+
├── [repo2]/
|
|
43
|
+
│ └── .claude/
|
|
44
|
+
│ └── CLAUDE.md (개별 레포 규칙)
|
|
45
|
+
│
|
|
46
|
+
└── ...
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 🚨 중요 규칙
|
|
52
|
+
|
|
53
|
+
### 1. 작업 전 레포지토리 확인
|
|
54
|
+
항상 현재 어느 레포에서 작업하는지 확인하세요:
|
|
55
|
+
```bash
|
|
56
|
+
pwd # 현재 디렉토리 확인
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. 레포 전환 시 CLAUDE.md 읽기
|
|
60
|
+
새로운 레포에서 작업할 때마다:
|
|
61
|
+
```
|
|
62
|
+
"[repo-name]/.claude/CLAUDE.md 읽어줘"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. 루트에서는 작업 금지
|
|
66
|
+
루트 디렉토리에서 코드 작업 금지. 항상 특정 레포로 이동 후 작업.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 🔄 멀티레포 작업 흐름
|
|
71
|
+
|
|
72
|
+
### 시나리오 1: 사용자가 특정 레포 명시
|
|
73
|
+
```
|
|
74
|
+
사용자: "백엔드에 로그인 API 추가해줘"
|
|
75
|
+
↓
|
|
76
|
+
1. MASTER_CODESYNCER.md에서 "백엔드" 키워드 → api-server 레포 확인
|
|
77
|
+
2. api-server/.claude/CLAUDE.md 읽기
|
|
78
|
+
3. api-server에서 작업
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 시나리오 2: 여러 레포 수정 필요
|
|
82
|
+
```
|
|
83
|
+
사용자: "주문 기능 추가해줘"
|
|
84
|
+
↓
|
|
85
|
+
1. "주문 기능은 백엔드(API)와 프론트엔드(UI) 둘 다 필요합니다. 진행할까요?"
|
|
86
|
+
2. 사용자 확인 후
|
|
87
|
+
3. api-server에서 API 작업 → 완료 보고
|
|
88
|
+
4. web-client에서 UI 작업 → 완료 보고
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 시나리오 3: 어느 레포인지 모를 때
|
|
92
|
+
```
|
|
93
|
+
1. MASTER_CODESYNCER.md의 키워드 매핑 확인
|
|
94
|
+
2. 불명확하면 사용자에게 질문
|
|
95
|
+
"어느 레포에서 작업할까요?"
|
|
96
|
+
- A) api-server (백엔드)
|
|
97
|
+
- B) web-client (프론트엔드)
|
|
98
|
+
- C) mobile-app (모바일)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 📝 전체 프로젝트 공통 규칙
|
|
104
|
+
|
|
105
|
+
다음 규칙은 **모든 레포지토리에 공통 적용**:
|
|
106
|
+
|
|
107
|
+
### 코딩 표준
|
|
108
|
+
- ✅ TypeScript strict mode 사용
|
|
109
|
+
- ✅ 명시적 타입 정의 필수
|
|
110
|
+
- ✅ 함수형 프로그래밍 우선
|
|
111
|
+
- ✅ 모든 함수/컴포넌트에 주석 작성
|
|
112
|
+
- ✅ 에러 핸들링 필수
|
|
113
|
+
|
|
114
|
+
### 주석 태그 시스템
|
|
115
|
+
모든 레포에서 동일한 태그 사용:
|
|
116
|
+
```typescript
|
|
117
|
+
@codesyncer-rule // 특별 규칙
|
|
118
|
+
@codesyncer-inference // 추론 내용과 근거
|
|
119
|
+
@codesyncer-decision // 의논 후 결정 사항
|
|
120
|
+
@codesyncer-todo // 사용자 확인 필요
|
|
121
|
+
@codesyncer-context // 비즈니스 맥락 설명
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
자세한 내용: 각 레포의 `.claude/COMMENT_GUIDE.md`
|
|
125
|
+
|
|
126
|
+
### 추론 금지 영역
|
|
127
|
+
**절대 추론하지 말고 사용자에게 물어보세요:**
|
|
128
|
+
- 💰 비즈니스 로직 수치 (가격, 수수료, 한도, 할인율)
|
|
129
|
+
- 🔌 API 엔드포인트 URL
|
|
130
|
+
- 🔐 보안 설정 (토큰 만료 시간, 암호화 방식)
|
|
131
|
+
- 🗄️ 데이터베이스 스키마
|
|
132
|
+
- 🌐 외부 서비스 연동 정보
|
|
133
|
+
|
|
134
|
+
### 의논 필수 키워드
|
|
135
|
+
다음 키워드 감지 시 **자동으로 작업 중단** 후 사용자와 의논:
|
|
136
|
+
- 🔴 **CRITICAL**: 결제, 과금, 인증, 권한, 삭제, 개인정보, GDPR
|
|
137
|
+
- 🟡 **IMPORTANT**: API 연동, DB 스키마, 배포, 캐싱, 이메일
|
|
138
|
+
- 🟢 **MINOR**: 최적화, 테스트, 로깅, UI/UX
|
|
139
|
+
|
|
140
|
+
자세한 키워드 목록: `.codesyncer/MASTER_CODESYNCER.md`
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 🎯 세션 시작 체크리스트
|
|
145
|
+
|
|
146
|
+
AI가 이 파일을 읽으면:
|
|
147
|
+
|
|
148
|
+
1. ✅ `.codesyncer/MASTER_CODESYNCER.md` 즉시 읽기
|
|
149
|
+
2. ✅ 전체 레포지토리 구조 파악
|
|
150
|
+
3. ✅ 키워드 매핑 확인
|
|
151
|
+
4. ✅ 준비 완료 메시지 출력:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
✅ [PROJECT_NAME] 멀티레포 프로젝트 준비 완료!
|
|
155
|
+
|
|
156
|
+
📁 레포지토리: [REPO_COUNT]개
|
|
157
|
+
📋 MASTER_CODESYNCER.md 읽음
|
|
158
|
+
🎯 작업 가능 상태
|
|
159
|
+
|
|
160
|
+
어느 레포에서 작업할까요?
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 💡 유용한 명령어
|
|
166
|
+
|
|
167
|
+
### 네비게이션
|
|
168
|
+
```
|
|
169
|
+
"레포 목록 보여줘" → MASTER_CODESYNCER.md 기반 레포 나열
|
|
170
|
+
"백엔드로 이동" → api-server/.claude/CLAUDE.md 읽기
|
|
171
|
+
"프론트엔드로 전환" → web-client/.claude/CLAUDE.md 읽기
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 문서 업데이트
|
|
175
|
+
```
|
|
176
|
+
"전체 구조 업데이트" → 모든 레포 ARCHITECTURE.md 갱신
|
|
177
|
+
"의논 기록 확인" → 각 레포의 DECISIONS.md 확인
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 멀티레포 작업
|
|
181
|
+
```
|
|
182
|
+
"모든 레포에 ESLint 설정" → 순차적으로 각 레포 작업
|
|
183
|
+
"공통 타입 정의 필요" → 어느 레포에 둘지 의논
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 📚 관련 문서
|
|
189
|
+
|
|
190
|
+
### 루트 문서
|
|
191
|
+
- **멀티레포 네비게이션**: `.codesyncer/MASTER_CODESYNCER.md` ⭐ **필수**
|
|
192
|
+
- **설정 가이드**: `.codesyncer/SETUP_GUIDE.md` (AI 설정 완료 후 참고용)
|
|
193
|
+
|
|
194
|
+
### 개별 레포 문서
|
|
195
|
+
각 레포의 `.claude/` 폴더:
|
|
196
|
+
- **CLAUDE.md** - 레포별 코딩 규칙
|
|
197
|
+
- **ARCHITECTURE.md** - 프로젝트 구조
|
|
198
|
+
- **COMMENT_GUIDE.md** - 주석 작성 가이드
|
|
199
|
+
- **DECISIONS.md** - 의논 결정 기록
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 🔍 주석 검색 (전체 프로젝트)
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# 모든 레포에서 TODO 찾기
|
|
207
|
+
grep -r "@codesyncer-todo" ./*/.claude/
|
|
208
|
+
|
|
209
|
+
# 모든 의논 결정 찾기
|
|
210
|
+
grep -r "@codesyncer-decision" ./*/
|
|
211
|
+
|
|
212
|
+
# 특정 키워드 찾기
|
|
213
|
+
grep -r "결제" ./*/
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## ⚠️ 주의사항
|
|
219
|
+
|
|
220
|
+
1. **레포 전환 시 컨텍스트 전환**
|
|
221
|
+
- 각 레포는 독립적인 규칙을 가질 수 있음
|
|
222
|
+
- 반드시 해당 레포의 CLAUDE.md 확인
|
|
223
|
+
|
|
224
|
+
2. **크로스 레포 의존성**
|
|
225
|
+
- 여러 레포에 영향 주는 변경은 사용자와 의논
|
|
226
|
+
- 순서가 중요한 경우 명확히 설명
|
|
227
|
+
|
|
228
|
+
3. **공통 코드 관리**
|
|
229
|
+
- 타입 정의, 유틸 함수 등 공통 코드 위치 의논
|
|
230
|
+
- 중복 방지 전략 수립
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
**버전**: 1.0.0 (Powered by CodeSyncer)
|
|
235
|
+
**AI 도구**: Claude Code 최적화 | 호환: Cursor, GitHub Copilot, Continue.dev
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
*CodeSyncer는 오픈소스입니다: https://github.com/bitjaru/codesyncer*
|
|
@@ -158,20 +158,35 @@
|
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
161
|
-
## 🌐 4단계:
|
|
161
|
+
## 🌐 4단계: 루트 문서 생성
|
|
162
162
|
|
|
163
|
-
워크스페이스 루트에
|
|
163
|
+
워크스페이스 루트에 다음 파일들을 생성:
|
|
164
164
|
|
|
165
|
-
###
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
### 4.1 CLAUDE.md ⭐ **클로드가 먼저 읽는 파일**
|
|
166
|
+
|
|
167
|
+
루트에 `CLAUDE.md` 생성 (클로드가 자동으로 찾는 파일):
|
|
168
|
+
|
|
169
|
+
템플릿 사용: `./templates/[lang]/root_claude.md`
|
|
170
|
+
- [PROJECT_NAME], [GITHUB_USERNAME], [TODAY] 교체
|
|
171
|
+
- [REPO_COUNT]를 실제 레포지토리 개수로 교체
|
|
172
|
+
- 멀티레포 프로젝트임을 명시
|
|
173
|
+
- MASTER_CODESYNCER.md를 먼저 읽으라고 지시
|
|
174
|
+
- 전체 프로젝트 공통 규칙 명시
|
|
175
|
+
|
|
176
|
+
**중요**: 이 파일이 있어야 클로드가 세션 시작 시 자동으로 컨텍스트를 로드합니다!
|
|
177
|
+
|
|
178
|
+
### 4.2 .codesyncer/MASTER_CODESYNCER.md
|
|
179
|
+
|
|
180
|
+
워크스페이스 루트에 `.codesyncer/MASTER_CODESYNCER.md` 생성:
|
|
170
181
|
|
|
171
182
|
템플릿 사용: `./templates/[lang]/master.md`
|
|
172
183
|
- [REPO_TABLE]을 실제 감지된 레포로 교체
|
|
173
184
|
- [KEYWORD_MAPPING]을 레포별 키워드로 교체
|
|
174
185
|
- [PROJECT_NAME], [GITHUB_USERNAME] 교체
|
|
186
|
+
- 모든 레포지토리와 역할 나열
|
|
187
|
+
- 자동 레포지토리 전환 규칙
|
|
188
|
+
- 키워드 기반 네비게이션 매핑
|
|
189
|
+
- 멀티 레포 워크플로우 예시
|
|
175
190
|
|
|
176
191
|
---
|
|
177
192
|
|
|
@@ -183,8 +198,10 @@
|
|
|
183
198
|
✅ CodeSyncer 설정 완료!
|
|
184
199
|
|
|
185
200
|
생성된 파일:
|
|
186
|
-
📁
|
|
187
|
-
|
|
201
|
+
📁 루트/
|
|
202
|
+
├── CLAUDE.md ⭐ 클로드가 먼저 읽는 파일
|
|
203
|
+
└── .codesyncer/
|
|
204
|
+
└── MASTER_CODESYNCER.md
|
|
188
205
|
|
|
189
206
|
📁 [repo1]/.claude/
|
|
190
207
|
├── CLAUDE.md
|
|
@@ -197,8 +214,10 @@
|
|
|
197
214
|
|
|
198
215
|
다음 단계:
|
|
199
216
|
1. 생성된 파일 검토
|
|
200
|
-
2. CLAUDE.md
|
|
201
|
-
3.
|
|
217
|
+
2. 각 레포의 CLAUDE.md 커스터마이즈
|
|
218
|
+
3. 루트 CLAUDE.md 또는 개별 레포 CLAUDE.md 읽고 개발 시작
|
|
219
|
+
|
|
220
|
+
💡 클로드는 자동으로 루트 CLAUDE.md를 찾아서 읽습니다!
|
|
202
221
|
|
|
203
222
|
CodeSyncer 사용 준비 완료!
|
|
204
223
|
```
|
package/package.json
CHANGED
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# CLAUDE.md - [PROJECT_NAME] Multi-Repo Project
|
|
2
|
+
|
|
3
|
+
> **🎯 This is a Multi-Repository Workspace**
|
|
4
|
+
>
|
|
5
|
+
> Each repository is an independent project, working together collaboratively.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 First Thing to Do
|
|
10
|
+
|
|
11
|
+
**If you've read this file, immediately read the following file:**
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
.codesyncer/MASTER_CODESYNCER.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
→ This file contains **all repository information**, **auto-switching rules**, and **keyword mappings**.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 🏗️ Project Overview
|
|
22
|
+
|
|
23
|
+
- **Project Name**: [PROJECT_NAME]
|
|
24
|
+
- **GitHub**: https://github.com/[GITHUB_USERNAME]/[PROJECT_NAME]
|
|
25
|
+
- **Created**: [TODAY]
|
|
26
|
+
- **Repositories**: [REPO_COUNT]
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🗂️ Repository Structure
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
[PROJECT_NAME]/
|
|
34
|
+
├── CLAUDE.md (current file)
|
|
35
|
+
├── .codesyncer/
|
|
36
|
+
│ └── MASTER_CODESYNCER.md ⭐ Multi-repo navigation
|
|
37
|
+
│
|
|
38
|
+
├── [repo1]/
|
|
39
|
+
│ └── .claude/
|
|
40
|
+
│ └── CLAUDE.md (individual repo rules)
|
|
41
|
+
│
|
|
42
|
+
├── [repo2]/
|
|
43
|
+
│ └── .claude/
|
|
44
|
+
│ └── CLAUDE.md (individual repo rules)
|
|
45
|
+
│
|
|
46
|
+
└── ...
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 🚨 Important Rules
|
|
52
|
+
|
|
53
|
+
### 1. Check Repository Before Working
|
|
54
|
+
Always verify which repository you're working in:
|
|
55
|
+
```bash
|
|
56
|
+
pwd # Check current directory
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Read CLAUDE.md When Switching Repos
|
|
60
|
+
Every time you work in a new repo:
|
|
61
|
+
```
|
|
62
|
+
"Read [repo-name]/.claude/CLAUDE.md"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. No Work in Root Directory
|
|
66
|
+
Never code in root directory. Always navigate to specific repo before working.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 🔄 Multi-Repo Workflow
|
|
71
|
+
|
|
72
|
+
### Scenario 1: User Specifies Specific Repo
|
|
73
|
+
```
|
|
74
|
+
User: "Add login API to backend"
|
|
75
|
+
↓
|
|
76
|
+
1. Check MASTER_CODESYNCER.md for "backend" keyword → find api-server repo
|
|
77
|
+
2. Read api-server/.claude/CLAUDE.md
|
|
78
|
+
3. Work in api-server
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Scenario 2: Multiple Repos Need Changes
|
|
82
|
+
```
|
|
83
|
+
User: "Add order feature"
|
|
84
|
+
↓
|
|
85
|
+
1. "Order feature requires both backend (API) and frontend (UI). Proceed?"
|
|
86
|
+
2. After user confirmation
|
|
87
|
+
3. Work on API in api-server → report completion
|
|
88
|
+
4. Work on UI in web-client → report completion
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Scenario 3: Unclear Which Repo
|
|
92
|
+
```
|
|
93
|
+
1. Check keyword mapping in MASTER_CODESYNCER.md
|
|
94
|
+
2. If unclear, ask user
|
|
95
|
+
"Which repo should I work in?"
|
|
96
|
+
- A) api-server (backend)
|
|
97
|
+
- B) web-client (frontend)
|
|
98
|
+
- C) mobile-app (mobile)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 📝 Project-Wide Common Rules
|
|
104
|
+
|
|
105
|
+
The following rules apply to **all repositories**:
|
|
106
|
+
|
|
107
|
+
### Coding Standards
|
|
108
|
+
- ✅ Use TypeScript strict mode
|
|
109
|
+
- ✅ Explicit type definitions required
|
|
110
|
+
- ✅ Prefer functional programming
|
|
111
|
+
- ✅ Document all functions/components
|
|
112
|
+
- ✅ Error handling required
|
|
113
|
+
|
|
114
|
+
### Comment Tag System
|
|
115
|
+
Use the same tags across all repos:
|
|
116
|
+
```typescript
|
|
117
|
+
@codesyncer-rule // Special rules
|
|
118
|
+
@codesyncer-inference // Inference with reasoning
|
|
119
|
+
@codesyncer-decision // Decisions after discussion
|
|
120
|
+
@codesyncer-todo // User confirmation needed
|
|
121
|
+
@codesyncer-context // Business context explanation
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Details: `.claude/COMMENT_GUIDE.md` in each repo
|
|
125
|
+
|
|
126
|
+
### No-Inference Zones
|
|
127
|
+
**Never infer, always ask the user:**
|
|
128
|
+
- 💰 Business logic numbers (prices, fees, limits, discounts)
|
|
129
|
+
- 🔌 API endpoint URLs
|
|
130
|
+
- 🔐 Security settings (token expiry, encryption methods)
|
|
131
|
+
- 🗄️ Database schema
|
|
132
|
+
- 🌐 External service integration details
|
|
133
|
+
|
|
134
|
+
### Discussion-Required Keywords
|
|
135
|
+
When these keywords are detected, **stop work automatically** and discuss with user:
|
|
136
|
+
- 🔴 **CRITICAL**: payment, billing, auth, permission, delete, personal data, GDPR
|
|
137
|
+
- 🟡 **IMPORTANT**: API integration, DB schema, deployment, caching, email
|
|
138
|
+
- 🟢 **MINOR**: optimization, testing, logging, UI/UX
|
|
139
|
+
|
|
140
|
+
Full keyword list: `.codesyncer/MASTER_CODESYNCER.md`
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 🎯 Session Start Checklist
|
|
145
|
+
|
|
146
|
+
When AI reads this file:
|
|
147
|
+
|
|
148
|
+
1. ✅ Immediately read `.codesyncer/MASTER_CODESYNCER.md`
|
|
149
|
+
2. ✅ Understand overall repository structure
|
|
150
|
+
3. ✅ Check keyword mappings
|
|
151
|
+
4. ✅ Output ready message:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
✅ [PROJECT_NAME] multi-repo project ready!
|
|
155
|
+
|
|
156
|
+
📁 Repositories: [REPO_COUNT]
|
|
157
|
+
📋 Read MASTER_CODESYNCER.md
|
|
158
|
+
🎯 Ready to work
|
|
159
|
+
|
|
160
|
+
Which repo should we work in?
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 💡 Useful Commands
|
|
166
|
+
|
|
167
|
+
### Navigation
|
|
168
|
+
```
|
|
169
|
+
"Show repo list" → List repos from MASTER_CODESYNCER.md
|
|
170
|
+
"Go to backend" → Read api-server/.claude/CLAUDE.md
|
|
171
|
+
"Switch to frontend" → Read web-client/.claude/CLAUDE.md
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Document Updates
|
|
175
|
+
```
|
|
176
|
+
"Update all structures" → Refresh all ARCHITECTURE.md files
|
|
177
|
+
"Check decision log" → Review DECISIONS.md in each repo
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Multi-Repo Tasks
|
|
181
|
+
```
|
|
182
|
+
"Add ESLint to all repos" → Work sequentially on each repo
|
|
183
|
+
"Need common type defs" → Discuss where to place them
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 📚 Related Documents
|
|
189
|
+
|
|
190
|
+
### Root Documents
|
|
191
|
+
- **Multi-repo Navigation**: `.codesyncer/MASTER_CODESYNCER.md` ⭐ **Required**
|
|
192
|
+
- **Setup Guide**: `.codesyncer/SETUP_GUIDE.md` (Reference after AI setup)
|
|
193
|
+
|
|
194
|
+
### Individual Repo Documents
|
|
195
|
+
In each repo's `.claude/` folder:
|
|
196
|
+
- **CLAUDE.md** - Repo-specific coding rules
|
|
197
|
+
- **ARCHITECTURE.md** - Project structure
|
|
198
|
+
- **COMMENT_GUIDE.md** - Comment writing guide
|
|
199
|
+
- **DECISIONS.md** - Discussion decision log
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 🔍 Search Comments (Entire Project)
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Find all TODOs across repos
|
|
207
|
+
grep -r "@codesyncer-todo" ./*/.claude/
|
|
208
|
+
|
|
209
|
+
# Find all decision records
|
|
210
|
+
grep -r "@codesyncer-decision" ./*/
|
|
211
|
+
|
|
212
|
+
# Search for specific keyword
|
|
213
|
+
grep -r "payment" ./*/
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## ⚠️ Important Notes
|
|
219
|
+
|
|
220
|
+
1. **Context Switch When Changing Repos**
|
|
221
|
+
- Each repo may have independent rules
|
|
222
|
+
- Always check that repo's CLAUDE.md
|
|
223
|
+
|
|
224
|
+
2. **Cross-Repo Dependencies**
|
|
225
|
+
- Discuss changes affecting multiple repos with user
|
|
226
|
+
- Explain clearly when order matters
|
|
227
|
+
|
|
228
|
+
3. **Common Code Management**
|
|
229
|
+
- Discuss location for shared types, utilities
|
|
230
|
+
- Establish duplication prevention strategy
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
**Version**: 1.0.0 (Powered by CodeSyncer)
|
|
235
|
+
**AI Tools**: Optimized for Claude Code | Compatible: Cursor, GitHub Copilot, Continue.dev
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
*CodeSyncer is open source: https://github.com/bitjaru/codesyncer*
|
|
@@ -158,20 +158,35 @@ Use template: `./templates/[lang]/decisions.md`
|
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
161
|
-
## 🌐 Step 4: Generate
|
|
161
|
+
## 🌐 Step 4: Generate Root Documents
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
Create the following files at the workspace root:
|
|
164
164
|
|
|
165
|
-
###
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
### 4.1 CLAUDE.md ⭐ **Claude Reads This First**
|
|
166
|
+
|
|
167
|
+
Create `CLAUDE.md` at root (automatically discovered by Claude):
|
|
168
|
+
|
|
169
|
+
Use template: `./templates/[lang]/root_claude.md`
|
|
170
|
+
- Replace [PROJECT_NAME], [GITHUB_USERNAME], [TODAY]
|
|
171
|
+
- Replace [REPO_COUNT] with actual repository count
|
|
172
|
+
- Indicate this is a multi-repo project
|
|
173
|
+
- Instruct to read MASTER_CODESYNCER.md first
|
|
174
|
+
- Specify project-wide common rules
|
|
175
|
+
|
|
176
|
+
**Important**: This file must exist for Claude to automatically load context at session start!
|
|
177
|
+
|
|
178
|
+
### 4.2 .codesyncer/MASTER_CODESYNCER.md
|
|
179
|
+
|
|
180
|
+
Create `.codesyncer/MASTER_CODESYNCER.md` at workspace root:
|
|
170
181
|
|
|
171
182
|
Use template: `./templates/[lang]/master.md`
|
|
172
183
|
- Replace [REPO_TABLE] with actual detected repos
|
|
173
184
|
- Replace [KEYWORD_MAPPING] with repo-specific keywords
|
|
174
185
|
- Replace [PROJECT_NAME], [GITHUB_USERNAME]
|
|
186
|
+
- List all repositories with their roles
|
|
187
|
+
- Automatic repository switching rules
|
|
188
|
+
- Keyword-based navigation mapping
|
|
189
|
+
- Multi-repo workflow examples
|
|
175
190
|
|
|
176
191
|
---
|
|
177
192
|
|
|
@@ -183,8 +198,10 @@ After generating all files, present a summary:
|
|
|
183
198
|
✅ CodeSyncer Setup Complete!
|
|
184
199
|
|
|
185
200
|
Created files:
|
|
186
|
-
📁
|
|
187
|
-
|
|
201
|
+
📁 Root/
|
|
202
|
+
├── CLAUDE.md ⭐ Claude reads this first
|
|
203
|
+
└── .codesyncer/
|
|
204
|
+
└── MASTER_CODESYNCER.md
|
|
188
205
|
|
|
189
206
|
📁 [repo1]/.claude/
|
|
190
207
|
├── CLAUDE.md
|
|
@@ -197,8 +214,10 @@ Created files:
|
|
|
197
214
|
|
|
198
215
|
Next Steps:
|
|
199
216
|
1. Review the generated files
|
|
200
|
-
2. Customize
|
|
201
|
-
3.
|
|
217
|
+
2. Customize each repo's CLAUDE.md
|
|
218
|
+
3. Read root CLAUDE.md or individual repo CLAUDE.md to start development
|
|
219
|
+
|
|
220
|
+
💡 Claude automatically finds and reads root CLAUDE.md!
|
|
202
221
|
|
|
203
222
|
Ready to start using CodeSyncer!
|
|
204
223
|
```
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# CLAUDE.md - [PROJECT_NAME] 멀티레포 프로젝트
|
|
2
|
+
|
|
3
|
+
> **🎯 이것은 멀티레포 워크스페이스입니다**
|
|
4
|
+
>
|
|
5
|
+
> 각 레포지토리는 독립적인 프로젝트이며, 함께 협업합니다.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 첫 번째 할 일
|
|
10
|
+
|
|
11
|
+
**이 파일을 읽었다면, 다음 파일을 즉시 읽어주세요:**
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
.codesyncer/MASTER_CODESYNCER.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
→ 이 파일에 **모든 레포지토리 정보**, **자동 전환 규칙**, **키워드 매핑**이 있습니다.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 🏗️ 프로젝트 개요
|
|
22
|
+
|
|
23
|
+
- **프로젝트명**: [PROJECT_NAME]
|
|
24
|
+
- **GitHub**: https://github.com/[GITHUB_USERNAME]/[PROJECT_NAME]
|
|
25
|
+
- **생성일**: [TODAY]
|
|
26
|
+
- **레포지토리 수**: [REPO_COUNT]개
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 🗂️ 레포지토리 구조
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
[PROJECT_NAME]/
|
|
34
|
+
├── CLAUDE.md (지금 읽는 파일)
|
|
35
|
+
├── .codesyncer/
|
|
36
|
+
│ └── MASTER_CODESYNCER.md ⭐ 멀티레포 네비게이션
|
|
37
|
+
│
|
|
38
|
+
├── [repo1]/
|
|
39
|
+
│ └── .claude/
|
|
40
|
+
│ └── CLAUDE.md (개별 레포 규칙)
|
|
41
|
+
│
|
|
42
|
+
├── [repo2]/
|
|
43
|
+
│ └── .claude/
|
|
44
|
+
│ └── CLAUDE.md (개별 레포 규칙)
|
|
45
|
+
│
|
|
46
|
+
└── ...
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 🚨 중요 규칙
|
|
52
|
+
|
|
53
|
+
### 1. 작업 전 레포지토리 확인
|
|
54
|
+
항상 현재 어느 레포에서 작업하는지 확인하세요:
|
|
55
|
+
```bash
|
|
56
|
+
pwd # 현재 디렉토리 확인
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. 레포 전환 시 CLAUDE.md 읽기
|
|
60
|
+
새로운 레포에서 작업할 때마다:
|
|
61
|
+
```
|
|
62
|
+
"[repo-name]/.claude/CLAUDE.md 읽어줘"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. 루트에서는 작업 금지
|
|
66
|
+
루트 디렉토리에서 코드 작업 금지. 항상 특정 레포로 이동 후 작업.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 🔄 멀티레포 작업 흐름
|
|
71
|
+
|
|
72
|
+
### 시나리오 1: 사용자가 특정 레포 명시
|
|
73
|
+
```
|
|
74
|
+
사용자: "백엔드에 로그인 API 추가해줘"
|
|
75
|
+
↓
|
|
76
|
+
1. MASTER_CODESYNCER.md에서 "백엔드" 키워드 → api-server 레포 확인
|
|
77
|
+
2. api-server/.claude/CLAUDE.md 읽기
|
|
78
|
+
3. api-server에서 작업
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 시나리오 2: 여러 레포 수정 필요
|
|
82
|
+
```
|
|
83
|
+
사용자: "주문 기능 추가해줘"
|
|
84
|
+
↓
|
|
85
|
+
1. "주문 기능은 백엔드(API)와 프론트엔드(UI) 둘 다 필요합니다. 진행할까요?"
|
|
86
|
+
2. 사용자 확인 후
|
|
87
|
+
3. api-server에서 API 작업 → 완료 보고
|
|
88
|
+
4. web-client에서 UI 작업 → 완료 보고
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 시나리오 3: 어느 레포인지 모를 때
|
|
92
|
+
```
|
|
93
|
+
1. MASTER_CODESYNCER.md의 키워드 매핑 확인
|
|
94
|
+
2. 불명확하면 사용자에게 질문
|
|
95
|
+
"어느 레포에서 작업할까요?"
|
|
96
|
+
- A) api-server (백엔드)
|
|
97
|
+
- B) web-client (프론트엔드)
|
|
98
|
+
- C) mobile-app (모바일)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 📝 전체 프로젝트 공통 규칙
|
|
104
|
+
|
|
105
|
+
다음 규칙은 **모든 레포지토리에 공통 적용**:
|
|
106
|
+
|
|
107
|
+
### 코딩 표준
|
|
108
|
+
- ✅ TypeScript strict mode 사용
|
|
109
|
+
- ✅ 명시적 타입 정의 필수
|
|
110
|
+
- ✅ 함수형 프로그래밍 우선
|
|
111
|
+
- ✅ 모든 함수/컴포넌트에 주석 작성
|
|
112
|
+
- ✅ 에러 핸들링 필수
|
|
113
|
+
|
|
114
|
+
### 주석 태그 시스템
|
|
115
|
+
모든 레포에서 동일한 태그 사용:
|
|
116
|
+
```typescript
|
|
117
|
+
@codesyncer-rule // 특별 규칙
|
|
118
|
+
@codesyncer-inference // 추론 내용과 근거
|
|
119
|
+
@codesyncer-decision // 의논 후 결정 사항
|
|
120
|
+
@codesyncer-todo // 사용자 확인 필요
|
|
121
|
+
@codesyncer-context // 비즈니스 맥락 설명
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
자세한 내용: 각 레포의 `.claude/COMMENT_GUIDE.md`
|
|
125
|
+
|
|
126
|
+
### 추론 금지 영역
|
|
127
|
+
**절대 추론하지 말고 사용자에게 물어보세요:**
|
|
128
|
+
- 💰 비즈니스 로직 수치 (가격, 수수료, 한도, 할인율)
|
|
129
|
+
- 🔌 API 엔드포인트 URL
|
|
130
|
+
- 🔐 보안 설정 (토큰 만료 시간, 암호화 방식)
|
|
131
|
+
- 🗄️ 데이터베이스 스키마
|
|
132
|
+
- 🌐 외부 서비스 연동 정보
|
|
133
|
+
|
|
134
|
+
### 의논 필수 키워드
|
|
135
|
+
다음 키워드 감지 시 **자동으로 작업 중단** 후 사용자와 의논:
|
|
136
|
+
- 🔴 **CRITICAL**: 결제, 과금, 인증, 권한, 삭제, 개인정보, GDPR
|
|
137
|
+
- 🟡 **IMPORTANT**: API 연동, DB 스키마, 배포, 캐싱, 이메일
|
|
138
|
+
- 🟢 **MINOR**: 최적화, 테스트, 로깅, UI/UX
|
|
139
|
+
|
|
140
|
+
자세한 키워드 목록: `.codesyncer/MASTER_CODESYNCER.md`
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 🎯 세션 시작 체크리스트
|
|
145
|
+
|
|
146
|
+
AI가 이 파일을 읽으면:
|
|
147
|
+
|
|
148
|
+
1. ✅ `.codesyncer/MASTER_CODESYNCER.md` 즉시 읽기
|
|
149
|
+
2. ✅ 전체 레포지토리 구조 파악
|
|
150
|
+
3. ✅ 키워드 매핑 확인
|
|
151
|
+
4. ✅ 준비 완료 메시지 출력:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
✅ [PROJECT_NAME] 멀티레포 프로젝트 준비 완료!
|
|
155
|
+
|
|
156
|
+
📁 레포지토리: [REPO_COUNT]개
|
|
157
|
+
📋 MASTER_CODESYNCER.md 읽음
|
|
158
|
+
🎯 작업 가능 상태
|
|
159
|
+
|
|
160
|
+
어느 레포에서 작업할까요?
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 💡 유용한 명령어
|
|
166
|
+
|
|
167
|
+
### 네비게이션
|
|
168
|
+
```
|
|
169
|
+
"레포 목록 보여줘" → MASTER_CODESYNCER.md 기반 레포 나열
|
|
170
|
+
"백엔드로 이동" → api-server/.claude/CLAUDE.md 읽기
|
|
171
|
+
"프론트엔드로 전환" → web-client/.claude/CLAUDE.md 읽기
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 문서 업데이트
|
|
175
|
+
```
|
|
176
|
+
"전체 구조 업데이트" → 모든 레포 ARCHITECTURE.md 갱신
|
|
177
|
+
"의논 기록 확인" → 각 레포의 DECISIONS.md 확인
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 멀티레포 작업
|
|
181
|
+
```
|
|
182
|
+
"모든 레포에 ESLint 설정" → 순차적으로 각 레포 작업
|
|
183
|
+
"공통 타입 정의 필요" → 어느 레포에 둘지 의논
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 📚 관련 문서
|
|
189
|
+
|
|
190
|
+
### 루트 문서
|
|
191
|
+
- **멀티레포 네비게이션**: `.codesyncer/MASTER_CODESYNCER.md` ⭐ **필수**
|
|
192
|
+
- **설정 가이드**: `.codesyncer/SETUP_GUIDE.md` (AI 설정 완료 후 참고용)
|
|
193
|
+
|
|
194
|
+
### 개별 레포 문서
|
|
195
|
+
각 레포의 `.claude/` 폴더:
|
|
196
|
+
- **CLAUDE.md** - 레포별 코딩 규칙
|
|
197
|
+
- **ARCHITECTURE.md** - 프로젝트 구조
|
|
198
|
+
- **COMMENT_GUIDE.md** - 주석 작성 가이드
|
|
199
|
+
- **DECISIONS.md** - 의논 결정 기록
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 🔍 주석 검색 (전체 프로젝트)
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# 모든 레포에서 TODO 찾기
|
|
207
|
+
grep -r "@codesyncer-todo" ./*/.claude/
|
|
208
|
+
|
|
209
|
+
# 모든 의논 결정 찾기
|
|
210
|
+
grep -r "@codesyncer-decision" ./*/
|
|
211
|
+
|
|
212
|
+
# 특정 키워드 찾기
|
|
213
|
+
grep -r "결제" ./*/
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## ⚠️ 주의사항
|
|
219
|
+
|
|
220
|
+
1. **레포 전환 시 컨텍스트 전환**
|
|
221
|
+
- 각 레포는 독립적인 규칙을 가질 수 있음
|
|
222
|
+
- 반드시 해당 레포의 CLAUDE.md 확인
|
|
223
|
+
|
|
224
|
+
2. **크로스 레포 의존성**
|
|
225
|
+
- 여러 레포에 영향 주는 변경은 사용자와 의논
|
|
226
|
+
- 순서가 중요한 경우 명확히 설명
|
|
227
|
+
|
|
228
|
+
3. **공통 코드 관리**
|
|
229
|
+
- 타입 정의, 유틸 함수 등 공통 코드 위치 의논
|
|
230
|
+
- 중복 방지 전략 수립
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
**버전**: 1.0.0 (Powered by CodeSyncer)
|
|
235
|
+
**AI 도구**: Claude Code 최적화 | 호환: Cursor, GitHub Copilot, Continue.dev
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
*CodeSyncer는 오픈소스입니다: https://github.com/bitjaru/codesyncer*
|
|
@@ -158,20 +158,35 @@
|
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
161
|
-
## 🌐 4단계:
|
|
161
|
+
## 🌐 4단계: 루트 문서 생성
|
|
162
162
|
|
|
163
|
-
워크스페이스 루트에
|
|
163
|
+
워크스페이스 루트에 다음 파일들을 생성:
|
|
164
164
|
|
|
165
|
-
###
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
### 4.1 CLAUDE.md ⭐ **클로드가 먼저 읽는 파일**
|
|
166
|
+
|
|
167
|
+
루트에 `CLAUDE.md` 생성 (클로드가 자동으로 찾는 파일):
|
|
168
|
+
|
|
169
|
+
템플릿 사용: `./templates/[lang]/root_claude.md`
|
|
170
|
+
- [PROJECT_NAME], [GITHUB_USERNAME], [TODAY] 교체
|
|
171
|
+
- [REPO_COUNT]를 실제 레포지토리 개수로 교체
|
|
172
|
+
- 멀티레포 프로젝트임을 명시
|
|
173
|
+
- MASTER_CODESYNCER.md를 먼저 읽으라고 지시
|
|
174
|
+
- 전체 프로젝트 공통 규칙 명시
|
|
175
|
+
|
|
176
|
+
**중요**: 이 파일이 있어야 클로드가 세션 시작 시 자동으로 컨텍스트를 로드합니다!
|
|
177
|
+
|
|
178
|
+
### 4.2 .codesyncer/MASTER_CODESYNCER.md
|
|
179
|
+
|
|
180
|
+
워크스페이스 루트에 `.codesyncer/MASTER_CODESYNCER.md` 생성:
|
|
170
181
|
|
|
171
182
|
템플릿 사용: `./templates/[lang]/master.md`
|
|
172
183
|
- [REPO_TABLE]을 실제 감지된 레포로 교체
|
|
173
184
|
- [KEYWORD_MAPPING]을 레포별 키워드로 교체
|
|
174
185
|
- [PROJECT_NAME], [GITHUB_USERNAME] 교체
|
|
186
|
+
- 모든 레포지토리와 역할 나열
|
|
187
|
+
- 자동 레포지토리 전환 규칙
|
|
188
|
+
- 키워드 기반 네비게이션 매핑
|
|
189
|
+
- 멀티 레포 워크플로우 예시
|
|
175
190
|
|
|
176
191
|
---
|
|
177
192
|
|
|
@@ -183,8 +198,10 @@
|
|
|
183
198
|
✅ CodeSyncer 설정 완료!
|
|
184
199
|
|
|
185
200
|
생성된 파일:
|
|
186
|
-
📁
|
|
187
|
-
|
|
201
|
+
📁 루트/
|
|
202
|
+
├── CLAUDE.md ⭐ 클로드가 먼저 읽는 파일
|
|
203
|
+
└── .codesyncer/
|
|
204
|
+
└── MASTER_CODESYNCER.md
|
|
188
205
|
|
|
189
206
|
📁 [repo1]/.claude/
|
|
190
207
|
├── CLAUDE.md
|
|
@@ -197,8 +214,10 @@
|
|
|
197
214
|
|
|
198
215
|
다음 단계:
|
|
199
216
|
1. 생성된 파일 검토
|
|
200
|
-
2. CLAUDE.md
|
|
201
|
-
3.
|
|
217
|
+
2. 각 레포의 CLAUDE.md 커스터마이즈
|
|
218
|
+
3. 루트 CLAUDE.md 또는 개별 레포 CLAUDE.md 읽고 개발 시작
|
|
219
|
+
|
|
220
|
+
💡 클로드는 자동으로 루트 CLAUDE.md를 찾아서 읽습니다!
|
|
202
221
|
|
|
203
222
|
CodeSyncer 사용 준비 완료!
|
|
204
223
|
```
|