@mstar-harness/opencode 0.2.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 (50) hide show
  1. package/AGENTS.md +9 -0
  2. package/INSTALL.md +76 -0
  3. package/dist/mstar.js +175 -0
  4. package/harness-agents/architect.md +35 -0
  5. package/harness-agents/frontend-dev.md +33 -0
  6. package/harness-agents/fullstack-dev-2.md +33 -0
  7. package/harness-agents/fullstack-dev.md +33 -0
  8. package/harness-agents/ops-engineer.md +33 -0
  9. package/harness-agents/product-manager.md +35 -0
  10. package/harness-agents/project-manager.md +32 -0
  11. package/harness-agents/prompt-engineer.md +33 -0
  12. package/harness-agents/qa-engineer.md +35 -0
  13. package/harness-agents/qc-specialist-2.md +111 -0
  14. package/harness-agents/qc-specialist-3.md +111 -0
  15. package/harness-agents/qc-specialist.md +111 -0
  16. package/harness-agents/writing-specialist.md +35 -0
  17. package/harness-skills/mstar-coding-behavior/SKILL.md +104 -0
  18. package/harness-skills/mstar-harness-core/SKILL.md +284 -0
  19. package/harness-skills/mstar-harness-core/references/branch-and-worktree.md +131 -0
  20. package/harness-skills/mstar-harness-core/references/library-docs-protocol.md +35 -0
  21. package/harness-skills/mstar-harness-core/references/open-harness-principles.md +73 -0
  22. package/harness-skills/mstar-harness-core/references/phase-gate-playbook.md +87 -0
  23. package/harness-skills/mstar-plan-conventions/SKILL.md +241 -0
  24. package/harness-skills/mstar-plan-conventions/references/done-compaction.md +78 -0
  25. package/harness-skills/mstar-plan-conventions/references/effort-estimation.md +38 -0
  26. package/harness-skills/mstar-plan-conventions/references/harness-bootstrap-and-agents-layering.md +79 -0
  27. package/harness-skills/mstar-plan-conventions/references/knowledge-and-designs.md +70 -0
  28. package/harness-skills/mstar-plan-conventions/references/plan-files-and-reports.md +66 -0
  29. package/harness-skills/mstar-plan-conventions/references/status-and-residuals.md +391 -0
  30. package/harness-skills/mstar-plan-conventions/templates/README.md +8 -0
  31. package/harness-skills/mstar-plan-conventions/templates/notes.empty.json +5 -0
  32. package/harness-skills/mstar-plan-conventions/templates/status.empty.json +7 -0
  33. package/harness-skills/mstar-review-qc/SKILL.md +177 -0
  34. package/harness-skills/mstar-roles/SKILL.md +83 -0
  35. package/harness-skills/mstar-roles/references/architect.md +174 -0
  36. package/harness-skills/mstar-roles/references/frontend-dev.md +119 -0
  37. package/harness-skills/mstar-roles/references/fullstack-dev-shared.md +123 -0
  38. package/harness-skills/mstar-roles/references/ops-engineer.md +131 -0
  39. package/harness-skills/mstar-roles/references/product-manager.md +183 -0
  40. package/harness-skills/mstar-roles/references/project-manager.md +776 -0
  41. package/harness-skills/mstar-roles/references/prompt-engineer.md +129 -0
  42. package/harness-skills/mstar-roles/references/qa-engineer.md +172 -0
  43. package/harness-skills/mstar-roles/references/qc-specialist-shared.md +155 -0
  44. package/harness-skills/mstar-roles/references/writing-specialist.md +85 -0
  45. package/harness-skills/mstar-superpowers-align/SKILL.md +150 -0
  46. package/harness-skills/mstar-superpowers-align/references/per-role-matrix.md +99 -0
  47. package/harness-skills/mstar-superpowers-align/references/tension-table.md +19 -0
  48. package/harness-skills/pm/SKILL.md +31 -0
  49. package/package.json +35 -0
  50. package/skills/mstar-host/SKILL.md +125 -0
