owflow 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/dist/agents/implementation-planner.md +1 -1
- package/dist/agents/information-gatherer.md +691 -691
- package/dist/agents/research-planner.md +450 -450
- package/dist/agents/research-synthesizer.md +403 -403
- package/dist/agents/solution-brainstormer.md +257 -257
- package/dist/agents/solution-designer.md +372 -372
- package/dist/agents/specification-creator.md +1 -1
- package/dist/commands/work.md +9 -9
- package/dist/configuration/commands-config.js +57 -0
- package/dist/skills/codebase-analyzer/SKILL.md +4 -4
- package/dist/skills/dev-verify/SKILL.md +3 -10
- package/dist/skills/diagrams-mermaid/SKILL.md +1 -0
- package/dist/skills/diagrams-mermaid/references/reference.md +4 -4
- package/dist/skills/flow-init/SKILL.md +1 -1
- package/dist/skills/goal-migration/SKILL.md +114 -0
- package/dist/skills/goal-research/SKILL.md +118 -118
- package/dist/skills/html-renderer/SKILL.md +1 -0
- package/dist/skills/migration/SKILL.md +157 -295
- package/dist/skills/migration-analyze/SKILL.md +126 -0
- package/dist/skills/migration-finalize/SKILL.md +161 -0
- package/dist/skills/migration-fix/SKILL.md +155 -0
- package/dist/skills/migration-implement/SKILL.md +131 -0
- package/dist/skills/migration-plan/SKILL.md +131 -0
- package/dist/skills/migration-spec/SKILL.md +135 -0
- package/dist/skills/{migration → migration-spec}/references/migration-strategies.md +9 -9
- package/dist/skills/migration-target/SKILL.md +134 -0
- package/dist/skills/{migration → migration-target}/references/migration-types.md +22 -23
- package/dist/skills/migration-verify/SKILL.md +184 -0
- package/dist/skills/orchestrator-framework/references/command-namespacing.md +1 -1
- package/dist/skills/orchestrator-framework/references/dispatcher-handoff.md +1 -1
- package/dist/skills/orchestrator-framework/references/fix-loop-contract.md +65 -0
- package/dist/skills/orchestrator-framework/references/gate-contract.md +117 -112
- package/dist/skills/orchestrator-framework/references/orchestrator-patterns.md +4 -1
- package/dist/skills/performance/SKILL.md +1 -0
- package/dist/skills/research/SKILL.md +249 -249
- package/dist/skills/research-brainstorm/SKILL.md +120 -120
- package/dist/skills/research-converge/SKILL.md +130 -130
- package/dist/skills/research-design/SKILL.md +146 -146
- package/dist/skills/research-finalize/SKILL.md +125 -125
- package/dist/skills/research-fork/SKILL.md +190 -190
- package/dist/skills/research-gather/SKILL.md +133 -133
- package/dist/skills/research-plan/SKILL.md +141 -141
- package/dist/skills/research-quick/SKILL.md +139 -139
- package/dist/skills/research-synthesize/SKILL.md +127 -127
- package/dist/skills/rule-reviewer/SKILL.md +1 -1
- package/dist/skills/standards-discover/SKILL.md +1 -0
- package/dist/templates/orchestrator-state-migration.yml +49 -9
- package/package.json +1 -1
- package/dist/commands/agents-md-generator.md +0 -36
- package/dist/commands/dev-analyze.md +0 -33
- package/dist/commands/dev-bugfix.md +0 -37
- package/dist/commands/dev-finalize.md +0 -33
- package/dist/commands/dev-implement.md +0 -34
- package/dist/commands/dev-plan.md +0 -37
- package/dist/commands/dev-spec.md +0 -37
- package/dist/commands/dev-tdd-red.md +0 -33
- package/dist/commands/dev-verify.md +0 -33
- package/dist/commands/development.md +0 -36
- package/dist/commands/diagrams-mermaid.md +0 -36
- package/dist/commands/flow-init.md +0 -36
- package/dist/commands/goal-development.md +0 -32
- package/dist/commands/goal-research.md +0 -33
- package/dist/commands/html-renderer.md +0 -36
- package/dist/commands/migration.md +0 -36
- package/dist/commands/performance.md +0 -36
- package/dist/commands/research-brainstorm.md +0 -33
- package/dist/commands/research-converge.md +0 -33
- package/dist/commands/research-design.md +0 -33
- package/dist/commands/research-finalize.md +0 -33
- package/dist/commands/research-fork.md +0 -40
- package/dist/commands/research-gather.md +0 -33
- package/dist/commands/research-plan.md +0 -37
- package/dist/commands/research-quick.md +0 -37
- package/dist/commands/research-synthesize.md +0 -33
- package/dist/commands/research.md +0 -55
- package/dist/commands/rule-reviewer.md +0 -38
- package/dist/commands/standards-discover.md +0 -36
- package/dist/commands/standards-update.md +0 -36
|
@@ -1,249 +1,249 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: owflow:research
|
|
3
|
-
description: Research workflow dispatcher. Initializes/resumes research tasks, derives the next step from state, and hands off to the matching /owflow:research-* subskill. Handles comprehensive research and analysis — technical, requirements, literature, and mixed research types with adaptive methodology, multi-source gathering, pattern synthesis, and evidence-based artifact outputs (findings documentation). Supports standalone research tasks and embedded research phases feeding development workflows. Use /owflow:goal-research to run all phases in one session.
|
|
4
|
-
argument-hint: "[task description | task-path] [--from=<slug>] [--type=<type>]"
|
|
5
|
-
user-invocable: true
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Research Dispatcher
|
|
9
|
-
|
|
10
|
-
Entry point for research tasks in **assisted mode**: initialize (or resume) the task, derive the next pending step from `orchestrator-state.yml`, print the matching subskill command, and STOP. Each `/owflow:research-*` subskill runs its steps with fresh context — the explicit invocation IS the step gate.
|
|
11
|
-
|
|
12
|
-
Research state uses descriptive step slugs in `completed_phases` / `failed_phases` / `auto_fix_attempts` (NOT phase numbers): `brief-written`, `plan-created`, `findings-gathered`, `synthesis-complete`, `alternatives-generated`, `approaches-chosen`, `design-generated`, `research-completed`. The routing table below maps slugs to subskills.
|
|
13
|
-
|
|
14
|
-
For the all-in-one loop with in-session `question` gates, use `/owflow:goal-research`.
|
|
15
|
-
|
|
16
|
-
Gates follow the shared contract in the [Gate Contract](../orchestrator-framework/references/gate-contract.md), with the [dispatcher exception](../orchestrator-framework/references/gate-contract.md).
|
|
17
|
-
|
|
18
|
-
## Input / Output Artifacts
|
|
19
|
-
|
|
20
|
-
| Artifact | Normal mode | Quick mode |
|
|
21
|
-
| ---------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
|
|
22
|
-
| Argument (question / path) | research question (new task) or task path/identifier (resume) | task path/identifier only — quick runs are never STARTED here; an interrupted quick task resumes at full fidelity |
|
|
23
|
-
| `orchestrator-state.yml` | read on resume (artifact validation of `completed_phases`) | read on resume — honors `entry_point: "research-quick"` and quick-lane artifacts |
|
|
24
|
-
| Task directory + `orchestrator-state.yml` init | written (Step 3, new task) — `entry_point: "research"` | n/a — quick bootstrap is owned by `/owflow:research-quick` |
|
|
25
|
-
|
|
26
|
-
The dispatcher writes nothing else — every task artifact is produced by the subskills (see [Task Structure](#task-structure)).
|
|
27
|
-
|
|
28
|
-
## Entry Gate
|
|
29
|
-
|
|
30
|
-
**BEFORE deriving the handoff, complete these steps:**
|
|
31
|
-
|
|
32
|
-
### Step 1: Load Framework Patterns
|
|
33
|
-
|
|
34
|
-
**Read the framework reference files NOW using the Read tool:**
|
|
35
|
-
|
|
36
|
-
1. The [Dispatcher & Handoff Pattern](../orchestrator-framework/references/dispatcher-handoff.md) governs this skill.
|
|
37
|
-
2. The [Delegation Rules](../orchestrator-framework/references/delegation-rules.md) bound what subskills delegate.
|
|
38
|
-
3. The [Orchestrator Patterns](../orchestrator-framework/references/orchestrator-patterns.md) define state schema, initialization, and context passing.
|
|
39
|
-
|
|
40
|
-
### Step 2: Resolve the Argument
|
|
41
|
-
|
|
42
|
-
**If the argument is a task path or identifier** (a directory, or a directory name under `.owflow/tasks/research/`) → **resume mode**:
|
|
43
|
-
|
|
44
|
-
1. Read `orchestrator-state.yml`; validate expected artifacts for `completed_phases` (remove entries whose artifacts are missing)
|
|
45
|
-
2. Find resume point: first step slug NOT in `completed_phases`; `--from=<slug>` overrides (validate its prerequisites exist, else use `question`)
|
|
46
|
-
3. Missing state file → print: `No research task found at <path>. Run /owflow:research <question> to start from scratch.` and STOP
|
|
47
|
-
|
|
48
|
-
**If the argument is a research question description** (any other free text) → new task.
|
|
49
|
-
|
|
50
|
-
**If nothing is provided** → ask via `question`: "What is your research question?" (free-form answer), then WAIT. Never guess or auto-pick a task.
|
|
51
|
-
|
|
52
|
-
### Step 3: Initialize (new task)
|
|
53
|
-
|
|
54
|
-
**New task** (research question argument):
|
|
55
|
-
|
|
56
|
-
1. **Create Task Directory**: `.owflow/tasks/research/YYYY-MM-DD-task-name/` (3-5 kebab-case words from the question)
|
|
57
|
-
2. **Initialize State**: create `orchestrator-state.yml` from the research template — `task.title` / `task.description` from the question, `task.status: in_progress`, `orchestrator.task_path`, `orchestrator.entry_point: "research"` (template/bootstrap mechanic)
|
|
58
|
-
- **CRITICAL**: use the `verify_template` tool immediately after creation to check YAML validity against `orchestrator-state-research.yml`.
|
|
59
|
-
3. **Create Task Items**: use `TaskCreate` for the research steps (one item per subskill handoff), then set the execution order with `TaskUpdate addBlockedBy` (plan → gather → synthesize → optional chain (user choice) → finalize). On resume, refresh the already-evidenced items instead of re-creating them.
|
|
60
|
-
4. **Command flags**: `--type=TYPE` → `research_context.research_type`. Subskills read it from there.
|
|
61
|
-
|
|
62
|
-
**Output**:
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
🚀 Research Dispatcher
|
|
66
|
-
|
|
67
|
-
Task: [research question]
|
|
68
|
-
Directory: [task-path]
|
|
69
|
-
Next step: [step name]
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## When to Use
|
|
75
|
-
|
|
76
|
-
Use when:
|
|
77
|
-
|
|
78
|
-
- Need comprehensive research on a topic
|
|
79
|
-
- Exploring codebase patterns or architecture
|
|
80
|
-
- Gathering requirements or best practices
|
|
81
|
-
- Want systematic evidence-based answers
|
|
82
|
-
- Research will feed into development workflows
|
|
83
|
-
|
|
84
|
-
**DO NOT use for**: Development tasks, bug fixes, performance optimization.
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Core Principles
|
|
89
|
-
|
|
90
|
-
1. **Evidence-Based**: Every finding must have source citation
|
|
91
|
-
2. **Systematic**: Follow structured methodology for consistent results
|
|
92
|
-
3. **Multi-Source**: Gather from codebase, docs, config, external sources
|
|
93
|
-
4. **Synthesized**: Cross-reference findings, identify patterns
|
|
94
|
-
5. **Actionable**: Produce outputs that enable next steps
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## Routing Table (completed_phases → next subskill)
|
|
99
|
-
|
|
100
|
-
Derive the FIRST step slug not in `completed_phases`, then print the matching command:
|
|
101
|
-
|
|
102
|
-
| Next step (slug) | Condition (from state) | Handoff command | Produces |
|
|
103
|
-
| ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------- |
|
|
104
|
-
| Brief + plan (`brief-written`, `plan-created`) | Always (new task or partial foundation) | `/owflow:research-plan <task-path>` | `planning/research-brief.md`, `research-plan.md`, `sources.md` |
|
|
105
|
-
| Gather (`findings-gathered`) | `plan-created` completed (gather parses `## Gathering Strategy`, or falls back to 4 default categories) | `/owflow:research-gather <task-path>` | `analysis/findings/*.md` |
|
|
106
|
-
| Synthesize (`synthesis-complete`) | `findings-gathered` completed | `/owflow:research-synthesize <task-path>` | `analysis/synthesis.md`, `outputs/research-report.md` |
|
|
107
|
-
| Optional chain (user choice) | `synthesis-complete` completed — ask via `question` whether to brainstorm, design, or finalize; hand off to the chosen subskill | `/owflow:research-brainstorm` / `/owflow:research-design` / `/owflow:research-finalize <task-path>` | user's chain decision |
|
|
108
|
-
| Brainstorm (`alternatives-generated`) | User chose brainstorming (invoking the skill IS the decision) | `/owflow:research-brainstorm <task-path>` | `outputs/solution-exploration.md` |
|
|
109
|
-
| Converge (`approaches-chosen`) | `alternatives-generated` completed (brainstorm ran) | `/owflow:research-converge <task-path>` | per-area `chosen_approach` in state (`phase_summaries.converge`) |
|
|
110
|
-
| Design (`design-generated`) | User chose design — after `approaches-chosen`, or as the design-only branch (seeded from the research report) | `/owflow:research-design <task-path>` | `outputs/high-level-design.md`, `outputs/decision-log.md` |
|
|
111
|
-
| Finalization (`research-completed`) | Foundation complete + optional chain settled (every step the user chose to run is recorded) | `/owflow:research-finalize <task-path>` | task completed (`task.status: completed`) |
|
|
112
|
-
|
|
113
|
-
The optional chain is the user's choice — there is no enablement flag in state and no separate decision step. When the user invokes `research-brainstorm` or `research-design`, that invocation IS the decision to run it; when they skip to `research-finalize`, the chain is settled as skipped. After `synthesis-complete` the dispatcher asks which way to go (brainstorm → converge → design, design-only, or straight to finalize).
|
|
114
|
-
|
|
115
|
-
`research-completed` already in `completed_phases` → the task is TERMINAL: no handoff.
|
|
116
|
-
|
|
117
|
-
This dispatcher never starts or forwards quick runs. An interrupted quick task (`entry_point: "research-quick"`, `synthesis-complete` not yet recorded) resumes at full fidelity for the missing pieces via the matching subskills. To finish that pass condensed, the user runs `/owflow:research-quick <task-path>` directly.
|
|
118
|
-
|
|
119
|
-
Forking (utility, not a routing row): `/owflow:research-fork <task-path> ["<what this fork should explore>"] [--from=<slug>] [--name="..."]` copies a task with at least one completed step to a new task diverging at a chosen completed step — a bare path is enough, the skill asks for the intent, fork point, and name with suggestions drawn from that research; the directory is copied verbatim and the copied state is trimmed to continue from the fork point onwards; the source stays untouched. The fork is a plain research task from then on, routable by this dispatcher like any other.
|
|
120
|
-
|
|
121
|
-
References moved into their owning subskills (read there, not here): `research-methodologies.md` lives in `research-plan/references/`, `brainstorming-techniques.md` in `research-brainstorm/references/`, `design-techniques.md` in `research-design/references/`.
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Exit Gate (adapted for dispatch mode)
|
|
126
|
-
|
|
127
|
-
After deriving the handoff, present the results box, ask how to proceed, then hand off accordingly (see the [dispatcher exception](../orchestrator-framework/references/gate-contract.md)). Never auto-invoke the subskill.
|
|
128
|
-
|
|
129
|
-
### Results box
|
|
130
|
-
|
|
131
|
-
```markdown
|
|
132
|
-
## ✅ RESEARCH TASK READY — <task name>
|
|
133
|
-
|
|
134
|
-
**Task** — [research question]
|
|
135
|
-
**Directory** — `<task-path>`
|
|
136
|
-
**Next step** — [step name]
|
|
137
|
-
[Resume note: completed steps / fresh task]
|
|
138
|
-
|
|
139
|
-
**Next ▸** `/owflow:research-<subskill> <task-path>`
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Acceptance question
|
|
143
|
-
|
|
144
|
-
Use `question` — "Task ready. How would you like to proceed?" with options:
|
|
145
|
-
|
|
146
|
-
- **Hand off to /owflow:research-<subskill>** — the user invokes the suggested command (dispatcher copies it to chat for convenience). Execution starts in a fresh context.
|
|
147
|
-
- **Switch to autonomous mode** — illustrate with `/owflow:goal-research <task-path>` to run remaining steps in one session with gates.
|
|
148
|
-
- **Adjust** — task set-up is wrong (wrong flags, wrong question, wrong task); re-run the affected initialization step, re-present the results box.
|
|
149
|
-
- **Stop here** — print the resume command (`/owflow:research <task-path>`) and end.
|
|
150
|
-
|
|
151
|
-
### Handoff message
|
|
152
|
-
|
|
153
|
-
On Accept (hand off choice), print, then STOP:
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
✓ Research task ready at <task-path>
|
|
157
|
-
|
|
158
|
-
Next step:
|
|
159
|
-
→ /owflow:research-<subskill> <task-path>
|
|
160
|
-
|
|
161
|
-
Other options:
|
|
162
|
-
/owflow:goal-research <task-path> — run remaining steps in one loop
|
|
163
|
-
/owflow:research --from=<slug> <task-path> — jump to a specific step
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Task Structure
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
.owflow/tasks/research/YYYY-MM-DD-research-name/
|
|
172
|
-
├── orchestrator-state.yml
|
|
173
|
-
├── planning/
|
|
174
|
-
│ ├── research-brief.md # research-plan (brief step)
|
|
175
|
-
│ ├── research-plan.md # research-plan (plan step)
|
|
176
|
-
│ └── sources.md # research-plan (plan step)
|
|
177
|
-
├── analysis/
|
|
178
|
-
│ ├── findings/
|
|
179
|
-
│ │ ├── codebase-*.md # research-gather (per category)
|
|
180
|
-
│ │ ├── docs-*.md # research-gather
|
|
181
|
-
│ │ ├── config-*.md # research-gather
|
|
182
|
-
│ │ ├── external-*.md # research-gather
|
|
183
|
-
│ │ └── [custom-category]-*.md # research-gather (dynamic categories)
|
|
184
|
-
│ └── synthesis.md # research-synthesize (reasoning log)
|
|
185
|
-
├── outputs/
|
|
186
|
-
│ ├── research-report.md # research-synthesize (main deliverable)
|
|
187
|
-
│ ├── solution-exploration.md # research-brainstorm (conditional)
|
|
188
|
-
│ ├── high-level-design.md # research-design (conditional)
|
|
189
|
-
│ └── decision-log.md # research-design (conditional)
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## Research Types
|
|
195
|
-
|
|
196
|
-
| Type | Keywords | Focus | Typical Outputs |
|
|
197
|
-
| ---------------- | ---------------------------------------- | --------------------------- | --------------------------------- |
|
|
198
|
-
| **Technical** | "how does", "where is", "implementation" | Codebase analysis | Knowledge base, architecture docs |
|
|
199
|
-
| **Requirements** | "what are requirements", "user needs" | User/business needs | Specifications, requirements doc |
|
|
200
|
-
| **Literature** | "best practices", "industry standards" | External research | Recommendations, comparisons |
|
|
201
|
-
| **Mixed** | Multiple keywords, broad questions | Comprehensive investigation | All output types |
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
## Integration with Other Workflows
|
|
206
|
-
|
|
207
|
-
### As Standalone Research
|
|
208
|
-
|
|
209
|
-
**Command**: `/owflow:research [research-question | task-path]` — the dispatcher hands off step by step; `/owflow:goal-research <task-path>` runs the complete workflow in one session with interactive gates.
|
|
210
|
-
|
|
211
|
-
### As Embedded Research Phase (documentation only — no wiring)
|
|
212
|
-
|
|
213
|
-
> This is documentation for parent-orchestrator authors, NOT an execution path of this dispatcher: nothing here auto-invokes a parent, and no research subskill chains into development or migration steps.
|
|
214
|
-
|
|
215
|
-
In the split family, a parent orchestrator (development, migration) that needs research sequences the research subskills directly via the Skill tool — plan → gather → synthesize → the optional chain as chosen by the user — and SKIPS `research-finalize`-style completion: the parent handles next steps and keeps control of the flow. Design artifacts feed the parent's specification phase; the research report is saved in the parent task's `analysis/research/` context per the parent's own state setup.
|
|
216
|
-
|
|
217
|
-
**Handoff fields the parent reads**: refer to `research_outputs.*` in the template [src/templates/orchestrator-state-research.yml](../../templates/orchestrator-state-research.yml).
|
|
218
|
-
|
|
219
|
-
Full autonomous research (research as its own goal, every gate honored) = `/owflow:goal-research`. A `--no-exit` flag for embedded runs is deferred — not part of this design.
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
## Auto-Recovery
|
|
224
|
-
|
|
225
|
-
Retries are owned by each subskill (each `/owflow:research-*` SKILL.md carries its own max attempts and strategy).
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
|
|
229
|
-
## Command Flags
|
|
230
|
-
|
|
231
|
-
| Flag | Effect |
|
|
232
|
-
| --------------------------------- | ------------------------------------------------------------------------------------ |
|
|
233
|
-
| `--from=<slug>` | Hand off (resume mode) from a specific step slug |
|
|
234
|
-
| `--type=<type>` | Force the research type classification ("technical \| requirements \| literature \| mixed") |
|
|
235
|
-
|
|
236
|
-
There is deliberately NO quick entry on this dispatcher — condensed quick starts go through `/owflow:research-quick`, whose artifacts this routing table honors on every row.
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
## Command Integration
|
|
241
|
-
|
|
242
|
-
Invoked via:
|
|
243
|
-
|
|
244
|
-
- `/owflow:research [question] [--type=TYPE]` (new)
|
|
245
|
-
- `/owflow:research [task-path] [--from=<slug>]` (resume)
|
|
246
|
-
|
|
247
|
-
Alternative: `/owflow:goal-research <task-path>` — same task lifecycle, all subskills invoked in one session with `question` gates.
|
|
248
|
-
|
|
249
|
-
Task directory: `.owflow/tasks/research/YYYY-MM-DD-task-name/`
|
|
1
|
+
---
|
|
2
|
+
name: owflow:research
|
|
3
|
+
description: Research workflow dispatcher. Initializes/resumes research tasks, derives the next step from state, and hands off to the matching /owflow:research-* subskill. Handles comprehensive research and analysis — technical, requirements, literature, and mixed research types with adaptive methodology, multi-source gathering, pattern synthesis, and evidence-based artifact outputs (findings documentation). Supports standalone research tasks and embedded research phases feeding development workflows. Use /owflow:goal-research to run all phases in one session.
|
|
4
|
+
argument-hint: "[task description | task-path] [--from=<slug>] [--type=<type>]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Research Dispatcher
|
|
9
|
+
|
|
10
|
+
Entry point for research tasks in **assisted mode**: initialize (or resume) the task, derive the next pending step from `orchestrator-state.yml`, print the matching subskill command, and STOP. Each `/owflow:research-*` subskill runs its steps with fresh context — the explicit invocation IS the step gate.
|
|
11
|
+
|
|
12
|
+
Research state uses descriptive step slugs in `completed_phases` / `failed_phases` / `auto_fix_attempts` (NOT phase numbers): `brief-written`, `plan-created`, `findings-gathered`, `synthesis-complete`, `alternatives-generated`, `approaches-chosen`, `design-generated`, `research-completed`. The routing table below maps slugs to subskills.
|
|
13
|
+
|
|
14
|
+
For the all-in-one loop with in-session `question` gates, use `/owflow:goal-research`.
|
|
15
|
+
|
|
16
|
+
Gates follow the shared contract in the [Gate Contract](../orchestrator-framework/references/gate-contract.md), with the [dispatcher exception](../orchestrator-framework/references/gate-contract.md).
|
|
17
|
+
|
|
18
|
+
## Input / Output Artifacts
|
|
19
|
+
|
|
20
|
+
| Artifact | Normal mode | Quick mode |
|
|
21
|
+
| ---------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
|
|
22
|
+
| Argument (question / path) | research question (new task) or task path/identifier (resume) | task path/identifier only — quick runs are never STARTED here; an interrupted quick task resumes at full fidelity |
|
|
23
|
+
| `orchestrator-state.yml` | read on resume (artifact validation of `completed_phases`) | read on resume — honors `entry_point: "research-quick"` and quick-lane artifacts |
|
|
24
|
+
| Task directory + `orchestrator-state.yml` init | written (Step 3, new task) — `entry_point: "research"` | n/a — quick bootstrap is owned by `/owflow:research-quick` |
|
|
25
|
+
|
|
26
|
+
The dispatcher writes nothing else — every task artifact is produced by the subskills (see [Task Structure](#task-structure)).
|
|
27
|
+
|
|
28
|
+
## Entry Gate
|
|
29
|
+
|
|
30
|
+
**BEFORE deriving the handoff, complete these steps:**
|
|
31
|
+
|
|
32
|
+
### Step 1: Load Framework Patterns
|
|
33
|
+
|
|
34
|
+
**Read the framework reference files NOW using the Read tool:**
|
|
35
|
+
|
|
36
|
+
1. The [Dispatcher & Handoff Pattern](../orchestrator-framework/references/dispatcher-handoff.md) governs this skill.
|
|
37
|
+
2. The [Delegation Rules](../orchestrator-framework/references/delegation-rules.md) bound what subskills delegate.
|
|
38
|
+
3. The [Orchestrator Patterns](../orchestrator-framework/references/orchestrator-patterns.md) define state schema, initialization, and context passing.
|
|
39
|
+
|
|
40
|
+
### Step 2: Resolve the Argument
|
|
41
|
+
|
|
42
|
+
**If the argument is a task path or identifier** (a directory, or a directory name under `.owflow/tasks/research/`) → **resume mode**:
|
|
43
|
+
|
|
44
|
+
1. Read `orchestrator-state.yml`; validate expected artifacts for `completed_phases` (remove entries whose artifacts are missing)
|
|
45
|
+
2. Find resume point: first step slug NOT in `completed_phases`; `--from=<slug>` overrides (validate its prerequisites exist, else use `question`)
|
|
46
|
+
3. Missing state file → print: `No research task found at <path>. Run /owflow:research <question> to start from scratch.` and STOP
|
|
47
|
+
|
|
48
|
+
**If the argument is a research question description** (any other free text) → new task.
|
|
49
|
+
|
|
50
|
+
**If nothing is provided** → ask via `question`: "What is your research question?" (free-form answer), then WAIT. Never guess or auto-pick a task.
|
|
51
|
+
|
|
52
|
+
### Step 3: Initialize (new task)
|
|
53
|
+
|
|
54
|
+
**New task** (research question argument):
|
|
55
|
+
|
|
56
|
+
1. **Create Task Directory**: `.owflow/tasks/research/YYYY-MM-DD-task-name/` (3-5 kebab-case words from the question)
|
|
57
|
+
2. **Initialize State**: create `orchestrator-state.yml` from the research template — `task.title` / `task.description` from the question, `task.status: in_progress`, `orchestrator.task_path`, `orchestrator.entry_point: "research"` (template/bootstrap mechanic)
|
|
58
|
+
- **CRITICAL**: use the `verify_template` tool immediately after creation to check YAML validity against `orchestrator-state-research.yml`.
|
|
59
|
+
3. **Create Task Items**: use `TaskCreate` for the research steps (one item per subskill handoff), then set the execution order with `TaskUpdate addBlockedBy` (plan → gather → synthesize → optional chain (user choice) → finalize). On resume, refresh the already-evidenced items instead of re-creating them.
|
|
60
|
+
4. **Command flags**: `--type=TYPE` → `research_context.research_type`. Subskills read it from there.
|
|
61
|
+
|
|
62
|
+
**Output**:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
🚀 Research Dispatcher
|
|
66
|
+
|
|
67
|
+
Task: [research question]
|
|
68
|
+
Directory: [task-path]
|
|
69
|
+
Next step: [step name]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## When to Use
|
|
75
|
+
|
|
76
|
+
Use when:
|
|
77
|
+
|
|
78
|
+
- Need comprehensive research on a topic
|
|
79
|
+
- Exploring codebase patterns or architecture
|
|
80
|
+
- Gathering requirements or best practices
|
|
81
|
+
- Want systematic evidence-based answers
|
|
82
|
+
- Research will feed into development workflows
|
|
83
|
+
|
|
84
|
+
**DO NOT use for**: Development tasks, bug fixes, performance optimization.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Core Principles
|
|
89
|
+
|
|
90
|
+
1. **Evidence-Based**: Every finding must have source citation
|
|
91
|
+
2. **Systematic**: Follow structured methodology for consistent results
|
|
92
|
+
3. **Multi-Source**: Gather from codebase, docs, config, external sources
|
|
93
|
+
4. **Synthesized**: Cross-reference findings, identify patterns
|
|
94
|
+
5. **Actionable**: Produce outputs that enable next steps
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Routing Table (completed_phases → next subskill)
|
|
99
|
+
|
|
100
|
+
Derive the FIRST step slug not in `completed_phases`, then print the matching command:
|
|
101
|
+
|
|
102
|
+
| Next step (slug) | Condition (from state) | Handoff command | Produces |
|
|
103
|
+
| ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------- |
|
|
104
|
+
| Brief + plan (`brief-written`, `plan-created`) | Always (new task or partial foundation) | `/owflow:research-plan <task-path>` | `planning/research-brief.md`, `research-plan.md`, `sources.md` |
|
|
105
|
+
| Gather (`findings-gathered`) | `plan-created` completed (gather parses `## Gathering Strategy`, or falls back to 4 default categories) | `/owflow:research-gather <task-path>` | `analysis/findings/*.md` |
|
|
106
|
+
| Synthesize (`synthesis-complete`) | `findings-gathered` completed | `/owflow:research-synthesize <task-path>` | `analysis/synthesis.md`, `outputs/research-report.md` |
|
|
107
|
+
| Optional chain (user choice) | `synthesis-complete` completed — ask via `question` whether to brainstorm, design, or finalize; hand off to the chosen subskill | `/owflow:research-brainstorm` / `/owflow:research-design` / `/owflow:research-finalize <task-path>` | user's chain decision |
|
|
108
|
+
| Brainstorm (`alternatives-generated`) | User chose brainstorming (invoking the skill IS the decision) | `/owflow:research-brainstorm <task-path>` | `outputs/solution-exploration.md` |
|
|
109
|
+
| Converge (`approaches-chosen`) | `alternatives-generated` completed (brainstorm ran) | `/owflow:research-converge <task-path>` | per-area `chosen_approach` in state (`phase_summaries.converge`) |
|
|
110
|
+
| Design (`design-generated`) | User chose design — after `approaches-chosen`, or as the design-only branch (seeded from the research report) | `/owflow:research-design <task-path>` | `outputs/high-level-design.md`, `outputs/decision-log.md` |
|
|
111
|
+
| Finalization (`research-completed`) | Foundation complete + optional chain settled (every step the user chose to run is recorded) | `/owflow:research-finalize <task-path>` | task completed (`task.status: completed`) |
|
|
112
|
+
|
|
113
|
+
The optional chain is the user's choice — there is no enablement flag in state and no separate decision step. When the user invokes `research-brainstorm` or `research-design`, that invocation IS the decision to run it; when they skip to `research-finalize`, the chain is settled as skipped. After `synthesis-complete` the dispatcher asks which way to go (brainstorm → converge → design, design-only, or straight to finalize).
|
|
114
|
+
|
|
115
|
+
`research-completed` already in `completed_phases` → the task is TERMINAL: no handoff.
|
|
116
|
+
|
|
117
|
+
This dispatcher never starts or forwards quick runs. An interrupted quick task (`entry_point: "research-quick"`, `synthesis-complete` not yet recorded) resumes at full fidelity for the missing pieces via the matching subskills. To finish that pass condensed, the user runs `/owflow:research-quick <task-path>` directly.
|
|
118
|
+
|
|
119
|
+
Forking (utility, not a routing row): `/owflow:research-fork <task-path> ["<what this fork should explore>"] [--from=<slug>] [--name="..."]` copies a task with at least one completed step to a new task diverging at a chosen completed step — a bare path is enough, the skill asks for the intent, fork point, and name with suggestions drawn from that research; the directory is copied verbatim and the copied state is trimmed to continue from the fork point onwards; the source stays untouched. The fork is a plain research task from then on, routable by this dispatcher like any other.
|
|
120
|
+
|
|
121
|
+
References moved into their owning subskills (read there, not here): `research-methodologies.md` lives in `research-plan/references/`, `brainstorming-techniques.md` in `research-brainstorm/references/`, `design-techniques.md` in `research-design/references/`.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Exit Gate (adapted for dispatch mode)
|
|
126
|
+
|
|
127
|
+
After deriving the handoff, present the results box, ask how to proceed, then hand off accordingly (see the [dispatcher exception](../orchestrator-framework/references/gate-contract.md)). Never auto-invoke the subskill.
|
|
128
|
+
|
|
129
|
+
### Results box
|
|
130
|
+
|
|
131
|
+
```markdown
|
|
132
|
+
## ✅ RESEARCH TASK READY — <task name>
|
|
133
|
+
|
|
134
|
+
**Task** — [research question]
|
|
135
|
+
**Directory** — `<task-path>`
|
|
136
|
+
**Next step** — [step name]
|
|
137
|
+
[Resume note: completed steps / fresh task]
|
|
138
|
+
|
|
139
|
+
**Next ▸** `/owflow:research-<subskill> <task-path>`
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Acceptance question
|
|
143
|
+
|
|
144
|
+
Use `question` — "Task ready. How would you like to proceed?" with options:
|
|
145
|
+
|
|
146
|
+
- **Hand off to /owflow:research-<subskill>** — the user invokes the suggested command (dispatcher copies it to chat for convenience). Execution starts in a fresh context.
|
|
147
|
+
- **Switch to autonomous mode** — illustrate with `/owflow:goal-research <task-path>` to run remaining steps in one session with gates.
|
|
148
|
+
- **Adjust** — task set-up is wrong (wrong flags, wrong question, wrong task); re-run the affected initialization step, re-present the results box.
|
|
149
|
+
- **Stop here** — print the resume command (`/owflow:research <task-path>`) and end.
|
|
150
|
+
|
|
151
|
+
### Handoff message
|
|
152
|
+
|
|
153
|
+
On Accept (hand off choice), print, then STOP:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
✓ Research task ready at <task-path>
|
|
157
|
+
|
|
158
|
+
Next step:
|
|
159
|
+
→ /owflow:research-<subskill> <task-path>
|
|
160
|
+
|
|
161
|
+
Other options:
|
|
162
|
+
/owflow:goal-research <task-path> — run remaining steps in one loop
|
|
163
|
+
/owflow:research --from=<slug> <task-path> — jump to a specific step
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Task Structure
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
.owflow/tasks/research/YYYY-MM-DD-research-name/
|
|
172
|
+
├── orchestrator-state.yml
|
|
173
|
+
├── planning/
|
|
174
|
+
│ ├── research-brief.md # research-plan (brief step)
|
|
175
|
+
│ ├── research-plan.md # research-plan (plan step)
|
|
176
|
+
│ └── sources.md # research-plan (plan step)
|
|
177
|
+
├── analysis/
|
|
178
|
+
│ ├── findings/
|
|
179
|
+
│ │ ├── codebase-*.md # research-gather (per category)
|
|
180
|
+
│ │ ├── docs-*.md # research-gather
|
|
181
|
+
│ │ ├── config-*.md # research-gather
|
|
182
|
+
│ │ ├── external-*.md # research-gather
|
|
183
|
+
│ │ └── [custom-category]-*.md # research-gather (dynamic categories)
|
|
184
|
+
│ └── synthesis.md # research-synthesize (reasoning log)
|
|
185
|
+
├── outputs/
|
|
186
|
+
│ ├── research-report.md # research-synthesize (main deliverable)
|
|
187
|
+
│ ├── solution-exploration.md # research-brainstorm (conditional)
|
|
188
|
+
│ ├── high-level-design.md # research-design (conditional)
|
|
189
|
+
│ └── decision-log.md # research-design (conditional)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Research Types
|
|
195
|
+
|
|
196
|
+
| Type | Keywords | Focus | Typical Outputs |
|
|
197
|
+
| ---------------- | ---------------------------------------- | --------------------------- | --------------------------------- |
|
|
198
|
+
| **Technical** | "how does", "where is", "implementation" | Codebase analysis | Knowledge base, architecture docs |
|
|
199
|
+
| **Requirements** | "what are requirements", "user needs" | User/business needs | Specifications, requirements doc |
|
|
200
|
+
| **Literature** | "best practices", "industry standards" | External research | Recommendations, comparisons |
|
|
201
|
+
| **Mixed** | Multiple keywords, broad questions | Comprehensive investigation | All output types |
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Integration with Other Workflows
|
|
206
|
+
|
|
207
|
+
### As Standalone Research
|
|
208
|
+
|
|
209
|
+
**Command**: `/owflow:research [research-question | task-path]` — the dispatcher hands off step by step; `/owflow:goal-research <task-path>` runs the complete workflow in one session with interactive gates.
|
|
210
|
+
|
|
211
|
+
### As Embedded Research Phase (documentation only — no wiring)
|
|
212
|
+
|
|
213
|
+
> This is documentation for parent-orchestrator authors, NOT an execution path of this dispatcher: nothing here auto-invokes a parent, and no research subskill chains into development or migration steps.
|
|
214
|
+
|
|
215
|
+
In the split family, a parent orchestrator (development, migration) that needs research sequences the research subskills directly via the Skill tool — plan → gather → synthesize → the optional chain as chosen by the user — and SKIPS `research-finalize`-style completion: the parent handles next steps and keeps control of the flow. Design artifacts feed the parent's specification phase; the research report is saved in the parent task's `analysis/research/` context per the parent's own state setup.
|
|
216
|
+
|
|
217
|
+
**Handoff fields the parent reads**: refer to `research_outputs.*` in the template [src/templates/orchestrator-state-research.yml](../../templates/orchestrator-state-research.yml).
|
|
218
|
+
|
|
219
|
+
Full autonomous research (research as its own goal, every gate honored) = `/owflow:goal-research`. A `--no-exit` flag for embedded runs is deferred — not part of this design.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Auto-Recovery
|
|
224
|
+
|
|
225
|
+
Retries are owned by each subskill (each `/owflow:research-*` SKILL.md carries its own max attempts and strategy).
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Command Flags
|
|
230
|
+
|
|
231
|
+
| Flag | Effect |
|
|
232
|
+
| --------------------------------- | ------------------------------------------------------------------------------------ |
|
|
233
|
+
| `--from=<slug>` | Hand off (resume mode) from a specific step slug |
|
|
234
|
+
| `--type=<type>` | Force the research type classification ("technical \| requirements \| literature \| mixed") |
|
|
235
|
+
|
|
236
|
+
There is deliberately NO quick entry on this dispatcher — condensed quick starts go through `/owflow:research-quick`, whose artifacts this routing table honors on every row.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Command Integration
|
|
241
|
+
|
|
242
|
+
Invoked via:
|
|
243
|
+
|
|
244
|
+
- `/owflow:research [question] [--type=TYPE]` (new)
|
|
245
|
+
- `/owflow:research [task-path] [--from=<slug>]` (resume)
|
|
246
|
+
|
|
247
|
+
Alternative: `/owflow:goal-research <task-path>` — same task lifecycle, all subskills invoked in one session with `question` gates.
|
|
248
|
+
|
|
249
|
+
Task directory: `.owflow/tasks/research/YYYY-MM-DD-task-name/`
|