orchestr8 2.8.0 → 3.1.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.
Files changed (26) hide show
  1. package/.blueprint/agents/AGENT_BA_CASS.md +22 -34
  2. package/.blueprint/agents/AGENT_DEVELOPER_CODEY.md +25 -28
  3. package/.blueprint/agents/AGENT_SPECIFICATION_ALEX.md +10 -0
  4. package/.blueprint/agents/AGENT_TESTER_NIGEL.md +9 -3
  5. package/.blueprint/agents/WHAT_WE_STAND_FOR.md +64 -0
  6. package/.blueprint/features/feature_interactive-alex/FEATURE_SPEC.md +263 -0
  7. package/.blueprint/features/feature_interactive-alex/IMPLEMENTATION_PLAN.md +69 -0
  8. package/.blueprint/features/feature_interactive-alex/handoff-alex.md +19 -0
  9. package/.blueprint/features/feature_interactive-alex/handoff-cass.md +21 -0
  10. package/.blueprint/features/feature_interactive-alex/handoff-nigel.md +19 -0
  11. package/.blueprint/features/feature_interactive-alex/story-flag-routing.md +54 -0
  12. package/.blueprint/features/feature_interactive-alex/story-iterative-drafting.md +65 -0
  13. package/.blueprint/features/feature_interactive-alex/story-pipeline-integration.md +66 -0
  14. package/.blueprint/features/feature_interactive-alex/story-session-lifecycle.md +75 -0
  15. package/.blueprint/features/feature_interactive-alex/story-system-spec-creation.md +57 -0
  16. package/.blueprint/prompts/codey-implement-runtime.md +1 -1
  17. package/.blueprint/prompts/nigel-runtime.md +1 -1
  18. package/.blueprint/ways_of_working/DEVELOPMENT_RITUAL.md +4 -4
  19. package/README.md +31 -0
  20. package/SKILL.md +35 -1
  21. package/bin/cli.js +28 -0
  22. package/package.json +2 -2
  23. package/src/index.js +61 -1
  24. package/src/init.js +21 -3
  25. package/src/interactive.js +338 -0
  26. package/src/stack.js +320 -0
@@ -0,0 +1,57 @@
1
+ # User Story: Interactive System Spec Creation
2
+
3
+ ## Story
4
+
5
+ **As a** developer initializing a new project without a system specification,
6
+ **I want** Alex to guide me through creating a SYSTEM_SPEC.md interactively,
7
+ **so that** I establish the project's boundaries and constraints before creating feature specs.
8
+
9
+ ## Acceptance Criteria
10
+
11
+ ### AC-1: System Spec Auto-Detection
12
+
13
+ **Given** a user invokes `/implement-feature "my-feature"`
14
+ **And** `.blueprint/system_specification/SYSTEM_SPEC.md` does not exist
15
+ **When** the pipeline checks prerequisites
16
+ **Then** interactive mode activates for system spec creation (not feature spec)
17
+
18
+ ### AC-2: System Spec Session Flow
19
+
20
+ **Given** interactive system spec mode is active
21
+ **When** Alex starts the session
22
+ **Then** Alex asks about: purpose, actors, system boundaries, and governing rules
23
+ **And** Alex drafts SYSTEM_SPEC.md sections incrementally
24
+ **And** the same session commands apply (`/approve`, `/change`, `/skip`, `/restart`, `/abort`, `/done`)
25
+
26
+ ### AC-3: System Spec Output Location
27
+
28
+ **Given** an interactive system spec session completes successfully
29
+ **When** Alex writes the spec
30
+ **Then** the file is written to `.blueprint/system_specification/SYSTEM_SPEC.md`
31
+ **And** the file follows the SYSTEM_SPEC template structure
32
+
33
+ ### AC-4: Pipeline Gate Satisfied
34
+
35
+ **Given** SYSTEM_SPEC.md is created via interactive session
36
+ **When** the user re-invokes `/implement-feature "my-feature"`
37
+ **Then** the system spec gate passes
38
+ **And** the pipeline proceeds to feature spec creation (interactive or autonomous)
39
+
40
+ ### AC-5: System Spec Before Feature Spec
41
+
42
+ **Given** a user invokes `/implement-feature "my-feature" --interactive`
43
+ **And** SYSTEM_SPEC.md does not exist
44
+ **When** the pipeline routing logic runs
45
+ **Then** system spec interactive session runs first
46
+ **And** only after system spec is complete does feature spec interactive session begin
47
+
48
+ ## Out of Scope
49
+
50
+ - Updating existing SYSTEM_SPEC.md interactively (only creation)
51
+ - Skipping system spec gate entirely
52
+ - System spec versioning or change tracking
53
+
54
+ ## References
55
+
56
+ - Feature Spec: `.blueprint/features/feature_interactive-alex/FEATURE_SPEC.md` (Section 4.1, Open Question 2)
57
+ - System Spec: `.blueprint/system_specification/SYSTEM_SPEC.md` (Section 7 - System spec gate)
@@ -11,7 +11,7 @@ Implement the feature according to the plan. Work incrementally, making tests pa
11
11
 
