@agentic15.com/agentic15-claude-zen 3.3.0 → 4.0.2

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
@@ -23,42 +23,109 @@ npx "@agentic15.com/agentic15-claude-zen" my-project
23
23
  cd my-project
24
24
  ```
25
25
 
26
- **Step 3: Launch Claude Code from Inside Project Directory**
26
+ **Step 3: Initialize Git and Link to GitHub**
27
27
 
28
- Start Claude Code CLI from inside the `my-project` directory. Claude Code MUST be running from inside your project directory to access the framework files.
28
+ ```bash
29
+ # Initialize git (if not already done)
30
+ git init
31
+ git branch -M main # Rename master to main
32
+ git add .
33
+ git commit -m "Initial commit"
34
+
35
+ # Create GitHub repository and link it
36
+ gh repo create OWNER/REPO --public # or --private
37
+ git remote add origin https://github.com/OWNER/REPO.git
38
+ git push -u origin main
39
+ ```
40
+
41
+ Replace `OWNER/REPO` with your GitHub username and repository name (e.g., `myusername/my-project`).
42
+
43
+ > **REQUIRED**: This step is mandatory. The framework needs a GitHub remote to create issues and pull requests.
29
44
 
30
45
  **Step 4: Configure Repository Settings (Recommended)**
46
+
47
+ **For Bash/Mac/Linux:**
31
48
  ```bash
32
49
  # Prevent direct pushes to main - require PRs for all changes
50
+ cat > /tmp/protection.json << 'EOF'
51
+ {
52
+ "required_pull_request_reviews": {
53
+ "required_approving_review_count": 0
54
+ },
55
+ "enforce_admins": false,
56
+ "allow_force_pushes": false,
57
+ "allow_deletions": false,
58
+ "required_status_checks": null,
59
+ "restrictions": null
60
+ }
61
+ EOF
62
+
33
63
  gh api repos/OWNER/REPO/branches/main/protection -X PUT \
34
64
  -H "Accept: application/vnd.github+json" \
35
- -f required_pull_request_reviews[required_approving_review_count]=0 \
36
- -f enforce_admins=false \
37
- -f allow_force_pushes=false \
38
- -f allow_deletions=false
65
+ --input /tmp/protection.json
39
66
 
40
67
  # Auto-delete branches after PR merge
41
68
  gh api repos/OWNER/REPO -X PATCH \
42
69
  -H "Accept: application/vnd.github+json" \
43
70
  -f delete_branch_on_merge=true
44
71
  ```
72
+
73
+ **For PowerShell (Windows):**
74
+ ```powershell
75
+ # Prevent direct pushes to main - require PRs for all changes
76
+ $body = @"
77
+ {
78
+ "required_pull_request_reviews": {
79
+ "required_approving_review_count": 0
80
+ },
81
+ "enforce_admins": false,
82
+ "allow_force_pushes": false,
83
+ "allow_deletions": false,
84
+ "required_status_checks": null,
85
+ "restrictions": null
86
+ }
87
+ "@
88
+
89
+ echo $body | gh api repos/OWNER/REPO/branches/main/protection -X PUT -H "Accept: application/vnd.github+json" --input -
90
+
91
+ # Auto-delete branches after PR merge
92
+ gh api repos/OWNER/REPO -X PATCH -H "Accept: application/vnd.github+json" -f delete_branch_on_merge=true
93
+ ```
94
+
45
95
  Replace `OWNER/REPO` with your GitHub username and repository name.
46
96
 
97
+
47
98
  **Step 5: Use Framework Commands**
48
99
  ```bash
49
100
  npx agentic15 auth # One-time GitHub setup
50
101
  npx agentic15 plan # Enter interactive mode
51
102
  # Type/paste your requirements, press Ctrl+D when done