package/AGENTS.md ADDED
@@ -0,0 +1,9 @@
1
+ # Morning Star - Global Entry
2
+
3
+ ## Morning Star Harness Core
4
+
5
+ Any code agent working in this repository must read the `mstar-harness-core` skill before starting any non-trivial task, including relevant files in its `references/` directory.
6
+
7
+ `mstar-harness-core` is the single source of truth for lifecycle gates, routing, host entry behavior, skill loading order, and execution invariants across all `mstar-*` skills.
8
+
9
+ All other execution behavior remains defined by `mstar-harness-core`.
package/INSTALL.md ADDED
@@ -0,0 +1,76 @@
1
+ # Installing Morning Star for OpenCode
2
+
3
+ ## Prerequisites
4
+
5
+ - [OpenCode.ai](https://opencode.ai) installed
6
+
7
+ ## Installation
8
+
9
+ Add Morning Star to the `plugin` array in your `opencode.json` (global or project-level).
10
+
11
+ If you use Superpowers together, use:
12
+
13
+ ```json
14
+ {
15
+ "plugin": [
16
+ "superpowers@git+https://github.com/obra/superpowers.git",
17
+ "@mstar-harness/opencode@latest"
18
+ ]
19
+ }
20
+ ```
21
+
22
+ Restart OpenCode. The plugin installs from npm and registers Morning Star runtime paths.
23
+
24
+ ## Usage
25
+
26
+ - Keep your role models and permissions in `opencode.json`.
27
+ - The plugin loads **only paths inside the `@mstar-harness/opencode` package**:
28
+ - **`harness-skills/`** — copy of Morning Star `skills/` from the release build (`prepublishOnly` runs `bundle-assets` before `bun build`).
29
+ - **`skills/`** — packaged OpenCode host adapter (e.g. `mstar-host`).
30
+ - **`harness-agents/`** — copy of repo `agents/` from the same build.
31
+ - It does **not** read `<cwd>/skills` or `<cwd>/agents`, so OpenCode’s `process.cwd()` (your app project root) does not affect harness resolution.
32
+ - Bootstrap prompt entry is injected once with `<IMPORTANT_FOR_HARNESS>`.
33
+
34
+ ## Monorepo / git checkout of this repository
35
+
36
+ After `bun install` or `npm install` at the repo root, **`postinstall`** runs `packages/opencode`’s `bundle-assets` so `harness-skills/` and `harness-agents/` exist for the plugin entry `main` → `packages/opencode/src/mstar.ts`.
37
+
38
+ If you use `npm install --ignore-scripts`, run once manually:
39
+
40
+ `bun run opencode:bundle-assets`
41
+
42
+ (or `bun run --cwd packages/opencode bundle-assets`).
43
+
44
+ ## Updating
45
+
46
+ Change the plugin specifier to pick a new dist tag, for example:
47
+
48
+ ```json
49
+ {
50
+ "plugin": ["@mstar-harness/opencode@latest"]
51
+ }
52
+ ```
53
+
54
+ Restart OpenCode after edits.
55
+
56
+ ## Legacy (git-based) installs
57
+
58
+ Older configs used:
59
+
60
+ `morning-star@git+https://github.com/btspoony/mstar-harness.git`
61
+
62
+ The `@mstar-harness/cli` package (`npx @mstar-harness/cli init`) migrates that entry to `@mstar-harness/opencode@latest`.
63
+
64
+ ## Troubleshooting
65
+
66
+ ### Plugin not loading
67
+
68
+ 1. Check logs: `opencode run --print-logs "hello" 2>&1 | grep -i superpowers`
69
+ 2. Verify the plugin line in your `opencode.json`
70
+ 3. Make sure you're running a recent version of OpenCode
71
+
72
+ ### Skills not found
73
+
74
+ 1. Use `skill` tool to list what's discovered
75
+ 2. Check that the plugin is loading (see above)
76
+ 3. For **npm** installs, use a published build (tarball includes `harness-skills`). For **git** checkout, ensure install scripts ran (`postinstall` / `bun run opencode:bundle-assets`)
package/dist/mstar.js ADDED
@@ -0,0 +1,175 @@
1
+ // src/mstar.ts
2
+ import fs from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ var __dirname2 = path.dirname(fileURLToPath(import.meta.url));
7
+ var packageRoot = path.resolve(__dirname2, "..");
8
+ var bundledSkillsDir = path.join(packageRoot, "harness-skills");
9
+ var hostSkillsDir = path.join(packageRoot, "skills");
10
+ var bundledAgentsDir = path.join(packageRoot, "harness-agents");
11
+ var bootstrapAgentsPath = path.join(packageRoot, "AGENTS.md");
12
+ var BOOTSTRAP_MARKER = "IMPORTANT_FOR_HARNESS";
13
+ function resolveSkillPathCandidates() {
14
+ const out = [];
15
+ if (fs.existsSync(bundledSkillsDir))
16
+ out.push(bundledSkillsDir);
17
+ if (fs.existsSync(hostSkillsDir))
18
+ out.push(hostSkillsDir);
19
+ return out;
20
+ }
21
+ var extractFrontmatterAndBody = (content) => {
22
+ const match = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
23
+ if (!match)
24
+ return { frontmatter: "", body: content };
25
+ return { frontmatter: match[1], body: match[2] };
26
+ };
27
+ var parseScalar = (raw) => {
28
+ const value = raw.trim();
29
+ if (value === "true")
30
+ return true;
31
+ if (value === "false")
32
+ return false;
33
+ if (value === "null")
34
+ return null;
35
+ if (value === "allow" || value === "ask" || value === "deny")
36
+ return value;
37
+ if (/^-?\d+(\.\d+)?$/.test(value))
38
+ return Number(value);
39
+ return value.replace(/^["']|["']$/g, "");
40
+ };
41
+ var parseSimpleFrontmatter = (frontmatter) => {
42
+ const root = {};
43
+ const stack = [{ indent: -1, target: root }];
44
+ const lines = frontmatter.split(`
45
+ `);
46
+ for (let i = 0;i < lines.length; i += 1) {
47
+ const line = lines[i];
48
+ if (!line.trim() || line.trim().startsWith("#"))
49
+ continue;
50
+ const indent = line.match(/^ */)?.[0]?.length ?? 0;
51
+ const trimmed = line.trim();
52
+ const separator = trimmed.indexOf(":");
53
+ if (separator <= 0)
54
+ continue;
55
+ const key = trimmed.slice(0, separator).trim();
56
+ const rawValue = trimmed.slice(separator + 1).trim();
57
+ while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
58
+ stack.pop();
59
+ }
60
+ const current = stack[stack.length - 1].target;
61
+ if (rawValue === "" || rawValue === "{}") {
62
+ current[key] = {};
63
+ stack.push({ indent, target: current[key] });
64
+ continue;
65
+ }
66
+ if (rawValue === "|-" || rawValue === "|") {
67
+ const blockLines = [];
68
+ const baseIndent = indent;
69
+ for (let j = i + 1;j < lines.length; j += 1) {
70
+ const blockLine = lines[j];
71
+ const blockIndent = blockLine.match(/^ */)?.[0]?.length ?? 0;
72
+ if (blockLine.trim() && blockIndent <= baseIndent)
73
+ break;
74
+ const normalized = blockLine.startsWith(" ".repeat(baseIndent + 2)) ? blockLine.slice(baseIndent + 2) : blockLine.trim() ? blockLine.trim() : "";
75
+ blockLines.push(normalized);
76
+ i = j;
77
+ }
78
+ current[key] = blockLines.join(`
79
+ `);
80
+ continue;
81
+ }
82
+ current[key] = parseScalar(rawValue);
83
+ }
84
+ return root;
85
+ };
86
+ var loadBootstrapContent = () => {
87
+ if (!fs.existsSync(bootstrapAgentsPath))
88
+ return null;
89
+ const content = fs.readFileSync(bootstrapAgentsPath, "utf8").trim();
90
+ if (!content)
91
+ return null;
92
+ return `<${BOOTSTRAP_MARKER}>
93
+ ${content}
94
+ </${BOOTSTRAP_MARKER}>`;
95
+ };
96
+ var normalizePath = (inputPath, homeDir) => {
97
+ if (!inputPath || typeof inputPath !== "string")
98
+ return null;
99
+ let normalized = inputPath.trim();
100
+ if (!normalized)
101
+ return null;
102
+ if (normalized === "~")
103
+ normalized = homeDir;
104
+ if (normalized.startsWith("~/"))
105
+ normalized = path.join(homeDir, normalized.slice(2));
106
+ return path.resolve(normalized);
107
+ };
108
+ var loadAgentsFromDir = (agentsDirPath) => {
109
+ if (!fs.existsSync(agentsDirPath))
110
+ return {};
111
+ const files = fs.readdirSync(agentsDirPath).filter((name) => name.endsWith(".md")).sort((a, b) => a.localeCompare(b));
112
+ const result = {};
113
+ for (const file of files) {
114
+ const filePath = path.join(agentsDirPath, file);
115
+ const content = fs.readFileSync(filePath, "utf8");
116
+ const { frontmatter, body } = extractFrontmatterAndBody(content);
117
+ const parsed = parseSimpleFrontmatter(frontmatter);
118
+ const parsedName = typeof parsed.name === "string" ? parsed.name : "";
119
+ const id = parsedName || file.replace(/\.md$/, "");
120
+ result[id] = {
121
+ ...parsed,
122
+ prompt: body.trim()
123
+ };
124
+ }
125
+ return result;
126
+ };
127
+ var loadBundledAgents = () => loadAgentsFromDir(bundledAgentsDir);
128
+ var MorningStarHarnessPlugin = async () => {
129
+ const homeDir = os.homedir();
130
+ const envConfigDir = normalizePath(process.env.OPENCODE_CONFIG_DIR, homeDir);
131
+ const configDir = envConfigDir || path.join(homeDir, ".config/opencode");
132
+ const isEnabledForProject = !!configDir;
133
+ return {
134
+ config: async (config) => {
135
+ if (!isEnabledForProject)
136
+ return;
137
+ const runtimeConfig = config;
138
+ runtimeConfig.skills = runtimeConfig.skills || {};
139
+ runtimeConfig.skills.paths = runtimeConfig.skills.paths || [];
140
+ for (const skillPath of resolveSkillPathCandidates()) {
141
+ if (fs.existsSync(skillPath) && !runtimeConfig.skills.paths.includes(skillPath)) {
142
+ runtimeConfig.skills.paths.push(skillPath);
143
+ }
144
+ }
145
+ const markdownAgents = loadBundledAgents();
146
+ runtimeConfig.agent = runtimeConfig.agent || {};
147
+ for (const [agentId, definition] of Object.entries(markdownAgents)) {
148
+ runtimeConfig.agent[agentId] = {
149
+ ...runtimeConfig.agent[agentId] || {},
150
+ ...definition
151
+ };
152
+ }
153
+ },
154
+ "experimental.chat.messages.transform": async (_input, output) => {
155
+ const bootstrap = loadBootstrapContent();
156
+ if (!bootstrap || !output.messages.length)
157
+ return;
158
+ const firstUser = output.messages.find((message) => message.info.role === "user");
159
+ if (!firstUser || !firstUser.parts.length)
160
+ return;
161
+ const injected = firstUser.parts.some((part) => part.type === "text" && typeof part.text === "string" && part.text.includes(`<${BOOTSTRAP_MARKER}>`));
162
+ if (injected)
163
+ return;
164
+ const ref = firstUser.parts[0];
165
+ firstUser.parts.unshift({
166
+ ...ref,
167
+ type: "text",
168
+ text: bootstrap
169
+ });
170
+ }
171
+ };
172
+ };
173
+ export {
174
+ MorningStarHarnessPlugin
175
+ };
@@ -0,0 +1,35 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ bash:
9
+ "*": allow
10
+ task:
11
+ "*": deny
12
+ explore: allow
13
+ name: architect
14
+ description: |-
15
+ 技术架构师 - 系统设计、技术决策与技术向文档编写(架构说明、ADR、接口契约等)。
16
+ Architect - system design, technical decisions, and technical documentation (architecture notes, ADRs, interface contracts).
17
+ ---
18
+
19
+ ## Morning Star Role Binding
20
+
21
+ You are `architect`. The complete role prompt is provided by the `mstar-roles` skill.
22
+
23
+ - Skill: `mstar-roles` skill
24
+ - Role reference: `references/architect.md` in the `mstar-roles` skill
25
+ - Role parameters: `role_id=architect`, `mode=subagent`
26
+
27
+ ## Mandatory First Steps
28
+
29
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
30
+
31
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
32
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
33
+ 3. `Read` → `references/architect.md` listed above
34
+
35
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,33 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ task:
9
+ "*": deny
10
+ explore: allow
11
+ name: frontend-dev
12
+ description: |-
13
+ 前端开发工程师 - 页面/组件/交互/a11y/前端性能。全栈功能里默认前端主责(与 `@fullstack-dev` 分轨);纯 UI 任务首选本角色。
14
+ Frontend Developer - pages/components/interactions/accessibility/frontend performance. This is the default frontend owner in fullstack work (split with `@fullstack-dev`) and the preferred role for pure UI tasks.
15
+ ---
16
+
17
+ ## Morning Star Role Binding
18
+
19
+ You are `frontend-dev`. The complete role prompt is provided by the `mstar-roles` skill.
20
+
21
+ - Skill: `mstar-roles` skill
22
+ - Role reference: `references/frontend-dev.md` in the `mstar-roles` skill
23
+ - Role parameters: `role_id=frontend-dev`, `track=frontend_primary`
24
+
25
+ ## Mandatory First Steps
26
+
27
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
28
+
29
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
30
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
31
+ 3. `Read` → `references/frontend-dev.md` listed above
32
+
33
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,33 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ task:
9
+ "*": deny
10
+ explore: allow
11
+ name: fullstack-dev-2
12
+ description: |-
13
+ 全栈开发工程师 - 与 `@fullstack-dev` 并行的第二实现轨(独立模块/API/页面岛)。PM 在 tasks 可并行或加速时指派;须写明模块边界与分支,勿当作闲置备用。
14
+ Fullstack Developer (Track 2) - the second implementation track parallel to `@fullstack-dev` (independent modules/APIs/page islands). PM should assign this role when tasks can run in parallel or when acceleration is needed, with explicit module boundaries and branch ownership.
15
+ ---
16
+
17
+ ## Morning Star Role Binding
18
+
19
+ You are `fullstack-dev-2`. The complete role prompt is provided by the `mstar-roles` skill.
20
+
21
+ - Skill: `mstar-roles` skill
22
+ - Role reference: `references/fullstack-dev-shared.md` in the `mstar-roles` skill
23
+ - Role parameters: `role_id=fullstack-dev-2`, `track=parallel_secondary`, `backend_led=true`
24
+
25
+ ## Mandatory First Steps
26
+
27
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
28
+
29
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
30
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
31
+ 3. `Read` → `references/fullstack-dev-shared.md` listed above
32
+
33
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,33 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ task:
9
+ "*": deny
10
+ explore: allow
11
+ name: fullstack-dev
12
+ description: |-
13
+ 全栈开发工程师 - 后端主导的全栈实现(API/业务/数据层)。UI 重或新页面多时由 PM 拆给 `@frontend-dev`;第二并行实现轨用 `@fullstack-dev-2`。Hotfix/单流小改可一人完成。
14
+ Fullstack Developer - backend-led fullstack implementation (API/business/data). PM should split UI-heavy or new-page work to `@frontend-dev`, and use `@fullstack-dev-2` for the second parallel track. One developer can handle hotfixes or small single-stream updates.
15
+ ---
16
+
17
+ ## Morning Star Role Binding
18
+
19
+ You are `fullstack-dev`. The complete role prompt is provided by the `mstar-roles` skill.
20
+
21
+ - Skill: `mstar-roles` skill
22
+ - Role reference: `references/fullstack-dev-shared.md` in the `mstar-roles` skill
23
+ - Role parameters: `role_id=fullstack-dev`, `track=primary`, `backend_led=true`
24
+
25
+ ## Mandatory First Steps
26
+
27
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
28
+
29
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
30
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
31
+ 3. `Read` → `references/fullstack-dev-shared.md` listed above
32
+
33
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,33 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ task:
9
+ "*": deny
10
+ explore: allow
11
+ name: ops-engineer
12
+ description: |-
13
+ 运维工程师 - 部署、监控和基础设施。
14
+ Ops Engineer - deployment, monitoring, and infrastructure operations, including CI/CD and observability.
15
+ ---
16
+
17
+ ## Morning Star Role Binding
18
+
19
+ You are `ops-engineer`. The complete role prompt is provided by the `mstar-roles` skill.
20
+
21
+ - Skill: `mstar-roles` skill
22
+ - Role reference: `references/ops-engineer.md` in the `mstar-roles` skill
23
+ - Role parameters: `role_id=ops-engineer`, `mode=subagent`
24
+
25
+ ## Mandatory First Steps
26
+
27
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
28
+
29
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
30
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
31
+ 3. `Read` → `references/ops-engineer.md` listed above
32
+
33
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,35 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ bash:
9
+ "*": allow
10
+ task:
11
+ "*": deny
12
+ explore: allow
13
+ name: product-manager
14
+ description: |-
15
+ 产品经理 - 需求分析、产品规划、市场/用户研究与产品向文档编写。
16
+ Product Manager - requirements analysis, product planning, market/user research, and product-facing documentation.
17
+ ---
18
+
19
+ ## Morning Star Role Binding
20
+
21
+ You are `product-manager`. The complete role prompt is provided by the `mstar-roles` skill.
22
+
23
+ - Skill: `mstar-roles` skill
24
+ - Role reference: `references/product-manager.md` in the `mstar-roles` skill
25
+ - Role parameters: `role_id=product-manager`, `mode=subagent`
26
+
27
+ ## Mandatory First Steps
28
+
29
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
30
+
31
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
32
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
33
+ 3. `Read` → `references/product-manager.md` listed above
34
+
35
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,32 @@
1
+ ---
2
+ mode: primary
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ task:
9
+ "*": allow
10
+ name: project-manager
11
+ description: |-
12
+ 项目经理 - 协调开发团队,管理项目进度。
13
+ Project Manager - coordinate the team, track progress, and orchestrate execution across roles.
14
+ ---
15
+
16
+ ## Morning Star Role Binding
17
+
18
+ You are `project-manager`. The complete role prompt is provided by the `mstar-roles` skill.
19
+
20
+ - Skill: `mstar-roles` skill
21
+ - Role reference: `references/project-manager.md` in the `mstar-roles` skill
22
+ - Role parameters: `role_id=project-manager`, `mode=primary`
23
+
24
+ ## Mandatory First Steps
25
+
26
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
27
+
28
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
29
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
30
+ 3. `Read` → `references/project-manager.md` listed above
31
+
32
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,33 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ task:
9
+ "*": deny
10
+ explore: allow
11
+ name: prompt-engineer
12
+ description: |-
13
+ 提示词工程师 - 设计与优化 Agent 提示词与技能。
14
+ Prompt Engineer - design and optimize prompts and skills for agents, including refactoring and debugging prompt systems.
15
+ ---
16
+
17
+ ## Morning Star Role Binding
18
+
19
+ You are `prompt-engineer`. The complete role prompt is provided by the `mstar-roles` skill.
20
+
21
+ - Skill: `mstar-roles` skill
22
+ - Role reference: `references/prompt-engineer.md` in the `mstar-roles` skill
23
+ - Role parameters: `role_id=prompt-engineer`, `mode=subagent`
24
+
25
+ ## Mandatory First Steps
26
+
27
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
28
+
29
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
30
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
31
+ 3. `Read` → `references/prompt-engineer.md` listed above
32
+
33
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,35 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ bash:
9
+ "*": allow
10
+ task:
11
+ "*": deny
12
+ explore: allow
13
+ name: qa-engineer
14
+ description: |-
15
+ 测试工程师 - 编写测试用例和自动化测试。
16
+ QA Engineer - test planning, automated tests, coverage improvements, and regression protection.
17
+ ---
18
+
19
+ ## Morning Star Role Binding
20
+
21
+ You are `qa-engineer`. The complete role prompt is provided by the `mstar-roles` skill.
22
+
23
+ - Skill: `mstar-roles` skill
24
+ - Role reference: `references/qa-engineer.md` in the `mstar-roles` skill
25
+ - Role parameters: `role_id=qa-engineer`, `mode=subagent`
26
+
27
+ ## Mandatory First Steps
28
+
29
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
30
+
31
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
32
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
33
+ 3. `Read` → `references/qa-engineer.md` listed above
34
+
35
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.
@@ -0,0 +1,111 @@
1
+ ---
2
+ mode: subagent
3
+ tools:
4
+ write: true
5
+ edit: true
6
+ bash: true
7
+ permission:
8
+ # `edit` covers write/patch/multiedit. Only `.md` under resolved `{PLAN_DIR}/reports/` (three possible roots — match project layout).
9
+ edit:
10
+ "*": deny
11
+ ".agents/plans/reports/*.md": allow
12
+ ".agents/plans/reports/**/*.md": allow
13
+ ".plans/reports/*.md": allow
14
+ ".plans/reports/**/*.md": allow
15
+ ".worktrees/**/.agents/plans/reports/*.md": allow
16
+ ".worktrees/**/.agents/plans/reports/**/*.md": allow
17
+ ".worktrees/**/.plans/reports/*.md": allow
18
+ ".worktrees/**/.plans/reports/**/*.md": allow
19
+ bash:
20
+ "*": deny
21
+ # Git inspection (read-only)
22
+ "git diff*": allow
23
+ "git log*": allow
24
+ "git show*": allow
25
+ "git blame*": allow
26
+ "git shortlog*": allow
27
+ "git stash list*": allow
28
+ "git branch*": allow
29
+ "git status*": allow
30
+ # Versioning QC reports only (paths you edited must stay under allowed reports/ trees)
31
+ "git add*": allow
32
+ "git commit*": allow
33
+ # JavaScript / TypeScript
34
+ "eslint*": allow
35
+ "npx eslint*": allow
36
+ "prettier --check*": allow
37
+ "npx prettier --check*": allow
38
+ "tsc*": allow
39
+ "npx tsc*": allow
40
+ "biome*": allow
41
+ "npx @biomejs/biome*": allow
42
+ "oxlint*": allow
43
+ "npx oxlint*": allow
44
+ "stylelint*": allow
45
+ "npx stylelint*": allow
46
+ # Python
47
+ "ruff*": allow
48
+ "pylint*": allow
49
+ "flake8*": allow
50
+ "mypy*": allow
51
+ "pyright*": allow
52
+ "bandit*": allow
53
+ "python -m ruff*": allow
54
+ "python -m pylint*": allow
55
+ "python -m mypy*": allow
56
+ "python3 -m ruff*": allow
57
+ "python3 -m pylint*": allow
58
+ "python3 -m mypy*": allow
59
+ # Rust
60
+ "cargo clippy*": allow
61
+ "cargo fmt --check*": allow
62
+ "cargo audit*": allow
63
+ # Go
64
+ "golangci-lint*": allow
65
+ "go vet*": allow
66
+ "staticcheck*": allow
67
+ # Ruby
68
+ "rubocop*": allow
69
+ "bundle exec rubocop*": allow
70
+ # Swift
71
+ "swiftlint*": allow
72
+ "swift-format lint*": allow
73
+ # Shell / Config
74
+ "shellcheck*": allow
75
+ "hadolint*": allow
76
+ "actionlint*": allow
77
+ # Markdown / Docs
78
+ "markdownlint*": allow
79
+ # General analysis
80
+ "wc*": allow
81
+ "rg*": allow
82
+ "cloc*": allow
83
+ "scc*": allow
84
+ "tokei*": allow
85
+ "git rev-parse*": allow
86
+ task:
87
+ "*": deny
88
+ explore: allow
89
+ name: qc-specialist-2
90
+ description: |-
91
+ 质量控制专家(Reviewer #2)- 代码审查和质量保证。
92
+ Quality Control Specialist (Reviewer #2) - code review and quality assurance after significant changes.
93
+ ---
94
+
95
+ ## Morning Star Role Binding
96
+
97
+ You are `qc-specialist-2`. The complete role prompt is provided by the `mstar-roles` skill.
98
+
99
+ - Skill: `mstar-roles` skill
100
+ - Role reference: `references/qc-specialist-shared.md` in the `mstar-roles` skill
101
+ - Role parameters: `role_id=qc-specialist-2`, `reviewer_index=2`, `focus=security_correctness`, `report_suffix=qc2`
102
+
103
+ ## Mandatory First Steps
104
+
105
+ This file is a routing shell — NOT your complete role prompt. **Before any work, load in order:**
106
+
107
+ 1. `skill` → `mstar-harness-core` (state machine, gates, routing — global SSOT)
108
+ 2. `skill` → `mstar-roles` (role mapping & parameter table)
109
+ 3. `Read` → `references/qc-specialist-shared.md` listed above
110
+
111
+ System reminders like "ALREADY LOADED" refer to prior sessions — you MUST load these for THIS session.