claude-code-achievements 1.0.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/bin/install.js ADDED
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const os = require('os');
6
+ const readline = require('readline');
7
+ const { execSync } = require('child_process');
8
+
9
+ const PLUGIN_NAME = 'claude-code-achievements';
10
+ const TARGET_DIR = path.join(os.homedir(), '.claude', 'plugins', 'local', PLUGIN_NAME);
11
+
12
+ const ITEMS_TO_COPY = ['.claude-plugin', 'commands', 'hooks', 'scripts', 'data', 'bin'];
13
+
14
+ // ANSI colors
15
+ const GREEN = '\x1b[32m';
16
+ const CYAN = '\x1b[36m';
17
+ const YELLOW = '\x1b[33m';
18
+ const RED = '\x1b[31m';
19
+ const DIM = '\x1b[2m';
20
+ const BOLD = '\x1b[1m';
21
+ const RESET = '\x1b[0m';
22
+
23
+ function copyRecursive(src, dest) {
24
+ const stat = fs.statSync(src);
25
+ if (stat.isDirectory()) {
26
+ if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true });
27
+ for (const entry of fs.readdirSync(src)) {
28
+ copyRecursive(path.join(src, entry), path.join(dest, entry));
29
+ }
30
+ } else {
31
+ fs.copyFileSync(src, dest);
32
+ if (src.endsWith('.sh') || src.endsWith('.js')) {
33
+ fs.chmodSync(dest, 0o755);
34
+ }
35
+ }
36
+ }
37
+
38
+ function detectOS() {
39
+ const platform = os.platform();
40
+ if (platform === 'darwin') return 'macOS';
41
+ if (platform === 'win32') return 'Windows';
42
+ return 'Linux';
43
+ }
44
+
45
+ function detectLanguage() {
46
+ const locale = process.env.LANG || process.env.LC_ALL || process.env.LANGUAGE || '';
47
+ if (locale.toLowerCase().includes('ko')) return 'ko';
48
+ return 'en';
49
+ }
50
+
51
+ function checkSystemNotification(osName) {
52
+ try {
53
+ if (osName === 'macOS') {
54
+ // macOS always has osascript
55
+ return { available: true, method: 'osascript' };
56
+ } else if (osName === 'Linux') {
57
+ // Check for notify-send
58
+ execSync('which notify-send', { stdio: 'ignore' });
59
+ return { available: true, method: 'notify-send' };
60
+ } else if (osName === 'Windows') {
61
+ // Check for PowerShell
62
+ execSync('where powershell.exe', { stdio: 'ignore' });
63
+ return { available: true, method: 'PowerShell' };
64
+ }
65
+ } catch (e) {
66
+ return { available: false, method: null };
67
+ }
68
+ return { available: false, method: null };
69
+ }
70
+
71
+ async function prompt(question, options) {
72
+ const rl = readline.createInterface({
73
+ input: process.stdin,
74
+ output: process.stdout
75
+ });
76
+
77
+ return new Promise((resolve) => {
78
+ const optStr = options.map((o, i) => `${i + 1}) ${o.label}`).join(' ');
79
+ rl.question(`${question} [${optStr}]: `, (answer) => {
80
+ rl.close();
81
+ const num = parseInt(answer) || 1;
82
+ const idx = Math.max(0, Math.min(options.length - 1, num - 1));
83
+ resolve(options[idx].value);
84
+ });
85
+ });
86
+ }
87
+
88
+ async function install() {
89
+ console.log('');
90
+ console.log(`${CYAN}${BOLD}╔═══════════════════════════════════════════════════════════╗${RESET}`);
91
+ console.log(`${CYAN}${BOLD}║ 🎮 Claude Code Achievements Installer 🎮 ║${RESET}`);
92
+ console.log(`${CYAN}${BOLD}╚═══════════════════════════════════════════════════════════╝${RESET}`);
93
+ console.log('');
94
+
95
+ const detectedOS = detectOS();
96
+ const detectedLang = detectLanguage();
97
+ const notifyCheck = checkSystemNotification(detectedOS);
98
+
99
+ console.log(`${DIM}Detected OS: ${detectedOS}${RESET}`);
100
+ if (notifyCheck.available) {
101
+ console.log(`${DIM}System notifications: ${GREEN}✓${RESET}${DIM} ${notifyCheck.method}${RESET}`);
102
+ } else {
103
+ console.log(`${DIM}System notifications: ${YELLOW}✗${RESET}${DIM} not available (will use terminal)${RESET}`);
104
+ }
105
+ console.log('');
106
+
107
+ // Check if interactive
108
+ const isInteractive = process.stdin.isTTY;
109
+
110
+ let language = detectedLang;
111
+ let notificationStyle = notifyCheck.available ? 'system' : 'terminal';
112
+
113
+ if (isInteractive) {
114
+ // Language selection
115
+ console.log(`${BOLD}Select language / 언어 선택:${RESET}`);
116
+ language = await prompt('', [
117
+ { label: 'English', value: 'en' },
118
+ { label: '한국어', value: 'ko' }
119
+ ]);
120
+ console.log(` ${GREEN}✓${RESET} ${language === 'ko' ? '한국어' : 'English'}`);
121
+ console.log('');
122
+
123
+ // Notification style (only ask if system notifications available)
124
+ if (notifyCheck.available) {
125
+ console.log(`${BOLD}Notification style:${RESET}`);
126
+ notificationStyle = await prompt('', [
127
+ { label: `System (${notifyCheck.method})`, value: 'system' },
128
+ { label: 'Terminal', value: 'terminal' },
129
+ { label: 'Both', value: 'both' }
130
+ ]);
131
+ console.log(` ${GREEN}✓${RESET} ${notificationStyle}`);
132
+ } else {
133
+ console.log(`${BOLD}Notification:${RESET} Terminal (system not available)`);
134
+ notificationStyle = 'terminal';
135
+ }
136
+ console.log('');
137
+ }
138
+
139
+ // Copy files
140
+ const packageRoot = path.resolve(__dirname, '..');
141
+
142
+ if (fs.existsSync(TARGET_DIR)) {
143
+ console.log(`${DIM}Removing existing installation...${RESET}`);
144
+ fs.rmSync(TARGET_DIR, { recursive: true, force: true });
145
+ }
146
+
147
+ console.log(`${DIM}Installing to ${TARGET_DIR}${RESET}`);
148
+ fs.mkdirSync(TARGET_DIR, { recursive: true });
149
+
150
+ for (const item of ITEMS_TO_COPY) {
151
+ const srcPath = path.join(packageRoot, item);
152
+ const destPath = path.join(TARGET_DIR, item);
153
+ if (fs.existsSync(srcPath)) {
154
+ copyRecursive(srcPath, destPath);
155
+ }
156
+ }
157
+
158
+ // Initialize state
159
+ const stateDir = path.join(os.homedir(), '.claude', 'achievements');
160
+ const stateFile = path.join(stateDir, 'state.json');
161
+
162
+ if (!fs.existsSync(stateDir)) {
163
+ fs.mkdirSync(stateDir, { recursive: true });
164
+ }
165
+
166
+ // Always update settings, preserve achievements if exists
167
+ let existingState = null;
168
+ if (fs.existsSync(stateFile)) {
169
+ try {
170
+ existingState = JSON.parse(fs.readFileSync(stateFile, 'utf8'));
171
+ } catch (e) {}
172
+ }
173
+
174
+ const newState = {
175
+ settings: {
176
+ language,
177
+ notifications: true,
178
+ notification_style: notificationStyle
179
+ },
180
+ achievements: existingState?.achievements || {},
181
+ counters: existingState?.counters || {},
182
+ session: {}
183
+ };
184
+
185
+ fs.writeFileSync(stateFile, JSON.stringify(newState, null, 2));
186
+
187
+ // Copy commands to ~/.claude/commands/
188
+ const commandsDir = path.join(os.homedir(), '.claude', 'commands');
189
+ if (!fs.existsSync(commandsDir)) {
190
+ fs.mkdirSync(commandsDir, { recursive: true });
191
+ }
192
+ const srcCommands = path.join(packageRoot, 'commands');
193
+ if (fs.existsSync(srcCommands)) {
194
+ for (const file of fs.readdirSync(srcCommands)) {
195
+ fs.copyFileSync(
196
+ path.join(srcCommands, file),
197
+ path.join(commandsDir, file)
198
+ );
199
+ }
200
+ }
201
+
202
+ console.log('');
203
+ console.log(`${GREEN}${BOLD}✅ Installation complete!${RESET}`);
204
+ console.log('');
205
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
206
+ console.log('');
207
+ console.log(`${BOLD}Ready to use:${RESET}`);
208
+ console.log('');
209
+ console.log(` ${CYAN}/achievements${RESET} View your achievements`);
210
+ console.log(` ${CYAN}/achievements hint${RESET} Get tips for unlocking`);
211
+ console.log('');
212
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
213
+ console.log('');
214
+ console.log('🎮 Happy coding!');
215
+ console.log('');
216
+ }
217
+
218
+ install().catch(err => {
219
+ console.error('❌ Installation failed:', err.message);
220
+ process.exit(1);
221
+ });
@@ -0,0 +1,63 @@
1
+ ---
2
+ description: "Configure your achievements settings"
3
+ ---
4
+
5
+ # /achievements-settings Command
6
+
7
+ ## Instructions
8
+
9
+ Use AskUserQuestion to let the user configure settings interactively.
10
+
11
+ ### Step 1: Read Current Settings
12
+
13
+ ```bash
14
+ cat ~/.claude/achievements/state.json | jq '.settings'
15
+ ```
16
+
17
+ ### Step 2: Show Menu
18
+
19
+ Use AskUserQuestion with ALL settings in one question (multiSelect: false):
20
+
21
+ ```
22
+ Question: "Select a setting to change"
23
+ Header: "Settings"
24
+ Options:
25
+ - "Language: {current}" (description: "Change display language")
26
+ - "Notifications: {on/off}" (description: "Toggle unlock notifications")
27
+ - "Style: {current}" (description: "terminal / system / both")
28
+ - "Reset Progress" (description: "Clear all achievements")
29
+ ```
30
+
31
+ ### Step 3: Based on Selection
32
+
33
+ **If "Language"**: Ask with options "English", "한국어", then apply:
34
+ ```bash
35
+ jq '.settings.language = "en"' ~/.claude/achievements/state.json > tmp.json && mv tmp.json ~/.claude/achievements/state.json
36
+ ```
37
+
38
+ **If "Notifications"**: Ask "On" or "Off", then apply:
39
+ ```bash
40
+ jq '.settings.notifications = true' ~/.claude/achievements/state.json > tmp.json && mv tmp.json ~/.claude/achievements/state.json
41
+ ```
42
+
43
+ **If "Style"**: Ask "terminal", "system", "both", then apply:
44
+ ```bash
45
+ jq '.settings.notification_style = "system"' ~/.claude/achievements/state.json > tmp.json && mv tmp.json ~/.claude/achievements/state.json
46
+ ```
47
+
48
+ **If "Reset"**: Confirm first, then:
49
+ ```bash
50
+ jq '.achievements = {} | .counters = {"ralph_iterations": 0, "files_read": 0, "edits_made": 0} | .session = {"files_read_set": []}' ~/.claude/achievements/state.json > tmp.json && mv tmp.json ~/.claude/achievements/state.json
51
+ ```
52
+
53
+ ### Step 4: Confirm
54
+
55
+ Tell user what changed: "✓ Language changed to English"
56
+
57
+ ## Direct Arguments
58
+
59
+ Skip menu if arguments provided:
60
+ - `/achievements-settings language en`
61
+ - `/achievements-settings notifications off`
62
+ - `/achievements-settings notification-style system`
63
+ - `/achievements-settings reset`
@@ -0,0 +1,93 @@
1
+ ---
2
+ description: "Display your Claude Code achievements progress"
3
+ ---
4
+
5
+ # /achievements Command
6
+
7
+ Display Claude Code achievements progress. Output directly in your response (not bash).
8
+
9
+ ## Arguments
10
+
11
+ - `(none)` or `all`: Show all achievements
12
+ - `hint` or `tips`: Show tips for unlocking
13
+ - `<category>`: Show specific category (basics, workflow, tools, mastery)
14
+
15
+ ## Instructions
16
+
17
+ ### Step 1: Read Data
18
+
19
+ Use the Read tool to read these files:
20
+ - `~/.claude/plugins/local/claude-code-achievements/data/achievements.json`
21
+ - `~/.claude/achievements/state.json`
22
+
23
+ ### Step 2: Format Output
24
+
25
+ **IMPORTANT: Output directly in your response text, NOT via bash. Bash output gets collapsed and has bad UX.**
26
+
27
+ Format like this (compact, readable):
28
+
29
+ ```
30
+ 🎮 **Claude Code Achievements** — 4/18 unlocked (22%)
31
+ ████░░░░░░░░░░░░░░░░
32
+
33
+ **Getting Started**
34
+ ✅ First Touch ⬜ · ✅ Creator ⬜
35
+ ⬛ Hello, Claude! ⬜ — Start your first conversation
36
+ ⬛ Project Curator 🟩 — Create CLAUDE.md for project context
37
+
38
+ **Workflow**
39
+ ⬛ Strategic Thinker 🟩 — Use Plan mode for complex tasks
40
+ ⬛ Version Controller 🟩 — Commit changes with Claude
41
+ ⬛ Ship It! 🟩 — Push changes to remote
42
+ ⬛ Quality Guardian 🟩 — Run tests with Claude
43
+
44
+ **Power Tools**
45
+ ✅ Delegation Master 🟦
46
+ ⬛ MCP Pioneer 🟦 — Use an MCP tool
47
+ ⬛ Web Explorer 🟦 — Search the web
48
+ ⬛ Skill Master 🟦 — Use a slash command
49
+ ⬛ Data Scientist 🟦 — Edit a Jupyter notebook
50
+ ⬛ Customizer 🟦 — Modify Claude Code settings
51
+
52
+ **Mastery**
53
+ ⬛ Automation Architect 🟪 — Set up hooks
54
+ ⬛ Loop Master 🟪 — Start autonomous coding loop
55
+ ⬛ Parallel Universe 🟪 — Run multiple Claude sessions
56
+ ⬛ Full Stack Vibecoder 🟨 — Work on frontend, backend, DB in one session
57
+
58
+ _Rarity: ⬜ Common · 🟩 Uncommon · 🟦 Rare · 🟪 Epic · 🟨 Legendary_
59
+ ```
60
+
61
+ Rules:
62
+ - ✅ = unlocked (show name + rarity only)
63
+ - ⬛ = locked (show name + rarity + description)
64
+ - Group unlocked items on same line when possible
65
+ - Keep it compact!
66
+
67
+ ### Step 3: Suggest Next
68
+
69
+ After showing achievements, suggest ONE easy achievement to unlock next.
70
+
71
+ ## Hint Mode (/achievements hint)
72
+
73
+ Show tips for 2-3 locked achievements. Read the `tip` field from achievements.json:
74
+
75
+ ```
76
+ 💡 **Tips to unlock more:**
77
+
78
+ 📋 **Project Curator** (🟩 Uncommon)
79
+ Create a CLAUDE.md file for your project
80
+ → Include tech stack, coding style, and common commands
81
+
82
+ 🎯 **Strategic Thinker** (🟩 Uncommon)
83
+ Use Plan mode for your next complex task
84
+ → Press Shift+Tab twice to enter Plan mode
85
+ ```
86
+
87
+ ## Rarity Reference
88
+
89
+ - ⬜ Common — basic actions
90
+ - 🟩 Uncommon — workflow essentials
91
+ - 🟦 Rare — power user features
92
+ - 🟪 Epic — advanced automation
93
+ - 🟨 Legendary — master vibecoder
@@ -0,0 +1,168 @@
1
+ {
2
+ "rarities": {
3
+ "common": { "name": "Common", "color": "⬜", "order": 1 },
4
+ "uncommon": { "name": "Uncommon", "color": "🟩", "order": 2 },
5
+ "rare": { "name": "Rare", "color": "🟦", "order": 3 },
6
+ "epic": { "name": "Epic", "color": "🟪", "order": 4 },
7
+ "legendary": { "name": "Legendary", "color": "🟨", "order": 5 }
8
+ },
9
+ "categories": {
10
+ "basics": {
11
+ "name": "Getting Started",
12
+ "description": "First steps with Claude Code",
13
+ "order": 1
14
+ },
15
+ "workflow": {
16
+ "name": "Workflow",
17
+ "description": "Mastering development workflow",
18
+ "order": 2
19
+ },
20
+ "tools": {
21
+ "name": "Power Tools",
22
+ "description": "Using advanced Claude Code features",
23
+ "order": 3
24
+ },
25
+ "mastery": {
26
+ "name": "Mastery",
27
+ "description": "Expert-level usage",
28
+ "order": 4
29
+ }
30
+ },
31
+ "achievements": {
32
+ "first_edit": {
33
+ "id": "first_edit",
34
+ "name": "First Touch",
35
+ "description": "Edit a file with Claude's help",
36
+ "tip": "Be specific: instead of 'fix the bug', say 'fix the TypeError in login.js line 42'",
37
+ "category": "basics",
38
+ "rarity": "common",
39
+ "icon": "✏️"
40
+ },
41
+ "first_write": {
42
+ "id": "first_write",
43
+ "name": "Creator",
44
+ "description": "Create a new file",
45
+ "tip": "Claude can create entire files from description. Try: 'Create a React component for a login form'",
46
+ "category": "basics",
47
+ "rarity": "common",
48
+ "icon": "📝"
49
+ },
50
+ "claude_md_creator": {
51
+ "id": "claude_md_creator",
52
+ "name": "Project Curator",
53
+ "description": "Create CLAUDE.md for project context",
54
+ "tip": "CLAUDE.md helps Claude understand your project. Include: tech stack, coding style, important files, and common commands.",
55
+ "category": "basics",
56
+ "rarity": "uncommon",
57
+ "icon": "📋"
58
+ },
59
+ "plan_mode_user": {
60
+ "id": "plan_mode_user",
61
+ "name": "Strategic Thinker",
62
+ "description": "Use Plan mode for complex tasks",
63
+ "tip": "Press Shift+Tab twice to enter Plan mode. Great for architecture decisions and multi-step tasks.",
64
+ "category": "workflow",
65
+ "rarity": "uncommon",
66
+ "icon": "🎯"
67
+ },
68
+ "git_commit": {
69
+ "id": "git_commit",
70
+ "name": "Version Controller",
71
+ "description": "Commit changes with Claude",
72
+ "tip": "Let Claude write commit messages! It reads your changes and writes meaningful conventional commits.",
73
+ "category": "workflow",
74
+ "rarity": "uncommon",
75
+ "icon": "📦"
76
+ },
77
+ "git_push": {
78
+ "id": "git_push",
79
+ "name": "Ship It!",
80
+ "description": "Push changes to remote",
81
+ "tip": "Always review changes before pushing. Ask Claude to summarize what will be pushed.",
82
+ "category": "workflow",
83
+ "rarity": "uncommon",
84
+ "icon": "🚀"
85
+ },
86
+ "run_tests": {
87
+ "id": "run_tests",
88
+ "name": "Quality Guardian",
89
+ "description": "Run tests with Claude",
90
+ "tip": "Ask Claude: 'Run the tests and fix any failures'. This is the vibecoding verification loop!",
91
+ "category": "workflow",
92
+ "rarity": "uncommon",
93
+ "icon": "🧪"
94
+ },
95
+ "multi_agent": {
96
+ "id": "multi_agent",
97
+ "name": "Delegation Master",
98
+ "description": "Use Task tool to spawn sub-agents",
99
+ "tip": "Task tool creates specialized agents for complex work. Great for parallel exploration.",
100
+ "category": "tools",
101
+ "rarity": "rare",
102
+ "icon": "🤖"
103
+ },
104
+ "first_mcp": {
105
+ "id": "first_mcp",
106
+ "name": "MCP Pioneer",
107
+ "description": "Use an MCP tool",
108
+ "tip": "MCP extends Claude's abilities. Connect to databases, APIs, or custom tools.",
109
+ "category": "tools",
110
+ "rarity": "rare",
111
+ "icon": "🔌"
112
+ },
113
+ "web_searcher": {
114
+ "id": "web_searcher",
115
+ "name": "Web Explorer",
116
+ "description": "Search the web for information",
117
+ "tip": "Claude can search for latest docs, solutions, and APIs.",
118
+ "category": "tools",
119
+ "rarity": "rare",
120
+ "icon": "🌐"
121
+ },
122
+ "skill_invoker": {
123
+ "id": "skill_invoker",
124
+ "name": "Skill Master",
125
+ "description": "Use a slash command skill",
126
+ "tip": "Skills are shortcuts. Try /commit, /pr, /init. Create custom skills in ~/.claude/commands/",
127
+ "category": "tools",
128
+ "rarity": "rare",
129
+ "icon": "⚡"
130
+ },
131
+ "notebook_editor": {
132
+ "id": "notebook_editor",
133
+ "name": "Data Scientist",
134
+ "description": "Edit a Jupyter notebook",
135
+ "tip": "Claude understands notebooks! Ask for data analysis, visualizations, or ML experiments.",
136
+ "category": "tools",
137
+ "rarity": "rare",
138
+ "icon": "📓"
139
+ },
140
+ "config_modifier": {
141
+ "id": "config_modifier",
142
+ "name": "Customizer",
143
+ "description": "Modify Claude Code settings",
144
+ "tip": "Customize Claude with /config or edit ~/.claude/settings.json.",
145
+ "category": "tools",
146
+ "rarity": "rare",
147
+ "icon": "⚙️"
148
+ },
149
+ "hooks_user": {
150
+ "id": "hooks_user",
151
+ "name": "Automation Architect",
152
+ "description": "Set up Claude Code hooks",
153
+ "tip": "Hooks run scripts on events. Use them for linting, testing, or custom workflows.",
154
+ "category": "mastery",
155
+ "rarity": "epic",
156
+ "icon": "🪝"
157
+ },
158
+ "ralph_starter": {
159
+ "id": "ralph_starter",
160
+ "name": "Loop Master",
161
+ "description": "Start an autonomous coding loop",
162
+ "tip": "Ralph Loop lets Claude work autonomously until a goal is met. Great for complex refactoring!",
163
+ "category": "mastery",
164
+ "rarity": "legendary",
165
+ "icon": "🔄"
166
+ }
167
+ }
168
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "ui": {
3
+ "title": "CLAUDE CODE ACHIEVEMENTS",
4
+ "unlocked": "Achievement Unlocked!",
5
+ "locked": "Locked",
6
+ "progress": "Progress",
7
+ "rarity": "Rarity",
8
+ "tip": "Tip",
9
+ "hint": "Hint"
10
+ },
11
+ "categories": {
12
+ "basics": { "name": "Getting Started", "description": "First steps with Claude Code" },
13
+ "workflow": { "name": "Workflow", "description": "Development workflow mastery" },
14
+ "tools": { "name": "Power Tools", "description": "Advanced Claude Code features" },
15
+ "mastery": { "name": "Mastery", "description": "Expert-level usage" }
16
+ },
17
+ "achievements": {
18
+ "first_edit": {
19
+ "name": "First Touch",
20
+ "description": "Edit a file with Claude's help",
21
+ "tip": "Be specific: instead of 'fix the bug', say 'fix the TypeError in login.js line 42'"
22
+ },
23
+ "first_write": {
24
+ "name": "Creator",
25
+ "description": "Create a new file",
26
+ "tip": "Claude can create entire files from description. Try: 'Create a React component for a login form'"
27
+ },
28
+ "claude_md_creator": {
29
+ "name": "Project Curator",
30
+ "description": "Create CLAUDE.md for project context",
31
+ "tip": "CLAUDE.md helps Claude understand your project. Include: tech stack, coding style, important files, and common commands."
32
+ },
33
+ "plan_mode_user": {
34
+ "name": "Strategic Thinker",
35
+ "description": "Use Plan mode for complex tasks",
36
+ "tip": "Press Shift+Tab twice to enter Plan mode. Great for architecture decisions and multi-step tasks."
37
+ },
38
+ "git_commit": {
39
+ "name": "Version Controller",
40
+ "description": "Commit changes with Claude",
41
+ "tip": "Let Claude write commit messages! It reads your changes and writes meaningful conventional commits."
42
+ },
43
+ "git_push": {
44
+ "name": "Ship It!",
45
+ "description": "Push changes to remote",
46
+ "tip": "Always review changes before pushing. Ask Claude to summarize what will be pushed."
47
+ },
48
+ "run_tests": {
49
+ "name": "Quality Guardian",
50
+ "description": "Run tests with Claude",
51
+ "tip": "Ask Claude: 'Run the tests and fix any failures'. This is the vibecoding verification loop!"
52
+ },
53
+ "multi_agent": {
54
+ "name": "Delegation Master",
55
+ "description": "Use Task tool to spawn sub-agents",
56
+ "tip": "Task tool creates specialized agents for complex work. Great for parallel exploration."
57
+ },
58
+ "first_mcp": {
59
+ "name": "MCP Pioneer",
60
+ "description": "Use an MCP tool",
61
+ "tip": "MCP extends Claude's abilities. Connect to databases, APIs, or custom tools."
62
+ },
63
+ "web_searcher": {
64
+ "name": "Web Explorer",
65
+ "description": "Search the web for information",
66
+ "tip": "Claude can search for latest docs, solutions, and APIs."
67
+ },
68
+ "skill_invoker": {
69
+ "name": "Skill Master",
70
+ "description": "Use a slash command skill",
71
+ "tip": "Skills are shortcuts. Try /commit, /pr, /init. Create custom skills in ~/.claude/commands/"
72
+ },
73
+ "notebook_editor": {
74
+ "name": "Data Scientist",
75
+ "description": "Edit a Jupyter notebook",
76
+ "tip": "Claude understands notebooks! Ask for data analysis, visualizations, or ML experiments."
77
+ },
78
+ "config_modifier": {
79
+ "name": "Customizer",
80
+ "description": "Modify Claude Code settings",
81
+ "tip": "Customize Claude with /config or edit ~/.claude/settings.json."
82
+ },
83
+ "hooks_user": {
84
+ "name": "Automation Architect",
85
+ "description": "Set up Claude Code hooks",
86
+ "tip": "Hooks run scripts on events. Use them for linting, testing, or custom workflows."
87
+ },
88
+ "ralph_starter": {
89
+ "name": "Loop Master",
90
+ "description": "Start an autonomous coding loop",
91
+ "tip": "Ralph Loop lets Claude work autonomously until a goal is met. Great for complex refactoring!"
92
+ }
93
+ }
94
+ }