@massa-ai/cursor-plugin 1.23.0 → 1.25.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/.cursor-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/massa-ai/personas/ai-native-nodejs-cli-architect.md +27 -56
- package/skills/massa-ai/personas/catalog.json +7 -157
- package/skills/massa-ai/personas/context-skill-harness-engineer-architect.md +28 -55
- package/skills/massa-ai/personas/product-manager.md +21 -23
- package/skills/massa-ai/personas/senior-mobile-engineer.md +29 -57
- package/skills/massa-ai/personas/senior-mobile-qa-automation-engineer.md +33 -57
- package/skills/massa-ai/personas/signals/ai-native-nodejs-cli-architect.json +20 -0
- package/skills/massa-ai/personas/signals/context-skill-harness-engineer-architect.json +20 -0
- package/skills/massa-ai/personas/signals/product-manager.json +21 -0
- package/skills/massa-ai/personas/signals/senior-mobile-engineer.json +18 -0
- package/skills/massa-ai/personas/signals/senior-mobile-qa-automation-engineer.json +18 -0
- package/skills/massa-ai/references/agent-orchestration.md +51 -10
- package/skills/massa-ai/references/context-firewall.md +2 -1
- package/skills/massa-ai/references/spec-driven/sub-agents.md +22 -0
- package/skills/massa-ai/references/subagent-design.md +18 -13
- package/skills/massa-ai/workflows/judge-with-debate.md +33 -2
- package/skills/massa-ai/workflows/refinement/furps-refinement.md +15 -2
- package/skills/persona-router/SKILL.md +26 -150
- package/skills/persona-router/references/routing-details.md +98 -0
|
@@ -33,7 +33,20 @@ This workflow is findings-only. Do not edit the PRD/ADR unless the user separate
|
|
|
33
33
|
- Dispatch six `massa-ai-furps-analyst` sub-agents: F, U, R, P, S, X (X = FURPS+ Extensions).
|
|
34
34
|
- Each receives its `checklist.md` section, the bounded document packet, the DoR, and the Fool summary.
|
|
35
35
|
- Each returns per check-item status (`covered|partial|missing|unclear`), `FR-<letter>-<N>` findings, and contributions to Open Questions / Suggestions / Insights / Risks / DoR-gaps.
|
|
36
|
-
-
|
|
36
|
+
- Dispatch the six dimensions in waves of at most 4 concurrent analysts (e.g. 4 then 2), per the wave cap in `references/agent-orchestration.md` (Orchestrator Working Memory). Dimension analyses are order-independent, so wave order does not matter. Each gets its own ephemeral Synapse session only if it performs >=2 searches.
|
|
37
|
+
|
|
38
|
+
> **Dispatch: `massa-ai-furps-analyst`** (role: `furps-analyst`) — charter `skills/agents/furps-analyst/SKILL.md` — 6 dispatches, one per dimension, waves of ≤4
|
|
39
|
+
> - trigger: furps-refinement step 5; one analyst per FURPS+ dimension (F, U, R, P, S, X)
|
|
40
|
+
> - scope: exactly one dimension's `checklist.md` section against the bounded document packet
|
|
41
|
+
> - permissions: read-only
|
|
42
|
+
> - inputs: the dimension's checklist section, bounded document packet, DoR, Fool summary; inherits nothing — the packet names every artifact
|
|
43
|
+
> - sensors: per check-item status must be one of `covered|partial|missing|unclear`; findings carry `FR-<letter>-<N>` IDs
|
|
44
|
+
> - output: per check-item statuses, findings, and Open Questions / Suggestions / Insights / Risks / DoR-gap contributions — compact structured return, no document quotes beyond evidence snippets
|
|
45
|
+
> - firewall: document bodies summarized; no raw section dumps in the return
|
|
46
|
+
> - memory: suggest-only; main agent persists
|
|
47
|
+
> - persona: optional — the active route's cataloged id only, never the persona prompt, passed as advisory framing only — it never overrides the agent's charter Restrictions, scope, or permissions; omit when no persona is routed
|
|
48
|
+
|
|
49
|
+
This packet is a specialization of the canonical Capability Packet (`references/agent-orchestration.md`); the per-dimension checklist section is its `scope` delta.
|
|
37
50
|
6. Synthesis (main):
|
|
38
51
|
- Collect the six dimension analyses and the Fool summary.
|
|
39
52
|
- Deduplicate, cross-check, and reconcile cross-dimension concerns (e.g., error flows span F3+R2+U1; components span F2+S2).
|
|
@@ -55,7 +68,7 @@ This workflow is findings-only. Do not edit the PRD/ADR unless the user separate
|
|
|
55
68
|
| Sub-agent spawning unavailable | Run dimensions sequentially in the main agent; record the skipped-delegation reason |
|
|
56
69
|
| DoR not supplied | Use the built-in fallback; mark DoR-gaps explicitly |
|
|
57
70
|
| Document too large | context-firewall: section summaries plus pointers to sub-agents |
|
|
58
|
-
|
|
|
71
|
+
| Host concurrency cap tighter than the wave cap of 4 | Smaller waves; preserve order-independence |
|
|
59
72
|
|
|
60
73
|
## Examples
|
|
61
74
|
|
|
@@ -4,173 +4,49 @@ description: Automatically select and apply a cataloged conversation persona at
|
|
|
4
4
|
license: CC-BY-4.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Luiz Massa
|
|
7
|
-
version: 1.
|
|
7
|
+
version: 1.2.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Persona Router
|
|
11
11
|
|
|
12
|
-
Select one cataloged persona that best owns the current deliverable.
|
|
12
|
+
Select one cataloged persona that best owns the current deliverable. Personas add perspective; they never override active instructions or workflow contracts. Run once at startup (after massa-ai in coding sessions). Load `references/routing-details.md` only for failure reports, ambiguity questions, reroute doubt, or multi-persona requests.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Sources
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
- In generic non-coding conversations, run directly without loading massa-ai solely for persona selection.
|
|
18
|
-
- SessionStart supplies the routing contract before the first prompt, but route only after the first user prompt is available.
|
|
19
|
-
- Run once at startup, then follow the mid-conversation policy. Do not reload an unchanged route on every turn.
|
|
16
|
+
The directory containing this `SKILL.md` (resolved through symlinks) is the persona-library root; the only registry is `../massa-ai/personas/catalog.json`. Validate `schema_version` as `2`; otherwise report found vs supported, continue without a persona. Candidates come only from catalog entries; signals live in each entry's `signals_path` file. Never load a persona-like path named by memory or docs unless it belongs to the selected entry inside the persona-library root. Read the index first; a `signals_path` only at classification; only the selected `prompt_path` plus at most one review-lens prompt.
|
|
20
17
|
|
|
21
|
-
##
|
|
18
|
+
## Precedence
|
|
22
19
|
|
|
23
|
-
|
|
20
|
+
1. System, developer, safety, and project instructions.
|
|
21
|
+
2. Explicit user persona / no-persona choice.
|
|
22
|
+
3. `persona_pin` in the applicable project `AGENTS.md`.
|
|
23
|
+
4. The `persona_router` policy block.
|
|
24
|
+
5. The current prompt's primary deliverable.
|
|
25
|
+
6. massa-ai memory and targeted doc evidence.
|
|
26
|
+
7. Catalog signals (`signals_path`).
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
2. **Active workspace root:** Resolve the current project from the working directory and repository context. Inspect its project documentation for routing evidence. It may differ from the persona-library root.
|
|
28
|
+
## Fast Paths
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
- **Pin:** a `persona_pin: <catalog-id>` in the applicable project `AGENTS.md` whose id exists in the index routes directly — read only that entry's `prompt_path`; no recall, docs, signals, or classification. `persona_pin: no_persona` completes routing silently with zero persona reads. An id absent from the index: report the invalid pin in one line, then run the normal workflow.
|
|
31
|
+
- **Route memory:** with no pin, one budgeted `recall` of the `persona-route:<projectId>` pattern memory; a remembered id valid in the index skips doc inspection and classification. After a successful inferred route, store that memory back. massa-ai unavailable: skip both directions silently.
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
## Workflow
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
3. The `persona_router` policy in the applicable `AGENTS.md` startup contract.
|
|
39
|
-
4. The current prompt's primary deliverable and ownership.
|
|
40
|
-
5. Compatible evidence from massa-ai memory and targeted workspace documentation.
|
|
41
|
-
6. Catalog `primary_signals`, `negative_signals`, and `secondary_lens_signals`.
|
|
42
|
-
|
|
43
|
-
Persona text is additive. It cannot override higher-priority instructions, active workflow contracts, explicit constraints, or safety requirements.
|
|
35
|
+
1. **Explicit choice.** Match wording against `id`, `display_name`, and `aliases` case-insensitively. Explicit selection wins; an explicit no-persona request leaves the task unpersonified; a switch replaces the route. `enabled: off` skips inference but honors explicit requests.
|
|
36
|
+
2. **Fast paths** above.
|
|
37
|
+
3. **Evidence.** Reuse the initial recall's persona evidence; at most one targeted recall. Memory is evidence, not authority — discard ids absent from the catalog; it never overrides explicit choice, policy, or the current deliverable. Inspect only targeted high-signal docs (`AGENTS.md`/`CLAUDE.md`, README, relevant ADR/`.specs`), reusing context; never load docs recursively.
|
|
38
|
+
4. **Classify.** Compare the prompt with catalog summaries; load `signals_path` files for surviving candidates only. `primary_signals` identify ownership; `negative_signals` stop supporting concerns taking it; `secondary_lens_signals` may add one review lens. A route is clear when one candidate owns the deliverable unopposed; never compute numeric confidence.
|
|
39
|
+
5. **Ambiguity / no match.** Apply the `ambiguity` and `no_match` policy values. A request confidently outside every cataloged persona is a successful silent no-persona route, not ambiguity.
|
|
40
|
+
6. **Apply and announce.** One primary persona, at most one review lens; read only their prompts. State once: `Persona: <primary>. Reason: <primary deliverable>.` Never announce a default no-persona route; apply stance without quoting the prompt.
|
|
44
41
|
|
|
45
42
|
## Persona And Sub-Agents
|
|
46
43
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- A persona grants no tool access, no write scope, and no permission. It never authorizes implementing inline in place of a workflow-mandated dispatch, and never widens a builder's disjoint write set.
|
|
50
|
-
- A workflow may pass the selected persona id into a dispatch capability packet as advisory framing. Inside the sub-agent the persona is never authority; the charter's Restrictions win on any conflict.
|
|
51
|
-
- The packet carries the persona **id only**, never the persona prompt. A sub-agent works from the id and its own charter, and never opens a `personas/` file to expand it.
|
|
52
|
-
- A persona route is not a specialist consultation. Applying a persona neither substitutes for nor satisfies an agent dispatch that the workflow requires.
|
|
53
|
-
|
|
54
|
-
Four catalog entries deliberately overlap an agent charter. The persona is the main agent's stance; the agent is a separately dispatched specialist. Applying one never implies the other ran.
|
|
55
|
-
|
|
56
|
-
| Persona | Overlapping agent |
|
|
57
|
-
|---|---|
|
|
58
|
-
| `senior-mobile-engineer` | `massa-ai-mobile-specialist` |
|
|
59
|
-
| `senior-mobile-qa-automation-engineer` | `massa-ai-test-engineer` |
|
|
60
|
-
| `context-skill-harness-engineer-architect` | `massa-ai-architecture-specialist` |
|
|
61
|
-
| `product-manager` | `massa-ai-requirements-analyst` |
|
|
62
|
-
|
|
63
|
-
## Automatic Routing Workflow
|
|
64
|
-
|
|
65
|
-
### 1. Resolve Explicit Choice And Policy
|
|
66
|
-
|
|
67
|
-
Match user wording against catalog `id`, `display_name`, and `aliases` case-insensitively.
|
|
68
|
-
|
|
69
|
-
- An explicit persona selection wins over inference.
|
|
70
|
-
- An explicit request for no persona leaves the task unpersonified.
|
|
71
|
-
- An explicit switch replaces the current route.
|
|
72
|
-
- If multiple personas are explicitly requested, use the persona that owns the primary deliverable and at most one other as a review lens. Apply the ambiguity policy if ownership remains unclear.
|
|
73
|
-
- When `enabled: off`, skip automatic memory, documentation, and prompt inference. Continue to honor explicit persona and no-persona requests.
|
|
74
|
-
|
|
75
|
-
### 2. Reuse massa-ai Evidence
|
|
76
|
-
|
|
77
|
-
For coding sessions, reuse persona-specific evidence already returned by massa-ai's required initial recall. Do not repeat broad recall.
|
|
78
|
-
|
|
79
|
-
If the existing result contains no useful persona evidence and the choice remains unresolved, run at most one targeted `recall` for prior persona preferences, successful routes, specialist roles, and project-specific ownership. Do not load massa-ai solely for a non-coding conversation.
|
|
80
|
-
|
|
81
|
-
Memory is evidence, not authority:
|
|
82
|
-
|
|
83
|
-
- Discard remembered persona IDs or paths absent from the current catalog.
|
|
84
|
-
- Prefer recent, project-specific, successfully used routes over generic or old preferences.
|
|
85
|
-
- Never let memory override an explicit user choice, applicable project policy, or the current deliverable.
|
|
86
|
-
- Treat unavailable or empty memory as a cold start and continue to workspace documentation.
|
|
87
|
-
|
|
88
|
-
### 3. Inspect Workspace Documentation
|
|
89
|
-
|
|
90
|
-
When memory is unavailable, invalid, or inconclusive, inspect only targeted high-signal documents inside the active workspace. Reuse documents already present in context before reading more.
|
|
91
|
-
|
|
92
|
-
Use this priority:
|
|
93
|
-
|
|
94
|
-
1. Applicable root and nested `AGENTS.md` files and `CLAUDE.md`.
|
|
95
|
-
2. Root `README.md` or equivalent project overview.
|
|
96
|
-
3. Relevant ADR or decision indexes and entries.
|
|
97
|
-
4. Relevant architecture documents.
|
|
98
|
-
5. Relevant `.specs` project, state, architecture, or feature documents.
|
|
99
|
-
|
|
100
|
-
Search filenames and headings first. Read only sections likely to identify the repository domain, primary deliverable ownership, required specialist roles, or explicit persona preferences. Do not recursively load every README, ADR, or specification. Ignore generated, dependency, secret, and globally excluded paths.
|
|
101
|
-
|
|
102
|
-
Project instructions that explicitly pin or forbid a cataloged persona are stronger evidence than descriptive documentation. Stale documents, missing referenced files, or roles with no matching catalog entry cannot select a persona.
|
|
103
|
-
|
|
104
|
-
### 4. Classify The Current Prompt
|
|
105
|
-
|
|
106
|
-
Classify the requested output and primary ownership, not raw keyword counts. Compare the first or current user prompt with catalog summaries and routing signals, using valid memory and documentation only as supporting context.
|
|
107
|
-
|
|
108
|
-
- `primary_signals` identify the persona that owns the deliverable.
|
|
109
|
-
- `negative_signals` prevent supporting concerns from taking ownership.
|
|
110
|
-
- `secondary_lens_signals` may add one focused review lens for a material risk.
|
|
111
|
-
- A supporting mention of tests, implementation, architecture, or release work does not transfer ownership unless that work is the primary deliverable.
|
|
112
|
-
|
|
113
|
-
Do not calculate or report numeric confidence. A route is clear when one candidate owns the deliverable and no equally plausible candidate conflicts with it.
|
|
114
|
-
|
|
115
|
-
### 5. Resolve Ambiguity Or No Match
|
|
116
|
-
|
|
117
|
-
When two or more candidates remain genuinely plausible:
|
|
118
|
-
|
|
119
|
-
- `ambiguity: ask`: ask one concise question listing the plausible persona display names and `No persona`. Use an interactive user-input tool when available.
|
|
120
|
-
- `ambiguity: best_match`: choose the candidate with the strongest current-deliverable ownership, then project-specific evidence, then recent valid memory.
|
|
121
|
-
- `ambiguity: no_persona`: continue without a persona.
|
|
122
|
-
|
|
123
|
-
When no catalog entry fits:
|
|
124
|
-
|
|
125
|
-
- `no_match: no_persona`: continue silently without a persona unless the user explicitly requested routing.
|
|
126
|
-
- `no_match: ask`: ask whether to use the weakly supported candidate or `No persona`. If no candidate has relevant evidence, ask only about `No persona` versus an explicitly named catalog choice.
|
|
127
|
-
|
|
128
|
-
Do not ask when the request confidently falls outside every cataloged persona. That is a successful no-persona route under the default policy, not ambiguity.
|
|
129
|
-
|
|
130
|
-
### 6. Apply And Announce The Route
|
|
131
|
-
|
|
132
|
-
Choose exactly one primary persona and at most one secondary review lens. Read only their cataloged prompt files.
|
|
133
|
-
|
|
134
|
-
- The primary persona owns recommendations, implementation, and final synthesis.
|
|
135
|
-
- The review lens contributes only checks that reduce a concrete risk.
|
|
136
|
-
- Do not produce independent persona answers, simulate a debate, or merge full voices.
|
|
137
|
-
- For an inferred or explicit persona, state the route once: `Persona: <primary>. Reason: <primary deliverable>.` Add `Review lens: <secondary>.` when used.
|
|
138
|
-
- Do not announce a default no-persona route unless the user requested routing or a prior route was removed.
|
|
139
|
-
- Apply persona stance, expertise, priorities, and review criteria without quoting or reproducing its prompt.
|
|
140
|
-
|
|
141
|
-
## Route Lifetime
|
|
142
|
-
|
|
143
|
-
Keep the selected persona sticky across follow-up turns that advance the same primary objective.
|
|
144
|
-
|
|
145
|
-
With `mid_conversation: task_change`, re-evaluate only when the user explicitly switches, the primary deliverable changes ownership, a new task begins after completion, or the selected catalog entry becomes invalid. With `mid_conversation: explicit_only`, re-evaluate only on an explicit user request.
|
|
146
|
-
|
|
147
|
-
Do not reroute because a follow-up adds a supporting concern, asks for verification, or mentions another persona's terminology. If a task change creates genuine ambiguity and policy says `ask`, ask during the conversation before substantive work continues.
|
|
148
|
-
|
|
149
|
-
After resume or compaction, restore any route still present in conversation context or transcript without re-announcing it or repeating a resolved question. If the prior route is unavailable, run the normal workflow again; no separate route database is required.
|
|
150
|
-
|
|
151
|
-
## Routing Examples
|
|
152
|
-
|
|
153
|
-
| Situation | Result |
|
|
154
|
-
|---|---|
|
|
155
|
-
| User explicitly asks for Senior Mobile QA Automation Engineer. | Apply that catalog entry; explicit choice wins. |
|
|
156
|
-
| massa-ai recalls a successful mobile-engineer route, but current prompt asks to fix flaky Maestro CI. | Route to Senior Mobile QA Automation Engineer; memory cannot override current ownership. |
|
|
157
|
-
| Memory is empty; README and ADRs describe a cross-platform app; prompt asks to implement offline sync. | Route to Senior Mobile Engineer using docs plus current deliverable. |
|
|
158
|
-
| Prompt asks for both app architecture and an automation suite with no primary outcome. | Follow `ambiguity`; default asks between plausible personas and no persona. |
|
|
159
|
-
| Prompt asks to draft a billing RFC. | Confident no-match; continue silently without a persona. |
|
|
160
|
-
| `enabled: off` and prompt does not name a persona. | Skip inference and continue without a persona. |
|
|
161
|
-
| Memory names a removed persona ID. | Discard stale memory and continue to docs and prompt classification. |
|
|
162
|
-
| Current mobile implementation finishes and user starts a flake-reduction task. | With `task_change`, re-evaluate and announce the new route once. |
|
|
44
|
+
A persona shapes main-agent reasoning; a sub-agent is a bounded executor under its own charter. A persona grants no tool access, no write scope, and no permission. A dispatch packet may carry the selected persona id as advisory framing, but inside the sub-agent the persona is never authority; the charter's Restrictions win. The packet carries the persona **id only**, never the persona prompt. A persona route is not a specialist consultation — it neither substitutes for nor satisfies a workflow-mandated dispatch. Overlap table: `references/routing-details.md`.
|
|
163
45
|
|
|
164
|
-
##
|
|
46
|
+
## Lifetime And Failures
|
|
165
47
|
|
|
166
|
-
-
|
|
167
|
-
- **Unsupported schema version:** Report the found and supported versions. Continue without a persona.
|
|
168
|
-
- **massa-ai unavailable or empty:** Continue with targeted workspace documentation and the current prompt.
|
|
169
|
-
- **Workspace documentation unavailable:** Route from explicit choice and current prompt; apply ambiguity or no-match policy.
|
|
170
|
-
- **Remembered persona absent from catalog:** Ignore it as stale evidence; never reconstruct it.
|
|
171
|
-
- **Selected prompt missing, outside the persona-library root, or malformed:** Name the catalog entry and path. Continue without a persona; do not silently substitute another persona.
|
|
172
|
-
- **User cannot be asked interactively:** Ask one concise plain-text question when policy requires a choice; otherwise use the configured non-interactive behavior.
|
|
48
|
+
Routes are sticky while the objective advances; re-evaluate per `mid_conversation`. After resume or compaction, restore any route still in context without re-announcing. Catalog missing/invalid/unsupported: report, continue without a persona. Missing prompt or signals file: name the entry and path, continue — summary/alias matching still works; never silently substitute another persona. Detail tables: `references/routing-details.md`.
|
|
173
49
|
|
|
174
50
|
## Stop Conditions
|
|
175
51
|
|
|
176
|
-
Routing is complete when one primary persona is applied, the user selects no persona, or policy
|
|
52
|
+
Routing is complete when one primary persona is applied, the user selects no persona, or policy produces a no-persona route. Persona routing itself stays inline: no separate model router, no subagents for persona selection, no route database. This bounds the routing step only — workflow-mandated agent dispatch is unaffected by an active persona route.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Persona Routing Details
|
|
2
|
+
|
|
3
|
+
Load this reference from `SKILL.md` only when one of its load conditions fires:
|
|
4
|
+
a failure needs reporting, ambiguity needs a user question, a mid-conversation
|
|
5
|
+
reroute is in doubt, or the user requests multiple personas. Routing itself
|
|
6
|
+
runs from `SKILL.md` alone.
|
|
7
|
+
|
|
8
|
+
## Persona ↔ Sub-Agent Overlap
|
|
9
|
+
|
|
10
|
+
Four catalog entries deliberately overlap an agent charter. The persona is the
|
|
11
|
+
main agent's stance; the agent is a separately dispatched specialist. Applying
|
|
12
|
+
one never implies the other ran.
|
|
13
|
+
|
|
14
|
+
| Persona | Overlapping agent |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `senior-mobile-engineer` | `massa-ai-mobile-specialist` |
|
|
17
|
+
| `senior-mobile-qa-automation-engineer` | `massa-ai-test-engineer` |
|
|
18
|
+
| `context-skill-harness-engineer-architect` | `massa-ai-architecture-specialist` |
|
|
19
|
+
| `product-manager` | `massa-ai-requirements-analyst` |
|
|
20
|
+
|
|
21
|
+
## Multi-Persona Requests
|
|
22
|
+
|
|
23
|
+
If multiple personas are explicitly requested, the persona owning the primary
|
|
24
|
+
deliverable leads and at most one other becomes a review lens. Apply the
|
|
25
|
+
ambiguity policy if ownership remains unclear. The review lens contributes only
|
|
26
|
+
checks that reduce a concrete risk; never produce independent persona answers,
|
|
27
|
+
simulate a debate, or merge full voices.
|
|
28
|
+
|
|
29
|
+
## Ambiguity And No-Match Behavior
|
|
30
|
+
|
|
31
|
+
When two or more candidates remain genuinely plausible:
|
|
32
|
+
|
|
33
|
+
- `ambiguity: ask` — ask one concise question listing the plausible persona
|
|
34
|
+
display names and `No persona`. Use an interactive user-input tool when
|
|
35
|
+
available; otherwise ask in plain text.
|
|
36
|
+
- `ambiguity: best_match` — choose the strongest current-deliverable owner,
|
|
37
|
+
then project-specific evidence, then recent valid memory.
|
|
38
|
+
- `ambiguity: no_persona` — continue without a persona.
|
|
39
|
+
|
|
40
|
+
When no catalog entry fits:
|
|
41
|
+
|
|
42
|
+
- `no_match: no_persona` — continue silently unless the user explicitly
|
|
43
|
+
requested routing.
|
|
44
|
+
- `no_match: ask` — ask about the weakly supported candidate versus
|
|
45
|
+
`No persona`; with no supported candidate, ask only about `No persona`
|
|
46
|
+
versus an explicitly named catalog choice.
|
|
47
|
+
|
|
48
|
+
Do not ask when the request confidently falls outside every cataloged persona —
|
|
49
|
+
that is a successful no-persona route, not ambiguity.
|
|
50
|
+
|
|
51
|
+
## Route Lifetime Detail
|
|
52
|
+
|
|
53
|
+
With `mid_conversation: task_change`, re-evaluate only when the user explicitly
|
|
54
|
+
switches, the primary deliverable changes ownership, a new task begins after
|
|
55
|
+
completion, or the selected catalog entry becomes invalid. With
|
|
56
|
+
`explicit_only`, re-evaluate only on explicit request. Do not reroute because a
|
|
57
|
+
follow-up adds a supporting concern, asks for verification, or mentions another
|
|
58
|
+
persona's terminology. If a task change creates genuine ambiguity and policy
|
|
59
|
+
says `ask`, ask before substantive work continues. After resume or compaction,
|
|
60
|
+
restore any route still present in conversation context without re-announcing
|
|
61
|
+
it or repeating a resolved question; if unavailable, run the normal workflow
|
|
62
|
+
again — no separate route database exists.
|
|
63
|
+
|
|
64
|
+
## Routing Examples
|
|
65
|
+
|
|
66
|
+
| Situation | Result |
|
|
67
|
+
|---|---|
|
|
68
|
+
| User explicitly asks for Senior Mobile QA Automation Engineer. | Apply that entry; explicit choice wins. |
|
|
69
|
+
| Project `AGENTS.md` pins a valid catalog id. | Pin fast path: read only that prompt; no recall, docs, signals, or classification. |
|
|
70
|
+
| Pin names an id absent from the catalog. | One-line invalid-pin report; continue with the normal workflow. |
|
|
71
|
+
| Memory recalls a successful route, current prompt asks to fix flaky Maestro CI. | Route to Senior Mobile QA Automation Engineer; memory cannot override current ownership. |
|
|
72
|
+
| Memory empty; docs describe a cross-platform app; prompt asks to implement offline sync. | Route to Senior Mobile Engineer from docs plus current deliverable. |
|
|
73
|
+
| Prompt asks for both app architecture and an automation suite, no primary outcome. | Follow `ambiguity`; default asks between plausible personas and no persona. |
|
|
74
|
+
| Prompt asks to draft a billing RFC. | Confident no-match; continue silently without a persona. |
|
|
75
|
+
| `enabled: off` and prompt names no persona. | Skip inference; continue without a persona. |
|
|
76
|
+
| Memory names a removed persona id. | Discard stale memory; continue to docs and classification. |
|
|
77
|
+
| Mobile implementation finishes; user starts a flake-reduction task. | With `task_change`, re-evaluate and announce the new route once. |
|
|
78
|
+
|
|
79
|
+
## Failure Handling Table
|
|
80
|
+
|
|
81
|
+
- **Catalog missing or invalid:** report `Persona routing unavailable:
|
|
82
|
+
<reason>.` Continue without a persona.
|
|
83
|
+
- **Unsupported schema version:** report found and supported versions.
|
|
84
|
+
Continue without a persona.
|
|
85
|
+
- **massa-ai unavailable or empty:** continue with targeted workspace
|
|
86
|
+
documentation and the current prompt; skip route-memory reads and writes.
|
|
87
|
+
- **Workspace documentation unavailable:** route from explicit choice, pin,
|
|
88
|
+
and current prompt; apply the ambiguity or no-match policy.
|
|
89
|
+
- **Remembered persona absent from catalog:** ignore it as stale evidence;
|
|
90
|
+
never reconstruct it.
|
|
91
|
+
- **Selected prompt missing, outside the persona-library root, or malformed:**
|
|
92
|
+
name the catalog entry and path. Continue without a persona; never silently
|
|
93
|
+
substitute another persona.
|
|
94
|
+
- **Signals file missing during classification:** report the entry and path;
|
|
95
|
+
the candidate stays matchable by summary and aliases.
|
|
96
|
+
- **User cannot be asked interactively:** ask one concise plain-text question
|
|
97
|
+
when policy requires a choice; otherwise use the configured non-interactive
|
|
98
|
+
behavior.
|