Skip to content

Commit 3e66b06

Browse files
snooclaude
andcommitted
feat: v3.2.0 - Hooks auto-reminder & context optimization
## New Features - **Hooks Setup**: Auto-reminder system during `codesyncer init` - AI gets reminded to add tags before completing responses - Language-specific prompts (Korean/English) - Optional setup with clear explanation - **Template Improvements** - TL;DR compressed to 3 lines - DO NOT section added (absolutely forbidden actions) - Session start checklist with git commands - Subfolder CLAUDE.md guide for large projects - Do Not Touch zones section - Multi-repo cross-repo tagging guide - Hooks guide section with setup status ## Files Added - `src/templates/hooks/settings.json` - English hooks config - `src/templates/hooks/settings.ko.json` - Korean hooks config - `src/templates/*/subfolder-claude.md` - Subfolder template ## Files Modified - `src/commands/init.ts` - Hooks setup flow - `src/templates/*/claude.md` - v3.2 template updates - `src/templates/*/setup_guide_single.md` - HOOKS_GUIDE instructions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 8fb9fa6 commit 3e66b06

File tree

10 files changed

+537
-44
lines changed

10 files changed

+537
-44
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codesyncer",
3-
"version": "3.1.1",
3+
"version": "3.2.0",
44
"description": "Claude forgets everything when the session ends. CodeSyncer makes it remember.",
55
"keywords": [
66
"ai-collaboration",

src/commands/init.ts

Lines changed: 132 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,124 @@ import { displayProgress } from '../utils/progress';
1212
import { saveSetupState, loadSetupState, clearSetupState, SetupState } from '../utils/setup-state';
1313
import { VERSION } from '../utils/version';
1414

15+
/**
16+
* Display Hooks explanation and ask for setup
17+
*/
18+
async function askHooksSetup(lang: Language): Promise<boolean> {
19+
const isKo = lang === 'ko';
20+
21+
console.log();
22+
console.log(chalk.bold.cyan('─'.repeat(60)));
23+
console.log();
24+
console.log(chalk.bold(isKo ? '🪝 Hooks 설정 (권장)' : '🪝 Hooks Setup (Recommended)'));
25+
console.log();
26+
27+
console.log(chalk.white(isKo ? 'Hooks란?' : 'What are Hooks?'));
28+
console.log(chalk.gray(
29+
isKo
30+
? ' 세션이 길어지면 AI가 규칙을 까먹을 수 있습니다.'
31+
: ' AI might forget rules during long sessions.'
32+
));
33+
console.log(chalk.gray(
34+
isKo
35+
? ' Hooks를 설정하면 AI가 응답 완료 전에'
36+
: ' With Hooks, AI automatically checks'
37+
));
38+
console.log(chalk.gray(
39+
isKo
40+
? ' 자동으로 "태그 붙였어?" 확인합니다.'
41+
: ' "Did you add tags?" before completing.'
42+
));
43+
console.log();
44+
console.log(chalk.bold.cyan('─'.repeat(60)));
45+
console.log();
46+
47+
const { setupHooks } = await inquirer.prompt([
48+
{
49+
type: 'confirm',
50+
name: 'setupHooks',
51+
message: isKo ? 'Hooks를 설정할까요?' : 'Set up Hooks?',
52+
default: true,
53+
},
54+
]);
55+
56+
return setupHooks;
57+
}
58+
59+
/**
60+
* Generate Hooks settings.json file
61+
*/
62+
async function generateHooksSettings(targetDir: string, lang: Language): Promise<void> {
63+
const hooksTemplateFile = lang === 'ko' ? 'settings.ko.json' : 'settings.json';
64+
const hooksTemplate = await fs.readFile(
65+
path.join(__dirname, '..', 'templates', 'hooks', hooksTemplateFile),
66+
'utf-8'
67+
);
68+
69+
await fs.writeFile(
70+
path.join(targetDir, 'settings.json'),
71+
hooksTemplate,
72+
'utf-8'
73+
);
74+
}
75+
76+
/**
77+
* Get Hooks guide text for CLAUDE.md based on setup status
78+
*/
79+
function getHooksGuide(lang: Language, hooksEnabled: boolean): string {
80+
const isKo = lang === 'ko';
81+
82+
if (hooksEnabled) {
83+
return isKo
84+
? `> ✅ 이미 설정됨: \`.claude/settings.json\`
85+
86+
**Hooks가 하는 일**:
87+
- AI가 응답 완료 전에 "태그 붙였어?" 자동 확인
88+
- 세션이 길어져도 규칙을 까먹지 않음
89+
90+
**수정하려면**:
91+
- \`.claude/settings.json\` 직접 편집
92+
- 또는 "Hooks 수정해줘"라고 말하세요
93+
94+
**비활성화하려면**:
95+
- \`.claude/settings.json\` 삭제`
96+
: `> ✅ Already configured: \`.claude/settings.json\`
97+
98+
**What Hooks do**:
99+
- AI auto-checks "Did you add tags?" before completing
100+
- Rules are remembered even in long sessions
101+
102+
**To modify**:
103+
- Edit \`.claude/settings.json\` directly
104+
- Or say "Modify Hooks"
105+
106+
**To disable**:
107+
- Delete \`.claude/settings.json\``;
108+
} else {
109+
return isKo
110+
? `> ⚠️ 아직 설정 안 됨
111+
112+
**Hooks란?**
113+
세션이 길어지면 AI가 규칙을 까먹을 수 있습니다.
114+
Hooks를 설정하면 AI가 응답 완료 전에 자동으로 "태그 붙였어?" 확인합니다.
115+
116+
**설정하려면**:
117+
"CodeSyncer Hooks 설정해줘"라고 말하세요.
118+
119+
AI가 자동으로 \`.claude/settings.json\`을 생성합니다.`
120+
: `> ⚠️ Not configured yet
121+
122+
**What are Hooks?**
123+
AI might forget rules during long sessions.
124+
With Hooks, AI automatically checks "Did you add tags?" before completing.
125+
126+
**To set up**:
127+
Say "Set up CodeSyncer Hooks".
128+
129+
AI will automatically create \`.claude/settings.json\`.`;
130+
}
131+
}
132+
15133
/**
16134
* Display onboarding explanation for first-time users
17135
*/
@@ -429,6 +547,9 @@ export async function initCommand(options: InitOptions) {
429547
}
430548
}
431549