103
+ ```
104
+
105
+
106
+ **Step 6: Launch Claude Code in Another Terminal**
107
+
52
108
  # Open another terminal. Make sure that you in your project directory. Launch Claude
109
+ Start Claude Code CLI from inside the `my-project` directory. Claude Code MUST be running from inside your project directory to access the framework files.
53
110
  # Ask Claude: "Read the requirements file and generate a task breakdown plan"
111
+
112
+
113
+ **Step 7: User Termianl and Not Claude Terminal**
114
+ ```
115
+ npx agentic15 plan # Generate Task Files and Lock Plan
54
116
  npx agentic15 task next # Start first task
55
- # Ask Claude: "Implement this task"
117
+ ```
118
+
119
+ **Step 8: Claude Terminal**
120
+ # Ask Claude: "Implement this Active task"
121
+
122
+ **Step 9: User Termianl Not Claude Terminal**
123
+ ```
56
124
  npx agentic15 commit # Test, commit, push, PR
57
125
  ```
58
126
 
59
- > **IMPORTANT**: Always launch Claude Code from inside your project directory, not from the parent directory. The framework relies on `.claude/` configuration files that must be accessible from the working directory.
60
127
 
61
- **Step 6: Clean Up Local Branches**
128
+ **Step 10: Clean Up Local Branches**
62
129
  ```bash
63
130
  # If auto-delete is enabled, only clean up local branches
64
131
  git branch -d feature/task-001
package/bin/agentic15.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import { Command } from 'commander';
4
4
  import { AuthCommand } from '../src/cli/AuthCommand.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentic15.com/agentic15-claude-zen",
3
- "version": "3.3.0",
3
+ "version": "4.0.2",
4
4
  "description": "Structured AI-assisted development framework for Claude Code with enforced quality standards",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -45,7 +45,10 @@ export class CommitCommand {
45
45
  // Step 8: Update GitHub issue status
46
46
  await this.updateGitHubIssue(task, prUrl);
47
47
 
48
- // Step 9: Display summary
48
+ // Step 9: Mark task as completed
49
+ this.markTaskCompleted(task);
50
+
51
+ // Step 10: Display summary
49
52
  this.displaySummary(task, prUrl, tracker);
50
53
  }
51
54
 
@@ -266,6 +269,28 @@ export class CommitCommand {
266
269
  }
267
270
  }
268
271
 
272
+ static markTaskCompleted(task) {
273
+ try {
274
+ const activePlanPath = join(process.cwd(), '.claude', 'ACTIVE-PLAN');
275
+ const planId = readFileSync(activePlanPath, 'utf-8').trim();
276
+ const trackerPath = join(process.cwd(), '.claude', 'plans', planId, 'TASK-TRACKER.json');
277
+
278
+ // Update tracker
279
+ const tracker = JSON.parse(readFileSync(trackerPath, 'utf-8'));
280
+ const taskInTracker = tracker.taskFiles.find(t => t.id === task.id);
281
+
282
+ if (taskInTracker) {
283
+ taskInTracker.status = 'completed';
284
+ taskInTracker.completedAt = new Date().toISOString();
285
+ writeFileSync(trackerPath, JSON.stringify(tracker, null, 2));
286
+ console.log(`\n✅ Marked ${task.id} as completed`);
287
+ }
288
+ } catch (error) {
289
+ console.log(`\n⚠️ Failed to mark task as completed: ${error.message}`);
290
+ console.log(' You may need to manually update TASK-TRACKER.json\n');
291
+ }
292
+ }
293
+
269
294
  static displaySummary(task, prUrl, tracker) {
270
295
  console.log('\n┌─────────────────────────────────────────┐');
271
296
  console.log('│ ✅ Commit Workflow Complete │');
@@ -28,6 +28,9 @@ export class TaskCommand {
28
28
  process.exit(1);
29
29
  }
30
30
 
31
+ // Verify git remote is configured
32
+ this.validateGitRemote();
33
+
31
34
  // Load task tracker
32
35
  const tracker = this.loadTracker();
33
36
  const task = tracker.taskFiles.find(t => t.id === taskId);
@@ -248,4 +251,37 @@ export class TaskCommand {
248
251
  const planId = readFileSync(activePlanPath, 'utf-8').trim();
249
252
  return join(process.cwd(), '.claude', 'plans', planId, 'tasks', `${taskId}.json`);
250
253
  }
254
+
255
+ static validateGitRemote() {
256
+ try {
257
+ // Check if git remote origin exists
258
+ const remote = execSync('git remote get-url origin', { encoding: 'utf-8', stdio: 'pipe' }).trim();
259
+
260
+ if (!remote || remote.length === 0) {
261
+ throw new Error('No remote URL');
262
+ }
263
+
264
+ // Validate it's a GitHub URL
265
+ if (!remote.includes('github.com')) {
266
+ console.log('\n⚠️ Warning: Remote is not a GitHub repository');
267
+ console.log(` Remote URL: ${remote}`);
268
+ console.log(' GitHub integration features may not work.\n');
269
+ }
270
+ } catch (error) {
271
+ console.log('\n❌ Git remote "origin" is not configured');
272
+ console.log('\n Before starting tasks, you must link your project to a GitHub repository:');
273
+ console.log('\n 1. Create a GitHub repository:');
274
+ console.log(' gh repo create OWNER/REPO --public (or --private)');
275
+ console.log('\n 2. Link it to your local project:');
276
+ console.log(' git remote add origin https://github.com/OWNER/REPO.git');
277
+ console.log('\n 3. Push your initial code:');
278
+ console.log(' git branch -M main');
279
+ console.log(' git add .');
280
+ console.log(' git commit -m "Initial commit"');
281
+ console.log(' git push -u origin main');
282
+ console.log('\n 4. Then start your task:');
283
+ console.log(' npx agentic15 task next\n');
284
+ process.exit(1);
285
+ }
286
+ }
251
287
  }