12
12
  ## Process (INCREMENTAL - one file at a time)
13
13
 
14
- 1. Run tests first: node --test {TEST_FILE}
14
+ 1. Run tests using the project's test command (see `.claude/stack-config.json`)
15
15
  2. For each failing test group:
16
16
  a. Identify the minimal code needed
17
17
  b. Write or edit ONE file
@@ -17,7 +17,7 @@ Step 1: Write {TEST_DIR}/test-spec.md containing:
17
17
  - Key assumptions (bullet list)
18
18
 
19
19
  Step 2: Write {TEST_FILE} containing:
20
- - Executable tests (Jest or Node test runner)
20
+ - Executable tests using the project's test runner (see `.claude/stack-config.json`)
21
21
  - One describe block per story
22
22
  - One test per acceptance criterion
23
23
 
@@ -41,7 +41,7 @@ Before writing tests:
41
41
  [ ] Ambiguities identified
42
42
  [ ] Assumptions written down
43
43
 
44
- Before handover to Steve to pass to Claude:
44
+ Before handover to the human to pass to Claude:
45
45
  [ ] Understanding summary written
46
46
  [ ] Test plan created
47
47
  [ ] Happy path tests written
@@ -50,7 +50,7 @@ Before handover to Steve to pass to Claude:
50
50
  [ ] Traceability table complete
51
51
  [ ] Open questions listed
52
52
 
53
- If any box is unchecked → raise it with Steve that its not ready to hand over. If all boxes are checked, let Steve know that its ready to handover to Claude.
53
+ If any box is unchecked → raise it with the human that its not ready to hand over. If all boxes are checked, let the human know that its ready to handover to Claude.
54
54
 
55
55
  🧑‍💻 Developer CLI Ritual (Claude)
56
56
  Before coding:
@@ -64,7 +64,7 @@ During coding:
64
64
  [ ] Ran relevant tests after each change
65
65
  [ ] Did not weaken or delete tests
66
66
 
67
- Before handover to Steve:
67
+ Before handover to the human:
68
68
  [ ] All tests passing
69
69
  [ ] Lint passing
70
70
  [ ] No unexplained skip/todo
@@ -139,4 +139,4 @@ Outcome:
139
139
  ❗ Green builds are necessary, not sufficient
140
140
  ❗ Assumptions must be written down
141
141
  ❗ No silent changes
142
- ❗ When in doubt, slow down and ask Steve
142
+ ❗ When in doubt, slow down and ask the human
package/README.md CHANGED
@@ -19,6 +19,32 @@ npx orchestr8 init
19
19
 
20
20
  This installs the `.blueprint/` directory, `.business_context/`, and the `/implement-feature` skill to `.claude/commands/`. If files already exist, you'll be prompted before overwriting. It also adds the workflow queue to `.gitignore`.
21
21
 