550+
// Ask for Hooks setup
551+
const setupHooks = await askHooksSetup(lang);
552+
432553
// Single-repo: skip select step, go directly to generate
433554
displayProgress(4, lang);
434555

@@ -459,6 +580,12 @@ export async function initCommand(options: InitOptions) {
459580

460581
console.log(chalk.green('✓') + ' .claude/SETUP_GUIDE.md');
461582

583+
// Generate Hooks settings.json if enabled
584+
if (setupHooks) {
585+
await generateHooksSettings(claudeDir, lang);
586+
console.log(chalk.green('✓') + ' .claude/settings.json ' + chalk.gray('(Hooks)'));
587+
}
588+
462589
// Complete! Clear recovery state
463590
await clearSetupState(currentDir);
464591
displayProgress(5, lang);
@@ -467,7 +594,11 @@ export async function initCommand(options: InitOptions) {
467594
console.log(chalk.bold.green(`✅ ${lang === 'ko' ? 'CodeSyncer 초기화 완료! (단일 레포 모드)' : 'CodeSyncer initialized! (Single Repo Mode)'}\n`));
468595

469596
console.log(chalk.bold(lang === 'ko' ? '📋 생성된 파일:' : '📋 Created files:'));
470-
console.log(` ${chalk.cyan('.claude/SETUP_GUIDE.md')} ${chalk.gray('- AI setup instructions')}\n`);
597+
console.log(` ${chalk.cyan('.claude/SETUP_GUIDE.md')} ${chalk.gray('- AI setup instructions')}`);
598+
if (setupHooks) {
599+
console.log(` ${chalk.cyan('.claude/settings.json')} ${chalk.gray('- Hooks (auto-reminder)')}`);
600+
}
601+
console.log();
471602

472603
console.log(chalk.bold(lang === 'ko' ? '🚀 다음 단계:' : '🚀 Next steps:'));
473604
console.log();

src/templates/en/claude.md

Lines changed: 126 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!-- codesyncer-section-start:header -->
2-
# CLAUDE.md - [PROJECT_NAME] Coding Guide v3.0
2+
# CLAUDE.md - [PROJECT_NAME] Coding Guide v3.2
33

44
> **Powered by CodeSyncer** - AI Collaboration System
55
@@ -13,6 +13,26 @@ CodeSyncer helps maintain context between AI sessions through @codesyncer-* tags
1313

1414
---
1515

16+
## ⚡ TL;DR (3-Line Summary)
17+
18+
```
19+
1. Tags required: inference→@codesyncer-inference, decision→@codesyncer-decision
20+
2. 💰Payment/🔐Security/🔌API → Always ask first
21+
3. When uncertain → Ask
22+
```
23+
24+
---
25+
26+
## ❌ DO NOT (Absolutely Forbidden)
27+
28+
- Do not infer prices/fees
29+
- Do not guess API URLs
30+
- Do not change security settings arbitrarily
31+
- Do not write code without tags
32+
- Do not delete files without confirmation
33+
34+
---
35+
1636
## 🧠 Why Use This System?
1737

1838
**Problem**: AI forgets all context when the session ends.
@@ -27,18 +47,6 @@ CodeSyncer helps maintain context between AI sessions through @codesyncer-* tags
2747
```
2848
→ Next session, AI reads the code and **automatically recovers context**
2949

30-
---
31-
32-
## ⚡ TL;DR (Never Forget)
33-
34-
```
35-
1. Making inference → // @codesyncer-inference: [reason]
36-
2. Making decision → // @codesyncer-decision: [date] [content]
37-
3. 💰Price/🔐Security/🔌API → Always ask first
38-
4. All code must have tags (no untagged code)
39-
5. When uncertain → Ask
40-
```
41-
4250
---
4351
<!-- codesyncer-section-end:header -->
4452

@@ -237,14 +245,21 @@ async function deleteUser(id: string) {
237245
---
238246

239247
<!-- codesyncer-section-start:session-checklist -->
240-
## 💡 Session Start Checklist
248+
## 🔍 Session Start Checklist
241249

242-
When AI reads this file, it automatically:
250+
**Check Git status** (understand current work context):
251+
```bash
252+
git branch # Check current branch
253+
git status # Check changes
254+
git log -3 # Check last 3 commits
255+
```
243256

244-
1.**Show help** - Display available commands
245-
2.**Understand project structure** - Check ARCHITECTURE.md
246-
3.**Check recent discussions** - Review DECISIONS.md
247-
4.**Ready message** - "Ready to work!"
257+
**Check documents**:
258+
1.**CLAUDE.md** - Review rules in this file
259+
2.**ARCHITECTURE.md** - Understand project structure
260+
3.**DECISIONS.md** - Review recent decisions
261+
262+
**Ready**: "Ready to work!"
248263
<!-- codesyncer-section-end:session-checklist -->
249264

250265
---
@@ -260,6 +275,97 @@ When AI reads this file, it automatically:
260275

261276
---
262277

278+
<!-- codesyncer-section-start:subfolder-guide -->
279+
## 📂 Subfolder CLAUDE.md (When Code Grows)
280+
281+
When the project grows, add CLAUDE.md to each folder:
282+
283+
```
284+
project/
285+
├── CLAUDE.md # Global rules
286+
├── src/
287+
│ ├── payment/
288+
│ │ └── CLAUDE.md # Payment rules + tag reminders
289+
│ └── auth/
290+
│ └── CLAUDE.md # Auth rules
291+
```
292+
293+
AI will automatically read it when entering that folder.
294+
295+
### Subfolder CLAUDE.md Example
296+
```markdown
297+
# CLAUDE.md - payment
298+
299+
## 📌 This Folder's Purpose
300+
Payment processing and settlement code
301+
302+
## ⚠️ CodeSyncer Reminder
303+
- Inference → @codesyncer-inference
304+
- Decision → @codesyncer-decision
305+
- 💰Payment/🔐Security → Ask first
306+
307+
## 🚫 Do Not Touch
308+
- `generated/` - Auto-generated files
309+
```
310+
<!-- codesyncer-section-end:subfolder-guide -->
311+
312+
---
313+
314+
<!-- codesyncer-section-start:do-not-touch -->
315+
## 🚫 Do Not Touch (Protected Zones)
316+
317+
Do not modify the following files/folders:
318+
319+
| Path | Reason |
320+
|------|--------|
321+
| `src/generated/` | Auto-generated files |
322+
| `src/legacy/` | Do not modify until migration |
323+
| `.env*` | Environment variables, do not edit directly |
324+
325+
> 💡 Customize this section for your project
326+
<!-- codesyncer-section-end:do-not-touch -->
327+
328+
---
329+
330+
<!-- codesyncer-section-start:multi-repo -->
331+
## 🔗 Multi-Repo Work
332+
333+
### Git Branch = Work ID
334+
Use branch names as work IDs:
335+
- `feature/AUTH-001-login`
336+
- `fix/PAY-002-webhook`
337+
338+
### Cross-Repo Tags
339+
Use the same tag for work spanning multiple repos:
340+
```typescript
341+
// frontend repo
342+
// @codesyncer-work:AUTH-001 Login form
343+
344+
// backend repo
345+
// @codesyncer-work:AUTH-001 Login API
346+
```
347+
348+
Search: `grep -r "@codesyncer-work:AUTH-001" ../`
349+
350+
### Related Repos
351+
352+
| Repo | Role | Path |
353+
|------|------|------|
354+
| - | - | - |
355+
356+
> 💡 Customize this table for your project
357+
<!-- codesyncer-section-end:multi-repo -->
358+
359+
---
360+
361+
<!-- codesyncer-section-start:hooks -->
362+
## 🪝 Hooks (Auto Reminders)
363+
364+
[HOOKS_GUIDE]
365+
<!-- codesyncer-section-end:hooks -->
366+
367+
---
368+
263369
<!-- codesyncer-section-start:footer -->
264370
## 🔍 Comment Search
265371

@@ -292,4 +398,4 @@ grep -r "@codesyncer-rule" ./
292398
*This collaboration system is open source. Suggest improvements at [CodeSyncer GitHub](https://github.com/bitjaru/codesyncer)!*
293399
<!-- codesyncer-section-end:footer -->
294400

295-
<!-- codesyncer-version: 3.1.1 -->
401+
<!-- codesyncer-version: 3.2.0 -->

src/templates/en/setup_guide_single.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,39 @@ When generating files, replace these:
285285
- `[GITHUB_USERNAME]` → User's GitHub username
286286
- `[KEYWORDS]` → User-confirmed discussion keywords
287287
- `[TEMPLATES]` → Project type-specific templates
288+
- `[HOOKS_GUIDE]` → Hooks status guide (see below)
289+
290+
### [HOOKS_GUIDE] Replacement
291+
292+
If `.claude/settings.json` exists (Hooks enabled):
293+
```markdown
294+
> ✅ Already configured: `.claude/settings.json`
295+
296+
**What Hooks do**:
297+
- AI auto-checks "Did you add tags?" before completing
298+
- Rules are remembered even in long sessions
299+
300+
**To modify**:
301+
- Edit `.claude/settings.json` directly
302+
- Or say "Modify Hooks"
303+
304+
**To disable**:
305+
- Delete `.claude/settings.json`
306+
```
307+
308+
If `.claude/settings.json` doesn't exist (Hooks not configured):
309+
```markdown
310+
> ⚠️ Not configured yet
311+
312+
**What are Hooks?**
313+
AI might forget rules during long sessions.
314+
With Hooks, AI automatically checks "Did you add tags?" before completing.
315+
316+
**To set up**:
317+
Say "Set up CodeSyncer Hooks".
318+
319+
AI will automatically create `.claude/settings.json`.
320+
```
288321

289322
---
290323

@@ -323,4 +356,4 @@ rm .claude/SETUP_GUIDE.md
323356

324357
*This setup guide is generated by CodeSyncer CLI. For issues or improvements, visit: https://github.com/bitjaru/codesyncer*
325358

326-
<!-- codesyncer-version: 3.1.1 -->
359+
<!-- codesyncer-version: 3.2.0 -->

0 commit comments

Comments
 (0)