orchestrix-yuri 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/LICENSE +21 -0
- package/README.md +122 -0
- package/bin/install.js +25 -0
- package/lib/installer.js +86 -0
- package/package.json +31 -0
- package/skill/SKILL.md +136 -0
- package/skill/data/deployment-options.yaml +44 -0
- package/skill/data/phase-routing.yaml +50 -0
- package/skill/resources/.gitignore.template +29 -0
- package/skill/resources/core-config.template.yaml +67 -0
- package/skill/resources/handoff-detector.sh +374 -0
- package/skill/resources/mcp.json.template +18 -0
- package/skill/resources/o-help.md +23 -0
- package/skill/resources/o-status.md +37 -0
- package/skill/resources/o.md +87 -0
- package/skill/resources/settings.local.json +15 -0
- package/skill/resources/start-orchestrix.sh +373 -0
- package/skill/scripts/ensure-session.sh +61 -0
- package/skill/scripts/monitor-agent.sh +61 -0
- package/skill/scripts/scan-stories.sh +16 -0
- package/skill/scripts/start-planning.sh +20 -0
- package/skill/tasks/yuri-create-project.md +258 -0
- package/skill/tasks/yuri-deploy-project.md +139 -0
- package/skill/tasks/yuri-develop-project.md +150 -0
- package/skill/tasks/yuri-handle-change.md +239 -0
- package/skill/tasks/yuri-plan-project.md +158 -0
- package/skill/tasks/yuri-resume.md +132 -0
- package/skill/tasks/yuri-status.md +156 -0
- package/skill/tasks/yuri-test-project.md +172 -0
- package/skill/templates/memory.template.yaml +77 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dorayo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Orchestrix Yuri — Meta-Orchestrator
|
|
2
|
+
|
|
3
|
+
Yuri is a **Meta-Orchestrator** that takes natural language from users and autonomously drives all [Orchestrix](https://orchestrix-mcp.youlidao.ai) agents through the full project lifecycle.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
User describes idea → Yuri drives: Create → Plan → Develop → Test → Deploy
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## How It Works
|
|
10
|
+
|
|
11
|
+
Yuri is a [Claude Code skill](https://code.claude.com/docs/en/skills) that orchestrates specialized AI agents via tmux sessions:
|
|
12
|
+
|
|
13
|
+
| Phase | What Yuri Does | Agents Involved |
|
|
14
|
+
|-------|---------------|-----------------|
|
|
15
|
+
| **1. Create** | Collects project info, scaffolds directory, configures Orchestrix | — |
|
|
16
|
+
| **2. Plan** | Drives planning agents sequentially via tmux | Analyst → PM → UX-Expert → Architect → PO |
|
|
17
|
+
| **3. Develop** | Launches 4-agent dev automation, monitors progress | SM ↔ Architect ↔ Dev ↔ QA |
|
|
18
|
+
| **4. Test** | Runs smoke tests per epic, fixes bugs, regression tests | QA + Dev |
|
|
19
|
+
| **5. Deploy** | Recommends and executes deployment strategy | — |
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx orchestrix-yuri install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This installs the Yuri skill globally to `~/.claude/skills/yuri/`.
|
|
28
|
+
|
|
29
|
+
### Prerequisites
|
|
30
|
+
|
|
31
|
+
- [Claude Code](https://claude.com/claude-code) CLI installed
|
|
32
|
+
- [tmux](https://github.com/tmux/tmux) installed (`brew install tmux`)
|
|
33
|
+
- An Orchestrix License Key (get one at [orchestrix-mcp.youlidao.ai](https://orchestrix-mcp.youlidao.ai))
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
In any Claude Code session:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
/yuri
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then either:
|
|
44
|
+
- Describe your project idea in natural language
|
|
45
|
+
- Use a specific command: `*create`, `*plan`, `*develop`, `*test`, `*deploy`
|
|
46
|
+
|
|
47
|
+
### Commands
|
|
48
|
+
|
|
49
|
+
| Command | Description |
|
|
50
|
+
|---------|-------------|
|
|
51
|
+
| `*create` | Create a new project (Phase 1) |
|
|
52
|
+
| `*plan` | Start/resume project planning (Phase 2) |
|
|
53
|
+
| `*develop` | Start/resume automated development (Phase 3) |
|
|
54
|
+
| `*test` | Start/resume smoke testing (Phase 4) |
|
|
55
|
+
| `*deploy` | Start/resume deployment (Phase 5) |
|
|
56
|
+
| `*status` | Show current project phase and progress |
|
|
57
|
+
| `*resume` | Resume from last saved checkpoint |
|
|
58
|
+
| `*change "{desc}"` | Handle mid-project requirement change |
|
|
59
|
+
|
|
60
|
+
## Architecture
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
~/.claude/skills/yuri/ ← Globally installed skill
|
|
64
|
+
├── SKILL.md ← Agent persona + activation protocol
|
|
65
|
+
├── tasks/ ← Phase workflow instructions
|
|
66
|
+
├── scripts/ ← Shell scripts (tmux control, monitoring)
|
|
67
|
+
├── templates/ ← Memory schema
|
|
68
|
+
├── data/ ← Decision rules (deployment, routing)
|
|
69
|
+
└── resources/ ← Files copied to new projects
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Memory System
|
|
73
|
+
|
|
74
|
+
Yuri maintains per-project state in `.yuri/memory.yaml`, enabling:
|
|
75
|
+
- **Resumption**: Pick up from any interruption point
|
|
76
|
+
- **Progress tracking**: Real-time story/epic completion counts
|
|
77
|
+
- **Change management**: History of requirement changes and actions taken
|
|
78
|
+
- **Error recovery**: Automatic retry with escalation
|
|
79
|
+
|
|
80
|
+
### tmux Sessions
|
|
81
|
+
|
|
82
|
+
| Session | Purpose | Windows |
|
|
83
|
+
|---------|---------|---------|
|
|
84
|
+
| `op-{project}` | Planning phase | One per agent (Analyst, PM, UX, Architect, PO) |
|
|
85
|
+
| `orchestrix-{repo-id}` | Development phase | 4 fixed (Architect, SM, Dev, QA) |
|
|
86
|
+
|
|
87
|
+
Sessions are **lazily created and recreated** — if a session dies or is killed, Yuri automatically rebuilds it when needed.
|
|
88
|
+
|
|
89
|
+
### Completion Detection
|
|
90
|
+
|
|
91
|
+
Yuri monitors agent completion in tmux panes using a priority-based detection system:
|
|
92
|
+
|
|
93
|
+
1. **Claude Code completion message**: Pattern like "Baked for 31s" (`[A-Z][a-z]*ed for [0-9]`)
|
|
94
|
+
2. **TUI idle indicator**: `○` symbol
|
|
95
|
+
3. **Approval prompt**: `◐` → auto-approved
|
|
96
|
+
4. **Content stability**: Pane unchanged for 90 seconds
|
|
97
|
+
|
|
98
|
+
## Change Management
|
|
99
|
+
|
|
100
|
+
Yuri handles mid-project changes based on scope:
|
|
101
|
+
|
|
102
|
+
| Scope | Action |
|
|
103
|
+
|-------|--------|
|
|
104
|
+
| Small (≤5 files) | Dev `*solo` directly |
|
|
105
|
+
| Medium | PO `*route-change` → standard workflow |
|
|
106
|
+
| Large | Pause dev, partial re-plan |
|
|
107
|
+
| New iteration | PM `*start-iteration` → parse next-steps.md → drive agents → resume dev |
|
|
108
|
+
|
|
109
|
+
## Deployment Options
|
|
110
|
+
|
|
111
|
+
| Region | Provider | Best For |
|
|
112
|
+
|--------|----------|----------|
|
|
113
|
+
| China | Sealos | Prototype / MVP |
|
|
114
|
+
| China | Aliyun ECS + Docker | Production |
|
|
115
|
+
| China | Vercel (CN) | Frontend / SSR |
|
|
116
|
+
| Overseas | Vercel | Frontend / Full-stack |
|
|
117
|
+
| Overseas | Railway | Backend APIs |
|
|
118
|
+
| Overseas | AWS / GCP | Enterprise |
|
|
119
|
+
|
|
120
|
+
## License
|
|
121
|
+
|
|
122
|
+
MIT
|
package/bin/install.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const { install } = require('../lib/installer');
|
|
5
|
+
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
const command = args[0];
|
|
8
|
+
|
|
9
|
+
if (command === 'install') {
|
|
10
|
+
install();
|
|
11
|
+
} else if (command === '--help' || command === '-h' || !command) {
|
|
12
|
+
console.log(`
|
|
13
|
+
orchestrix-yuri — Meta-Orchestrator for Orchestrix
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
npx orchestrix-yuri install Install Yuri skill globally (~/.claude/skills/yuri/)
|
|
17
|
+
npx orchestrix-yuri --help Show this help message
|
|
18
|
+
|
|
19
|
+
After installation, type /yuri in any Claude Code session to activate.
|
|
20
|
+
`);
|
|
21
|
+
} else {
|
|
22
|
+
console.error(`Unknown command: ${command}`);
|
|
23
|
+
console.error('Run "npx orchestrix-yuri --help" for usage information.');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
package/lib/installer.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
|
|
7
|
+
const SKILL_SOURCE = path.join(__dirname, '..', 'skill');
|
|
8
|
+
const SKILL_TARGET = path.join(os.homedir(), '.claude', 'skills', 'yuri');
|
|
9
|
+
|
|
10
|
+
function copyDirRecursive(src, dest) {
|
|
11
|
+
if (!fs.existsSync(dest)) {
|
|
12
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
16
|
+
|
|
17
|
+
for (const entry of entries) {
|
|
18
|
+
const srcPath = path.join(src, entry.name);
|
|
19
|
+
const destPath = path.join(dest, entry.name);
|
|
20
|
+
|
|
21
|
+
if (entry.isDirectory()) {
|
|
22
|
+
copyDirRecursive(srcPath, destPath);
|
|
23
|
+
} else {
|
|
24
|
+
fs.copyFileSync(srcPath, destPath);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function makeScriptsExecutable(dir) {
|
|
30
|
+
if (!fs.existsSync(dir)) return;
|
|
31
|
+
|
|
32
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
33
|
+
for (const entry of entries) {
|
|
34
|
+
const fullPath = path.join(dir, entry.name);
|
|
35
|
+
if (entry.isDirectory()) {
|
|
36
|
+
makeScriptsExecutable(fullPath);
|
|
37
|
+
} else if (entry.name.endsWith('.sh')) {
|
|
38
|
+
fs.chmodSync(fullPath, 0o755);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function install() {
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log(' Installing Yuri Meta-Orchestrator...');
|
|
46
|
+
console.log('');
|
|
47
|
+
|
|
48
|
+
// Check source exists
|
|
49
|
+
if (!fs.existsSync(SKILL_SOURCE)) {
|
|
50
|
+
console.error(' Error: Skill source directory not found.');
|
|
51
|
+
console.error(` Expected: ${SKILL_SOURCE}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Check for existing installation
|
|
56
|
+
if (fs.existsSync(SKILL_TARGET)) {
|
|
57
|
+
console.log(` Existing installation found at ${SKILL_TARGET}`);
|
|
58
|
+
console.log(' Overwriting...');
|
|
59
|
+
fs.rmSync(SKILL_TARGET, { recursive: true, force: true });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Ensure parent directory exists
|
|
63
|
+
const parentDir = path.dirname(SKILL_TARGET);
|
|
64
|
+
if (!fs.existsSync(parentDir)) {
|
|
65
|
+
fs.mkdirSync(parentDir, { recursive: true });
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Copy skill directory
|
|
69
|
+
copyDirRecursive(SKILL_SOURCE, SKILL_TARGET);
|
|
70
|
+
|
|
71
|
+
// Make all .sh files executable
|
|
72
|
+
makeScriptsExecutable(path.join(SKILL_TARGET, 'scripts'));
|
|
73
|
+
makeScriptsExecutable(path.join(SKILL_TARGET, 'resources'));
|
|
74
|
+
|
|
75
|
+
console.log(' Skill location: ~/.claude/skills/yuri/');
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log(' Usage: Type /yuri in any Claude Code session to activate.');
|
|
78
|
+
console.log('');
|
|
79
|
+
console.log(' Yuri will:');
|
|
80
|
+
console.log(' 1. Collect your project idea');
|
|
81
|
+
console.log(' 2. Create a project skeleton with Orchestrix infrastructure');
|
|
82
|
+
console.log(' 3. Drive planning, development, testing, and deployment automatically');
|
|
83
|
+
console.log('');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
module.exports = { install };
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "orchestrix-yuri",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Yuri — Meta-Orchestrator for Orchestrix. Drive your entire project lifecycle with natural language.",
|
|
5
|
+
"main": "lib/installer.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"orchestrix-yuri": "bin/install.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"No tests yet\" && exit 0"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"orchestrix",
|
|
14
|
+
"ai-agent",
|
|
15
|
+
"meta-orchestrator",
|
|
16
|
+
"claude-code",
|
|
17
|
+
"skill",
|
|
18
|
+
"project-lifecycle",
|
|
19
|
+
"tmux-automation"
|
|
20
|
+
],
|
|
21
|
+
"author": "dorayo",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"files": [
|
|
24
|
+
"bin/",
|
|
25
|
+
"lib/",
|
|
26
|
+
"skill/"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18.0.0"
|
|
30
|
+
}
|
|
31
|
+
}
|
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yuri
|
|
3
|
+
description: >
|
|
4
|
+
Meta-Orchestrator for full project lifecycle management.
|
|
5
|
+
Drives all Orchestrix agents autonomously: Create, Plan, Develop, Test, Deploy.
|
|
6
|
+
Use when starting a new project, resuming an existing one, or managing changes.
|
|
7
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebSearch
|
|
8
|
+
argument-hint: "[*create | *plan | *develop | *test | *deploy | *status | *resume | *change]"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Yuri — Meta-Orchestrator
|
|
12
|
+
|
|
13
|
+
You are **Yuri**, a Meta-Orchestrator that controls all Orchestrix agents via tmux
|
|
14
|
+
to deliver complete projects from a single natural language description.
|
|
15
|
+
|
|
16
|
+
## Core Principles
|
|
17
|
+
|
|
18
|
+
1. **NEVER implement code directly.** You orchestrate, not execute.
|
|
19
|
+
2. **ALWAYS check .yuri/memory.yaml on activation.** If exists, offer to resume.
|
|
20
|
+
3. **Save state BEFORE asking user, AFTER receiving response, AFTER each tmux operation.**
|
|
21
|
+
4. **Ask user ONLY for:** phase transition confirmation, planning output review, deployment choice, genuine ambiguity.
|
|
22
|
+
5. **Self-solve problems.** Escalate to user only after 2 failed retries.
|
|
23
|
+
6. **Proactive reporting** at phase boundaries and every 5 minutes during monitoring.
|
|
24
|
+
7. **Default language is English.** Switch to Chinese only if user explicitly requests it.
|
|
25
|
+
|
|
26
|
+
## Available Commands
|
|
27
|
+
|
|
28
|
+
| # | Command | Description |
|
|
29
|
+
|---|---------|-------------|
|
|
30
|
+
| 1 | *create | Create a new project (Phase 1) |
|
|
31
|
+
| 2 | *plan | Start/resume project planning (Phase 2) |
|
|
32
|
+
| 3 | *develop | Start/resume automated development (Phase 3) |
|
|
33
|
+
| 4 | *test | Start/resume smoke testing (Phase 4) |
|
|
34
|
+
| 5 | *deploy | Start/resume deployment (Phase 5) |
|
|
35
|
+
| 6 | *status | Show current project phase and progress |
|
|
36
|
+
| 7 | *resume | Resume from last saved checkpoint |
|
|
37
|
+
| 8 | *change "{desc}" | Handle mid-project requirement change |
|
|
38
|
+
|
|
39
|
+
## Activation Protocol
|
|
40
|
+
|
|
41
|
+
1. Adopt Yuri persona completely.
|
|
42
|
+
2. Check for `.yuri/memory.yaml` in the current working directory.
|
|
43
|
+
3. If memory exists: display project status summary, offer resume options.
|
|
44
|
+
4. If no memory: show greeting and command table.
|
|
45
|
+
5. If user provides natural language (not a `*command`): interpret intent using
|
|
46
|
+
[phase-routing.yaml](data/phase-routing.yaml) and route to appropriate phase.
|
|
47
|
+
6. If user provides `$ARGUMENTS`: parse and execute the matching command.
|
|
48
|
+
|
|
49
|
+
## Greeting (no existing project)
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
🚀 Hello! I'm Yuri, your project lifecycle Meta-Orchestrator.
|
|
53
|
+
|
|
54
|
+
I can take you from a one-sentence idea to a fully deployed project:
|
|
55
|
+
**Create → Plan → Develop → Test → Deploy**
|
|
56
|
+
|
|
57
|
+
| # | Command | Description |
|
|
58
|
+
|---|---------|-------------|
|
|
59
|
+
| 1 | *create | Create a new project (Phase 1) |
|
|
60
|
+
| 2 | *plan | Start/resume project planning (Phase 2) |
|
|
61
|
+
| 3 | *develop | Start/resume automated development (Phase 3) |
|
|
62
|
+
| 4 | *test | Start/resume smoke testing (Phase 4) |
|
|
63
|
+
| 5 | *deploy | Start/resume deployment (Phase 5) |
|
|
64
|
+
| 6 | *status | Show current project phase and progress |
|
|
65
|
+
| 7 | *resume | Resume from last saved checkpoint |
|
|
66
|
+
| 8 | *change "{desc}" | Handle mid-project requirement change |
|
|
67
|
+
|
|
68
|
+
Tell me what you'd like to build, or pick a command to get started.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Greeting (existing project detected)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
🚀 Welcome back! I'm Yuri. I found your project state:
|
|
75
|
+
|
|
76
|
+
**Project**: {project.name}
|
|
77
|
+
**Phase**: Phase {lifecycle.current_phase} — {lifecycle.current_step}
|
|
78
|
+
**Progress**: {phase-specific summary}
|
|
79
|
+
**Last active**: {lifecycle.started_at}
|
|
80
|
+
|
|
81
|
+
Would you like to resume from where we left off? Or tell me what you need.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Phase Execution
|
|
85
|
+
|
|
86
|
+
Each command maps to a task file. **Read the task file and execute it step by step.**
|
|
87
|
+
|
|
88
|
+
| Command | Task File |
|
|
89
|
+
|---------|-----------|
|
|
90
|
+
| *create | [yuri-create-project.md](tasks/yuri-create-project.md) |
|
|
91
|
+
| *plan | [yuri-plan-project.md](tasks/yuri-plan-project.md) |
|
|
92
|
+
| *develop | [yuri-develop-project.md](tasks/yuri-develop-project.md) |
|
|
93
|
+
| *test | [yuri-test-project.md](tasks/yuri-test-project.md) |
|
|
94
|
+
| *deploy | [yuri-deploy-project.md](tasks/yuri-deploy-project.md) |
|
|
95
|
+
| *resume | [yuri-resume.md](tasks/yuri-resume.md) |
|
|
96
|
+
| *status | [yuri-status.md](tasks/yuri-status.md) |
|
|
97
|
+
| *change | [yuri-handle-change.md](tasks/yuri-handle-change.md) |
|
|
98
|
+
|
|
99
|
+
## Memory Contract
|
|
100
|
+
|
|
101
|
+
- **Location**: `{project_root}/.yuri/memory.yaml`
|
|
102
|
+
- **Schema**: See [memory.template.yaml](templates/memory.template.yaml)
|
|
103
|
+
- **Read** at the start of every task execution.
|
|
104
|
+
- **Write** after every significant operation (tmux command sent, phase transition, user response received).
|
|
105
|
+
- **Checkpoint** at phase boundaries: copy memory to `.yuri/checkpoints/checkpoint-phase{N}.yaml`.
|
|
106
|
+
|
|
107
|
+
## tmux Session Management
|
|
108
|
+
|
|
109
|
+
- **Planning session**: `op-{project-name}` — created during Phase 2, one window per agent step.
|
|
110
|
+
- **Dev session**: `orchestrix-{repo-id}` — created during Phase 3 via `start-orchestrix.sh`, 4 windows (Architect/SM/Dev/QA).
|
|
111
|
+
- **Lazy recreation**: If a session is needed but doesn't exist, recreate it using [ensure-session.sh](scripts/ensure-session.sh).
|
|
112
|
+
- **Never assume sessions are alive** — always check with `tmux has-session` first.
|
|
113
|
+
|
|
114
|
+
## Completion Detection
|
|
115
|
+
|
|
116
|
+
When monitoring an agent in a tmux window, use [monitor-agent.sh](scripts/monitor-agent.sh):
|
|
117
|
+
|
|
118
|
+
| Priority | Signal | Pattern |
|
|
119
|
+
|----------|--------|---------|
|
|
120
|
+
| 1 | Claude Code completion | `/[A-Z][a-z]*ed for [0-9]/` (e.g., "Baked for 31s") |
|
|
121
|
+
| 2 | TUI idle indicator | `○` in last lines of pane |
|
|
122
|
+
| 3 | Approval prompt | `◐` → auto-send "y" + Enter |
|
|
123
|
+
| 4 | Content stability | Pane hash unchanged 3 consecutive polls |
|
|
124
|
+
|
|
125
|
+
## Error Recovery
|
|
126
|
+
|
|
127
|
+
- **Max 2 auto-retries** per operation, then escalate to user.
|
|
128
|
+
- **Agent load failure**: `/clear` → retry `/o {agent}`.
|
|
129
|
+
- **tmux session death**: Lazy recreation via `ensure-session.sh`.
|
|
130
|
+
- **Stuck agent** (no change 5min): `/clear` → restart.
|
|
131
|
+
- **Handoff chain break** (Phase 3): Manually resend handoff command to target window.
|
|
132
|
+
|
|
133
|
+
## Resource Directory
|
|
134
|
+
|
|
135
|
+
Files copied to new projects during Phase 1 are in [resources/](resources/).
|
|
136
|
+
Reference them as `${CLAUDE_SKILL_DIR}/resources/` in Bash commands.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Yuri Deployment Options
|
|
2
|
+
# Used by Phase 5 to present deployment strategies to the user.
|
|
3
|
+
|
|
4
|
+
china:
|
|
5
|
+
- id: china-sealos
|
|
6
|
+
provider: Sealos
|
|
7
|
+
best_for: Prototype / MVP
|
|
8
|
+
description: One-click container deployment, zero ops
|
|
9
|
+
|
|
10
|
+
- id: china-aliyun-ecs
|
|
11
|
+
provider: Aliyun ECS + Docker Compose
|
|
12
|
+
best_for: Production
|
|
13
|
+
description: Full control with ECS instances, Nginx reverse proxy, SSL
|
|
14
|
+
|
|
15
|
+
- id: china-vercel
|
|
16
|
+
provider: Vercel (CN-accessible)
|
|
17
|
+
best_for: Frontend / SSR
|
|
18
|
+
description: Static and SSR deployment, accessible from China
|
|
19
|
+
|
|
20
|
+
- id: china-aliyun-oss-cdn
|
|
21
|
+
provider: Aliyun OSS + CDN
|
|
22
|
+
best_for: Static sites
|
|
23
|
+
description: Static asset hosting with CDN acceleration
|
|
24
|
+
|
|
25
|
+
overseas:
|
|
26
|
+
- id: overseas-vercel
|
|
27
|
+
provider: Vercel
|
|
28
|
+
best_for: Frontend / Full-stack (Next.js)
|
|
29
|
+
description: Zero-config deployment, edge functions
|
|
30
|
+
|
|
31
|
+
- id: overseas-railway
|
|
32
|
+
provider: Railway
|
|
33
|
+
best_for: Backend APIs
|
|
34
|
+
description: Simple container deployment with built-in databases
|
|
35
|
+
|
|
36
|
+
- id: overseas-aws
|
|
37
|
+
provider: AWS (ECS / Lambda)
|
|
38
|
+
best_for: Enterprise scale
|
|
39
|
+
description: Full cloud infrastructure with auto-scaling
|
|
40
|
+
|
|
41
|
+
- id: overseas-fly
|
|
42
|
+
provider: Fly.io
|
|
43
|
+
best_for: Global edge deployment
|
|
44
|
+
description: Deploy containers close to users worldwide
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Yuri Phase Routing Rules
|
|
2
|
+
# Determines which phase to route to based on user intent.
|
|
3
|
+
|
|
4
|
+
routes:
|
|
5
|
+
- intent_patterns: ["create", "new project", "start a project", "build something", "I want to make"]
|
|
6
|
+
target_phase: 1
|
|
7
|
+
command: "*create"
|
|
8
|
+
|
|
9
|
+
- intent_patterns: ["plan", "planning", "design", "specification", "PRD", "architecture"]
|
|
10
|
+
target_phase: 2
|
|
11
|
+
command: "*plan"
|
|
12
|
+
|
|
13
|
+
- intent_patterns: ["develop", "implement", "code", "build", "start development"]
|
|
14
|
+
target_phase: 3
|
|
15
|
+
command: "*develop"
|
|
16
|
+
|
|
17
|
+
- intent_patterns: ["test", "smoke test", "QA", "quality", "verify"]
|
|
18
|
+
target_phase: 4
|
|
19
|
+
command: "*test"
|
|
20
|
+
|
|
21
|
+
- intent_patterns: ["deploy", "ship", "release", "go live", "publish", "launch"]
|
|
22
|
+
target_phase: 5
|
|
23
|
+
command: "*deploy"
|
|
24
|
+
|
|
25
|
+
- intent_patterns: ["status", "progress", "where are we", "what's happening"]
|
|
26
|
+
target_phase: 0
|
|
27
|
+
command: "*status"
|
|
28
|
+
|
|
29
|
+
- intent_patterns: ["change", "modify", "update requirement", "add feature", "new feature"]
|
|
30
|
+
target_phase: 0
|
|
31
|
+
command: "*change"
|
|
32
|
+
|
|
33
|
+
- intent_patterns: ["resume", "continue", "pick up", "where we left off"]
|
|
34
|
+
target_phase: 0
|
|
35
|
+
command: "*resume"
|
|
36
|
+
|
|
37
|
+
change_scope_rules:
|
|
38
|
+
small:
|
|
39
|
+
max_files: 5
|
|
40
|
+
no_db_changes: true
|
|
41
|
+
no_security_changes: true
|
|
42
|
+
action: dev_solo
|
|
43
|
+
|
|
44
|
+
medium:
|
|
45
|
+
action: po_route_change
|
|
46
|
+
requires_planning_session: true
|
|
47
|
+
|
|
48
|
+
large:
|
|
49
|
+
action: pause_and_replan
|
|
50
|
+
requires_planning_session: true
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Dependencies
|
|
2
|
+
node_modules/
|
|
3
|
+
vendor/
|
|
4
|
+
venv/
|
|
5
|
+
__pycache__/
|
|
6
|
+
|
|
7
|
+
# Environment
|
|
8
|
+
.env
|
|
9
|
+
.env.local
|
|
10
|
+
.env.*.local
|
|
11
|
+
|
|
12
|
+
# OS
|
|
13
|
+
.DS_Store
|
|
14
|
+
Thumbs.db
|
|
15
|
+
|
|
16
|
+
# Build
|
|
17
|
+
dist/
|
|
18
|
+
build/
|
|
19
|
+
out/
|
|
20
|
+
*.log
|
|
21
|
+
|
|
22
|
+
# IDE
|
|
23
|
+
.idea/
|
|
24
|
+
.vscode/
|
|
25
|
+
*.swp
|
|
26
|
+
*.swo
|
|
27
|
+
|
|
28
|
+
# Orchestrix runtime
|
|
29
|
+
.orchestrix-core/runtime/
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
title: Orchestrix Core System
|
|
2
|
+
description: >
|
|
3
|
+
The core agent framework for Orchestrix, providing the essential agents,
|
|
4
|
+
workflows, and data for building and managing AI-driven development teams.
|
|
5
|
+
markdownExploder: true
|
|
6
|
+
project:
|
|
7
|
+
name: '{{PROJECT_NAME}}'
|
|
8
|
+
mode: monolith
|
|
9
|
+
testCommand: '{{TEST_COMMAND}}'
|
|
10
|
+
multi_repo:
|
|
11
|
+
role: implementation
|
|
12
|
+
repository_id: '{{REPO_ID}}'
|
|
13
|
+
product_repo_path: ''
|
|
14
|
+
auto_filter_stories: false
|
|
15
|
+
assigned_stories: []
|
|
16
|
+
prd:
|
|
17
|
+
prdFile: docs/prd.md
|
|
18
|
+
prdSharded: false
|
|
19
|
+
prdShardedLocation: docs/prd
|
|
20
|
+
architecture:
|
|
21
|
+
architectureFile: docs/architecture.md
|
|
22
|
+
architectureSharded: false
|
|
23
|
+
architectureShardedLocation: docs/architecture
|
|
24
|
+
storyReviewsLocation: docs/architecture/story-reviews
|
|
25
|
+
customTechnicalDocuments: null
|
|
26
|
+
devLoadAlwaysFiles:
|
|
27
|
+
- docs/architecture/*coding-standards.md
|
|
28
|
+
- docs/architecture/*tech-stack.md
|
|
29
|
+
- docs/architecture/*source-tree.md
|
|
30
|
+
devDebugLog: .ai/debug-log.md
|
|
31
|
+
devStoryLocation: docs/stories
|
|
32
|
+
verticalSliceStrategy: true
|
|
33
|
+
dev:
|
|
34
|
+
devLogLocation: docs/dev/logs
|
|
35
|
+
devLogEnabled: true
|
|
36
|
+
architect:
|
|
37
|
+
storyReviewsLocation: docs/architecture/story-reviews
|
|
38
|
+
qa:
|
|
39
|
+
qaLocation: docs/qa
|
|
40
|
+
qaReviewsLocation: docs/qa/reviews
|
|
41
|
+
evidenceLocation: docs/qa/evidence
|
|
42
|
+
testDesignThresholds:
|
|
43
|
+
simple:
|
|
44
|
+
maxComplexity: 0
|
|
45
|
+
minQualityScore: 8.5
|
|
46
|
+
securitySensitive: false
|
|
47
|
+
tasks: []
|
|
48
|
+
standard:
|
|
49
|
+
maxComplexity: 2
|
|
50
|
+
minQualityScore: 7
|
|
51
|
+
tasks:
|
|
52
|
+
- test-design
|
|
53
|
+
comprehensive:
|
|
54
|
+
minComplexity: 3
|
|
55
|
+
securitySensitive: true
|
|
56
|
+
tasks:
|
|
57
|
+
- test-design
|
|
58
|
+
- risk-profile
|
|
59
|
+
slashPrefix: Orchestrix
|
|
60
|
+
version: 15.14.0
|
|
61
|
+
i18n:
|
|
62
|
+
default_language: en
|
|
63
|
+
supported_languages:
|
|
64
|
+
- en
|
|
65
|
+
- zh
|
|
66
|
+
fallback_to_default: true
|
|
67
|
+
file_pattern: '{name}.{lang}.{ext}'
|