@agentic15.com/agentic15-claude-zen 3.3.0 → 4.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/README.md CHANGED
@@ -23,28 +23,83 @@ 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 add .
32
+ git commit -m "Initial commit"
33
+
34
+ # Create GitHub repository and link it
35
+ gh repo create OWNER/REPO --public # or --private
36
+ git remote add origin https://github.com/OWNER/REPO.git
37
+ git push -u origin main
38
+ ```
39
+
40
+ Replace `OWNER/REPO` with your GitHub username and repository name (e.g., `myusername/my-project`).
41
+
42
+ > **REQUIRED**: This step is mandatory. The framework needs a GitHub remote to create issues and pull requests.
29
43
 
30
44
  **Step 4: Configure Repository Settings (Recommended)**
45
+
46
+ **For Bash/Mac/Linux:**
31
47
  ```bash
32
48
  # Prevent direct pushes to main - require PRs for all changes
49
+ cat > /tmp/protection.json << 'EOF'
50
+ {
51
+ "required_pull_request_reviews": {
52
+ "required_approving_review_count": 0
53
+ },
54
+ "enforce_admins": true,
55
+ "allow_force_pushes": false,
56
+ "allow_deletions": false,
57
+ "required_status_checks": null,
58
+ "restrictions": null
59
+ }
60
+ EOF
61
+
33
62
  gh api repos/OWNER/REPO/branches/main/protection -X PUT \
34
63
  -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
64
+ --input /tmp/protection.json
39
65
 
40
66
  # Auto-delete branches after PR merge
41
67
  gh api repos/OWNER/REPO -X PATCH \
42
68
  -H "Accept: application/vnd.github+json" \
43
69
  -f delete_branch_on_merge=true
44
70
  ```
71
+
72
+ **For PowerShell (Windows):**
73
+ ```powershell
74
+ # Prevent direct pushes to main - require PRs for all changes
75
+ $body = @"
76
+ {
77
+ "required_pull_request_reviews": {
78
+ "required_approving_review_count": 0
79
+ },
80
+ "enforce_admins": true,
81
+ "allow_force_pushes": false,
82
+ "allow_deletions": false,
83
+ "required_status_checks": null,
84
+ "restrictions": null
85
+ }
86
+ "@
87
+
88
+ echo $body | gh api repos/OWNER/REPO/branches/main/protection -X PUT -H "Accept: application/vnd.github+json" --input -
89
+
90
+ # Auto-delete branches after PR merge
91
+ gh api repos/OWNER/REPO -X PATCH -H "Accept: application/vnd.github+json" -f delete_branch_on_merge=true
92
+ ```
93
+
45
94
  Replace `OWNER/REPO` with your GitHub username and repository name.
46
95
 
47
- **Step 5: Use Framework Commands**
96
+ **Step 5: Launch Claude Code**
97
+
98
+ 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.
99
+
100
+ > **IMPORTANT**: Always launch Claude Code from inside your project directory, not from the parent directory.
101
+
102
+ **Step 6: Use Framework Commands**
48
103
  ```bash
49
104
  npx agentic15 auth # One-time GitHub setup
50
105
  npx agentic15 plan # Enter interactive mode
@@ -56,9 +111,7 @@ npx agentic15 task next # Start first task
56
111
  npx agentic15 commit # Test, commit, push, PR
57
112
  ```
58
113
 
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
-
61
- **Step 6: Clean Up Local Branches**
114
+ **Step 7: Clean Up Local Branches**
62
115
  ```bash
63
116
  # If auto-delete is enabled, only clean up local branches
64
117
  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.0",
4
4
  "description": "Structured AI-assisted development framework for Claude Code with enforced quality standards",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -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,36 @@ 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 add .');
279
+ console.log(' git commit -m "Initial commit"');
280
+ console.log(' git push -u origin main');
281
+ console.log('\n 4. Then start your task:');
282
+ console.log(' npx agentic15 task next\n');
283
+ process.exit(1);
284
+ }
285
+ }
251
286
  }
@@ -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
  }