@@ -46,7 +46,7 @@ async function main() {
46
46
 
47
47
  if (!taskId) {
48
48
  console.error('\n❌ ERROR: Task ID required');
49
- console.error('Usage: npm run task:done TASK-001\n');
49
+ console.error('Usage: Internal - called by npx agentic15 commit\n');
50
50
  process.exit(1);
51
51
  }
52
52
 
@@ -54,7 +54,7 @@ async function main() {
54
54
  const activePlanFile = '.claude/ACTIVE-PLAN';
55
55
  if (!fs.existsSync(activePlanFile)) {
56
56
  console.error('\n❌ ERROR: No active plan found');
57
- console.error('Set active plan first: npm run plan:manager\n');
57
+ console.error('Set active plan first: npx agentic15 plan\n');
58
58
  process.exit(1);
59
59
  }
60
60
 
@@ -67,7 +67,7 @@ async function main() {
67
67
  if (!fs.existsSync(trackerFile)) {
68
68
  console.error('\n❌ ERROR: Task tracker not found');
69
69
  console.error(`Plan: ${activePlan}`);
70
- console.error('Initialize first: npm run plan:init\n');
70
+ console.error('Initialize first: npx agentic15 plan\n');
71
71
  process.exit(1);
72
72
  }
73
73
 
@@ -208,7 +208,7 @@ async function main() {
208
208
  console.log('');
209
209
  console.log('📝 Next task:');
210
210
  console.log(` ${nextPendingTask.id}: ${nextPendingTask.title}`);
211
- console.log(` Run: npm run task:start ${nextPendingTask.id}`);
211
+ console.log(` Run: npx agentic15 task next`);
212
212
  } else {
213
213
  console.log('');
214
214
  console.log('🎉 All tasks completed!');
@@ -67,7 +67,7 @@ if (activePlan && tracker) {
67
67
  }
68
68
  } else {
69
69
  log('\n ⚠️ No active task - start one:', 'yellow');
70
- log(' npm run task:next', 'yellow');
70
+ log(' npx agentic15 task next', 'yellow');
71
71
  }
72
72
 
73
73
  // Show progress
@@ -79,11 +79,9 @@ if (activePlan && tracker) {
79
79
  } else {
80
80
  log('❌ NO ACTIVE PROJECT PLAN', 'red');
81
81
  log('\n You MUST work within the agentic15-claude-zen framework.', 'yellow');
82
- log(' Create a plan first:', 'yellow');
83
- log(' 1. npm run plan:generate "Your requirements"', 'yellow');
84
- log(' 2. Create PROJECT-PLAN.json from requirements', 'yellow');
85
- log(' 3. npm run plan:init', 'yellow');
86
- log(' 4. npm run task:next\n', 'yellow');
82
+ log(' Initialize the plan and start execution:', 'yellow');
83
+ log(' npx agentic15 plan', 'yellow');
84
+ log(' npx agentic15 task next\n', 'yellow');
87
85
  }
88
86
 
89
87
  console.log('─'.repeat(70));
@@ -108,11 +106,11 @@ log(' ./node_modules/.agentic15-claude-zen/ # Bundled scripts & hooks', 'yell
108
106
  console.log('\n' + '─'.repeat(70));
109
107
  log('📋 AVAILABLE COMMANDS:', 'bold');
110
108
  console.log('─'.repeat(70));
111
- log(' npm run plan:generate <desc> # Generate plan (non-interactive)', 'cyan');
112
- log(' npm run plan:init # Lock plan', 'cyan');
113
- log(' npm run task:next # Start next task', 'cyan');
114
- log(' npm run task:status # View progress', 'cyan');
115
- log(' npm run task:done TASK-XXX # Complete task', 'cyan');
109
+ log(' npx agentic15 plan # Generate and lock plan', 'cyan');
110
+ log(' npx agentic15 task next # Start next task', 'cyan');
111
+ log(' npx agentic15 status # View progress', 'cyan');
112
+ log(' npx agentic15 commit # Test, commit, push, PR', 'cyan');
113
+ log(' npx agentic15 visual-test <url> # Capture UI screenshots', 'cyan');
116
114
 
117
115
  console.log('\n' + '─'.repeat(70));
118
116
  log('⚠️ ENFORCEMENT ACTIVE:', 'bold');
@@ -53,7 +53,7 @@ async function main() {
53
53
 
54
54
  if (!taskId) {
55
55
  console.error('\n❌ ERROR: Task ID required');
56
- console.error('Usage: npm run task:start TASK-001\n');
56
+ console.error('Usage: npx agentic15 task start TASK-001\n');
57
57
  process.exit(1);
58
58
  }
59
59
 
@@ -61,7 +61,7 @@ async function main() {
61
61
  const activePlanFile = '.claude/ACTIVE-PLAN';
62
62
  if (!fs.existsSync(activePlanFile)) {
63
63
  console.error('\n❌ ERROR: No active plan found');
64
- console.error('Set active plan first: npm run plan:manager\n');
64
+ console.error('Set active plan first: npx agentic15 plan\n');
65
65
  process.exit(1);
66
66
  }
67
67
 
@@ -74,7 +74,7 @@ async function main() {
74
74
  if (!fs.existsSync(trackerFile)) {
75
75
  console.error('\n❌ ERROR: Task tracker not found');
76
76
  console.error(`Plan: ${activePlan}`);
77
- console.error('Initialize first: npm run plan:init\n');
77
+ console.error('Initialize first: npx agentic15 plan\n');
78
78
  process.exit(1);
79
79
  }
80
80
 
@@ -218,11 +218,9 @@ async function main() {
218
218
 
219
219
  console.log(`\n📂 Task file: ${taskFile}`);
220
220
  console.log('\n📝 WORKFLOW:');
221
- console.log(' 1. Make your changes on main branch');
222
- console.log(' 2. Commit frequently with task reference:');
223
- console.log(` git commit -m "[${taskId}] Description of changes"`);
224
- console.log(' 3. When finished:');
225
- console.log(` npm run task:done ${taskId}`);
221
+ console.log(' 1. Implement the task requirements');
222
+ console.log(' 2. When finished, commit and create PR:');
223
+ console.log(` npx agentic15 commit`);
226
224
 
227
225
  process.exit(0);
228
226
  }