22
+ During initialization, orchestr8 **auto-detects your project's tech stack** from manifest files (`package.json`, `pyproject.toml`, `go.mod`, etc.) and writes the result to `.claude/stack-config.json`. The agents (Nigel and Codey) read this file at runtime to adapt their testing and implementation approach to your stack.
23
+
24
+ ```bash
25
+ # Review what was detected
26
+ npx orchestr8 stack-config
27
+
28
+ # Adjust if needed
29
+ npx orchestr8 stack-config set language TypeScript
30
+ npx orchestr8 stack-config set frameworks '["next","react"]'
31
+ npx orchestr8 stack-config set testRunner vitest
32
+ npx orchestr8 stack-config set testCommand "npx vitest run"
33
+ ```
34
+
35
+ If you're working with a non-JavaScript project, set the stack config before running the pipeline:
36
+
37
+ ```bash
38
+ # Python/Django example
39
+ npx orchestr8 stack-config set language Python
40
+ npx orchestr8 stack-config set runtime "Python 3.12"
41
+ npx orchestr8 stack-config set packageManager pip
42
+ npx orchestr8 stack-config set frameworks '["django"]'
43
+ npx orchestr8 stack-config set testRunner pytest
44
+ npx orchestr8 stack-config set testCommand "pytest"
45
+ npx orchestr8 stack-config set linter ruff
46
+ ```
47
+
22
48
  ## Keeping Up to Date
23
49
 
24
50
  **Modules** (history, insights, feedback, retry, validate) are part of the npm package and update automatically when you use `npx` - no action needed.
@@ -70,6 +96,9 @@ This updates `.blueprint/agents/`, `.blueprint/templates/`, `.blueprint/ways_of_
70
96
 
71
97
  | Command | Description |
72
98
  |---------|-------------|
99
+ | `npx orchestr8 stack-config` | View detected tech stack |
100
+ | `npx orchestr8 stack-config set <key> <value>` | Modify stack settings (language, frameworks, testRunner, etc.) |
101
+ | `npx orchestr8 stack-config reset` | Reset to empty defaults |
73
102
  | `npx orchestr8 retry-config` | View retry configuration |
74
103
  | `npx orchestr8 retry-config set <key> <value>` | Modify retry settings |
75
104
  | `npx orchestr8 retry-config reset` | Reset to defaults |
@@ -197,6 +226,7 @@ orchestr8 includes these built-in modules for observability and self-improvement
197
226
  | **business-context** | Lazy loading of business context based on feature needs |
198
227
  | **tools** | Tool schemas and validation for Claude native features |
199
228
  | **parallel** | Parallel pipeline execution using git worktrees |
229
+ | **stack** | Configurable tech stack detection and configuration |
200
230
 
201
231
  ### How They Work Together
202
232
 
@@ -260,6 +290,7 @@ your-project/
260
290
  │ ├── feedback-config.json # Feedback thresholds (gitignored)
261
291
  │ ├── parallel-config.json # Parallel execution config (gitignored)
262
292
  │ ├── parallel-queue.json # Parallel pipeline state (gitignored)
293
+ │ ├── stack-config.json # Tech stack configuration (gitignored)
263
294
  │ └── implement-queue.json # Pipeline queue state (gitignored)
264
295
  └── test/
265
296
  ├── artifacts/ # Test specs per feature
package/SKILL.md CHANGED
@@ -28,8 +28,9 @@ description: Run the Alex → Cass → Nigel → Codey pipeline using Task tool
28
28
  ## Invocation
29
29
 
30
30
  ```bash
31
- /implement-feature # Interactive
31
+ /implement-feature # Interactive slug prompt
32
32
  /implement-feature "user-auth" # New feature
33
+ /implement-feature "user-auth" --interactive # Force interactive spec creation
33
34
  /implement-feature "user-auth" --pause-after=alex|cass|nigel|codey-plan
34
35
  /implement-feature "user-auth" --no-commit
35
36
  /implement-feature "user-auth" --no-feedback # Skip feedback collection
@@ -113,6 +114,39 @@ If not provided: Ask user, convert to slug format (lowercase, hyphens), confirm.
113
114
  ### Step 3: System Spec Gate
114
115
  Check `{SYS_SPEC}` exists. If not: run Alex to create it, then **stop for review**.
115
116
 
117
+ ### Step 3a: Interactive Mode Detection
118
+
119
+ **Module:** `src/interactive.js`
120
+
121
+ The pipeline automatically enters interactive mode when:
122
+ 1. `--interactive` flag is explicitly passed
123
+ 2. System spec (`{SYS_SPEC}`) is missing - creates system spec interactively
124
+ 3. Feature spec (`{FEAT_SPEC}`) is missing - creates feature spec interactively
125
+
126
+ **Interactive Session Flow:**
127
+ ```
128
+ idle → gathering → questioning → drafting → finalizing
129
+ ```
130
+
131
+ **Available Commands During Session:**
132
+ | Command | Action |
133
+ |---------|--------|
134
+ | `/approve` or `yes` | Mark section complete, proceed to next |
135
+ | `/change <feedback>` | Revise current section with feedback |
136
+ | `/skip` | Mark section TBD, proceed to next |
137
+ | `/restart` | Discard draft, restart current section |
138
+ | `/abort` | Exit without writing spec |
139
+ | `/done` | Finalize spec (if min sections complete) |
140
+
141
+ **Minimum Required Sections:**
142
+ - Feature spec: Intent, Scope, Actors
143
+ - System spec: Purpose, Actors, Boundaries
144
+
145
+ **On Interactive Completion:**
146
+ - Writes spec to appropriate path
147
+ - Generates `handoff-alex.md` with session metrics
148
+ - Records `mode: "interactive"` in history entry
149
+
116
150
  ### Step 3.5: Insights Preview (NEW)
117
151
 
118
152
  **Module:** `src/insights.js`
package/bin/cli.js CHANGED
@@ -12,6 +12,11 @@ const {
12
12
  setConfigValue: setFeedbackConfigValue,
13
13
  resetConfig: resetFeedbackConfig
14
14
  } = require('../src/feedback');
15
+ const {
16
+ displayStackConfig,
17
+ setStackConfigValue,
18
+ resetStackConfig
19
+ } = require('../src/stack');
15
20
  const { displayFeedbackInsights } = require('../src/insights');
16
21
  const {
17
22
  formatStatus,
@@ -145,6 +150,26 @@ const commands = {
145
150
  },
146
151
  description: 'Manage feedback loop configuration'
147
152
  },
153
+ 'stack-config': {
154
+ fn: () => {
155
+ if (subArg === 'set') {
156
+ const key = args[2];
157
+ const value = args[3];
158
+ if (!key || !value) {
159
+ console.error('Usage: stack-config set <key> <value>');
160
+ console.error('Valid keys: language, runtime, packageManager, frameworks, testRunner, testCommand, linter, tools');
161
+ process.exit(1);
162
+ }
163
+ setStackConfigValue(key, value);
164
+ } else if (subArg === 'reset') {
165
+ resetStackConfig();
166
+ console.log('Stack configuration reset to defaults.');
167
+ } else {
168
+ displayStackConfig();
169
+ }
170
+ },
171
+ description: 'View or modify project tech stack configuration'
172
+ },
148
173
  'parallel-config': {
149
174
  fn: () => {
150
175
  if (subArg === 'set') {
@@ -307,6 +332,9 @@ Commands:
307
332
  feedback-config View current feedback loop configuration
308
333
  feedback-config set <key> <value> Modify a config value (minRatingThreshold, enabled)
309
334
  feedback-config reset Reset feedback configuration to defaults
335
+ stack-config View current tech stack configuration
336
+ stack-config set <key> <value> Modify a config value (language, runtime, frameworks, etc.)
337
+ stack-config reset Reset tech stack configuration to defaults
310
338
  parallel <slugs...> Run multiple feature pipelines in parallel
311
339
  parallel <slugs...> --dry-run Show execution plan without running
312
340
  parallel <slugs...> --yes Skip confirmation prompt
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchestr8",
3
- "version": "2.8.0",
3
+ "version": "3.1.0",
4
4
  "description": "Multi-agent workflow framework for automated feature development",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -20,7 +20,7 @@
20
20
  "author": "NewmanJustice",
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "git+https://github.com/NewmanJustice/orchestr8.git"
23
+ "url": "git+https://github.com/NewmanJustice/agent-workflow.git"
24
24
  },
25
25
  "license": "MIT",
26
26
  "engines": {
package/src/index.js CHANGED
@@ -50,6 +50,37 @@ const {
50
50
  TECHNICAL_KEYWORDS,
51
51
  USER_FACING_KEYWORDS
52
52
  } = require('./classifier');
53
+ const {
54
+ parseFlags: parseInteractiveFlags,
55
+ shouldEnterInteractiveMode,
56
+ createSession,
57
+ getSessionProgress,
58
+ handleCommand,
59
+ getNextSection,
60
+ markSectionComplete,
61
+ markSectionTBD,
62
+ gatherContext,
63
+ identifyGaps,
64
+ generateQuestions,
65
+ canFinalize,
66
+ generateSpec,
67
+ writeSpec,
68
+ generateHandoff,
69
+ getOutputPath,
70
+ SESSION_STATES,
71
+ SECTION_ORDER,
72
+ MIN_REQUIRED_SECTIONS,
73
+ SYSTEM_SPEC_QUESTIONS
74
+ } = require('./interactive');
75
+ const {
76
+ getDefaultStackConfig,
77
+ readStackConfig,
78
+ writeStackConfig,
79
+ resetStackConfig,
80
+ setStackConfigValue,
81
+ detectStackConfig,
82
+ displayStackConfig
83
+ } = require('./stack');
53
84
  const tools = require('./tools');
54
85
 
55
86
  module.exports = {
@@ -105,6 +136,35 @@ module.exports = {
105
136
  logClassification,
106
137
  TECHNICAL_KEYWORDS,
107
138
  USER_FACING_KEYWORDS,
139
+ // Stack config exports
140
+ getDefaultStackConfig,
141
+ readStackConfig,
142
+ writeStackConfig,
143
+ resetStackConfig,
144
+ setStackConfigValue,
145
+ detectStackConfig,
146
+ displayStackConfig,
108
147
  // Tools module (model native features)
109
- tools
148
+ tools,
149
+ // Interactive mode exports
150
+ parseInteractiveFlags,
151
+ shouldEnterInteractiveMode,
152
+ createSession,
153
+ getSessionProgress,
154
+ handleCommand,
155
+ getNextSection,
156
+ markSectionComplete,
157
+ markSectionTBD,
158
+ gatherContext,
159
+ identifyGaps,
160
+ generateQuestions,
161
+ canFinalize,
162
+ generateSpec,
163
+ writeSpec,
164
+ generateHandoff,
165
+ getOutputPath,
166
+ SESSION_STATES,
167
+ SECTION_ORDER,
168
+ MIN_REQUIRED_SECTIONS,
169
+ SYSTEM_SPEC_QUESTIONS
110
170
  };
package/src/init.js CHANGED
@@ -2,6 +2,8 @@ const fs = require('fs');
2
2
  const path = require('path');
3
3
  const readline = require('readline');
4
4
 
5
+ const { detectStackConfig, writeStackConfig, CONFIG_FILE: STACK_CONFIG_FILE } = require('./stack');
6
+
5
7
  const PACKAGE_ROOT = path.resolve(__dirname, '..');
6
8
  const TARGET_DIR = process.cwd();
7
9
 
@@ -41,7 +43,8 @@ function updateGitignore() {
41
43
  const entriesToAdd = [
42
44
  '# agent-workflow',
43
45
  '.claude/implement-queue.json',
44
- '.claude/pipeline-history.json'
46
+ '.claude/pipeline-history.json',
47
+ '.claude/stack-config.json'
45
48
  ];
46
49
 
47
50
  let content = '';
@@ -109,12 +112,27 @@ async function init() {
109
112
  // Update .gitignore
110
113
  updateGitignore();
111
114
 
115
+ // Auto-detect tech stack
116
+ const stackConfigPath = path.join(TARGET_DIR, STACK_CONFIG_FILE);
117
+ if (!fs.existsSync(stackConfigPath)) {
118
+ const detected = detectStackConfig(TARGET_DIR);
119
+ const hasValues = detected.language || detected.runtime;
120
+ if (hasValues) {
121
+ writeStackConfig(detected);
122
+ const parts = [detected.language, detected.runtime, ...detected.frameworks, detected.testRunner].filter(Boolean);
123
+ console.log(`Detected tech stack: ${parts.join(', ')}`);
124
+ }
125
+ } else {
126
+ console.log('Stack config already exists, skipping detection');
127
+ }
128
+
112
129
  console.log(`
113
130
  orchestr8 initialized successfully!
114
131
 
115
132
  Next steps:
116
- 1. Add business context documents to .business_context/
117
- 2. Run /implement-feature in Claude Code to start your first feature
133
+ 1. Review your tech stack with \`npx orchestr8 stack-config\`
134
+ 2. Add business context documents to .business_context/
135
+ 3. Run /implement-feature in Claude Code to start your first feature
118
136
  `);
119
137
  }
120
138