@groupby/ai-dev 0.1.1 → 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.
- package/README.md +9 -0
- package/dist/index.js +260 -21
- package/package.json +15 -10
- package/toolsets/rzlv-flow/README.md +57 -0
- package/toolsets/rzlv-flow/docs/mcp-setup.md +126 -0
- package/toolsets/rzlv-flow/resources/README.md +16 -0
- package/toolsets/rzlv-flow/resources/confluence-file-structure.md +179 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/README.md +19 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/decisions.md +36 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/initiative-overview.md +40 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/strategic-context.md +44 -0
- package/toolsets/rzlv-flow/resources/confluence-page-templates/technical-architecture.md +48 -0
- package/toolsets/rzlv-flow/resources/fcmp-protocol.md +331 -0
- package/toolsets/rzlv-flow/resources/jira-file-structure.md +177 -0
- package/toolsets/rzlv-flow/resources/sync-state-format.md +209 -0
- package/toolsets/rzlv-flow/skills/atlassian-orchestrator/SKILL.md +643 -0
- package/toolsets/rzlv-flow/skills/context-analyst/SKILL.md +265 -0
- package/toolsets/rzlv-flow/skills/jira-comment/SKILL.md +89 -0
- package/toolsets/rzlv-flow/skills/jira-daily-triage/SKILL.md +135 -0
- package/toolsets/rzlv-flow/skills/jira-sprint-status/SKILL.md +116 -0
- package/toolsets/rzlv-flow/skills/jira-status/SKILL.md +97 -0
- package/toolsets/rzlv-flow/skills/jira-sync/SKILL.md +148 -0
- package/toolsets/rzlv-flow/skills/jira-ticket-focus/SKILL.md +240 -0
- package/toolsets/rzlv-flow/skills/jira-ticket-trace/SKILL.md +112 -0
- package/toolsets/rzlv-flow/skills/jira-wrap-sync/SKILL.md +227 -0
- package/toolsets/toolsets/rzlv-flow/README.md +102 -0
- package/toolsets/toolsets/rzlv-flow/docs/getting-started.md +102 -0
- package/toolsets/toolsets/rzlv-flow/docs/mcp-setup.md +126 -0
- package/toolsets/toolsets/rzlv-flow/resources/README.md +16 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-file-structure.md +285 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/README.md +19 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/decisions.md +36 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/initiative-overview.md +40 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/strategic-context.md +44 -0
- package/toolsets/toolsets/rzlv-flow/resources/confluence-page-templates/technical-architecture.md +48 -0
- package/toolsets/toolsets/rzlv-flow/resources/fcmp-protocol.md +331 -0
- package/toolsets/toolsets/rzlv-flow/resources/jira-file-structure.md +177 -0
- package/toolsets/toolsets/rzlv-flow/resources/sync-state-format.md +318 -0
- package/toolsets/toolsets/rzlv-flow/skills/atlassian-orchestrator/SKILL.md +643 -0
- package/toolsets/toolsets/rzlv-flow/skills/confluence-fetch/SKILL.md +189 -0
- package/toolsets/toolsets/rzlv-flow/skills/confluence-publish/SKILL.md +178 -0
- package/toolsets/toolsets/rzlv-flow/skills/context-analyst/SKILL.md +265 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-comment/SKILL.md +89 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-daily-triage/SKILL.md +143 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-sprint-status/SKILL.md +143 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-status/SKILL.md +97 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-sync/SKILL.md +148 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-ticket-focus/SKILL.md +245 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-ticket-trace/SKILL.md +112 -0
- package/toolsets/toolsets/rzlv-flow/skills/jira-wrap-sync/SKILL.md +260 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: confluence-fetch
|
|
3
|
+
description: Pull a Confluence page into a local markdown mirror. Supports searching by keyword, pasting a URL, browsing a space, or viewing recently accessed pages. Creates a Leaf Bundle directory with sync frontmatter and converts Confluence storage format to markdown. Use when you want to download a Confluence page for local reference or editing.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Fetch a Confluence page and create a local markdown mirror. Provides multiple ways to find the target page (search, URL, browse, recent), downloads the content, converts from Confluence storage format to markdown, creates a Leaf Bundle directory, and populates sync frontmatter for future two-way sync.
|
|
7
|
+
|
|
8
|
+
## Requirements
|
|
9
|
+
|
|
10
|
+
Requires: Atlassian MCP (`atlassian-rovo`). See the rzlv-flow toolset README for setup.
|
|
11
|
+
|
|
12
|
+
## Resources to Load
|
|
13
|
+
|
|
14
|
+
Before executing, read these resource files:
|
|
15
|
+
|
|
16
|
+
- `docs/ai/resources/fcmp-protocol.md` — follow for all Confluence read operations
|
|
17
|
+
- `docs/ai/resources/confluence-file-structure.md` — Leaf Bundle pattern and dual-mode rules
|
|
18
|
+
- `docs/ai/resources/sync-state-format.md` — YAML frontmatter schema for Confluence page files
|
|
19
|
+
|
|
20
|
+
## Process
|
|
21
|
+
|
|
22
|
+
### Step 1: Find the Document
|
|
23
|
+
|
|
24
|
+
Present options for locating the page:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
How would you like to find the Confluence page?
|
|
28
|
+
1. Search by keyword
|
|
29
|
+
2. Paste a Confluence URL
|
|
30
|
+
3. Browse a space
|
|
31
|
+
4. Show recently viewed pages
|
|
32
|
+
|
|
33
|
+
Choose [1]:
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Option 1 — Search by keyword:**
|
|
37
|
+
- Ask for search terms: "Search for:"
|
|
38
|
+
- Run a Confluence search via MCP using the CQL query: `type = page AND text ~ "{keywords}"`
|
|
39
|
+
- If `confirmed_project` or space is in session context, scope the search: `space = "{SPACE}" AND type = page AND text ~ "{keywords}"`
|
|
40
|
+
|
|
41
|
+
**Option 2 — Paste URL:**
|
|
42
|
+
- Accept a Confluence page URL.
|
|
43
|
+
- Extract the page ID or space + title from the URL.
|
|
44
|
+
- Fetch the page directly via MCP.
|
|
45
|
+
|
|
46
|
+
**Option 3 — Browse space:**
|
|
47
|
+
- Ask for the space key (or use session context).
|
|
48
|
+
- Fetch the top-level pages in the space via MCP.
|
|
49
|
+
- Present as a numbered list. Allow the user to drill into child pages.
|
|
50
|
+
|
|
51
|
+
**Option 4 — Recently viewed:**
|
|
52
|
+
- Use the MCP to fetch recently viewed pages for the current user (if the API supports it).
|
|
53
|
+
- Present as a numbered list.
|
|
54
|
+
|
|
55
|
+
### Step 2: Search and Select
|
|
56
|
+
|
|
57
|
+
For keyword search (option 1), present results:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
### Search Results for "{keywords}"
|
|
61
|
+
| # | Title | Space | Last Updated |
|
|
62
|
+
|---|-------|-------|-------------|
|
|
63
|
+
| 1 | Technical Architecture | ENG | 2 days ago |
|
|
64
|
+
| 2 | Auth Flow Design | ENG | 1 week ago |
|
|
65
|
+
| 3 | API Gateway Overview | PLAT | 3 weeks ago |
|
|
66
|
+
|
|
67
|
+
Choose a page (1-3), or "refine" to search again:
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
If no results are found, offer to refine the search or try a different approach.
|
|
71
|
+
|
|
72
|
+
For URL paste (option 2) or browse (option 3), skip this step if the page is already identified.
|
|
73
|
+
|
|
74
|
+
### Step 3: Choose Local Location
|
|
75
|
+
|
|
76
|
+
After selecting a page, determine where to save the local mirror:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Where should this page be saved locally?
|
|
80
|
+
1. Recommended: docs/confluence/{instance}/{space}/{page-slug}/index.md
|
|
81
|
+
{IF focused_ticket EXISTS:}
|
|
82
|
+
2. Under current ticket: docs/jira/.../{TICKET-KEY}/_docs/{page-slug}.md
|
|
83
|
+
3. Custom path (you specify)
|
|
84
|
+
|
|
85
|
+
Choose [1]:
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Option 1 — Recommended path:** Use the standard Confluence mirror location per `confluence-file-structure.md`. Derive the path from the page's space and title.
|
|
89
|
+
|
|
90
|
+
**Option 2 — Under ticket:** If a focused ticket exists, save as a reference doc in the ticket's `_docs/` folder (this is a flat file, not a Leaf Bundle, since it's inside the Jira structure).
|
|
91
|
+
|
|
92
|
+
**Option 3 — Custom path:** Accept a path from the user. If the path doesn't end with `/index.md`, create a Leaf Bundle at the specified location.
|
|
93
|
+
|
|
94
|
+
### Step 4: Download and Convert
|
|
95
|
+
|
|
96
|
+
1. **Fetch page content** — Use MCP to fetch the full page content, including:
|
|
97
|
+
- Title, body (storage format), version, last updated, space, parent page ID
|
|
98
|
+
- Page labels and metadata
|
|
99
|
+
|
|
100
|
+
2. **Convert Confluence storage format to markdown:**
|
|
101
|
+
- Convert Confluence macros to markdown equivalents where possible
|
|
102
|
+
- Convert tables, headings, lists, links, and inline formatting
|
|
103
|
+
- Preserve code blocks with language hints
|
|
104
|
+
- Convert info/note/warning panels to blockquotes with labels
|
|
105
|
+
- Inline images: download to the Leaf Bundle directory alongside `index.md`
|
|
106
|
+
|
|
107
|
+
3. **Create Leaf Bundle directory:**
|
|
108
|
+
```
|
|
109
|
+
docs/confluence/{instance}/{space}/{page-slug}/index.md
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
4. **Populate frontmatter** per `sync-state-format.md`:
|
|
113
|
+
```yaml
|
|
114
|
+
---
|
|
115
|
+
sync:
|
|
116
|
+
confluence_page_id: "{page_id}"
|
|
117
|
+
confluence_url: "{page_url}"
|
|
118
|
+
confluence_title: "{exact page title}"
|
|
119
|
+
space: "{SPACE}"
|
|
120
|
+
parent_page_id: "{parent_id}"
|
|
121
|
+
last_synced: "{current_timestamp}"
|
|
122
|
+
version: {page_version}
|
|
123
|
+
remote_updated: "{page_last_updated}"
|
|
124
|
+
|
|
125
|
+
mode: "flexible"
|
|
126
|
+
|
|
127
|
+
source:
|
|
128
|
+
origin: "confluence-fetch"
|
|
129
|
+
linked_jira: "{TICKET-KEY if available}"
|
|
130
|
+
---
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
5. **Write the markdown body** below the frontmatter.
|
|
134
|
+
|
|
135
|
+
### Step 5: Quick Actions After Download
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
Page downloaded to: {relative path}
|
|
139
|
+
|
|
140
|
+
Quick actions:
|
|
141
|
+
1. Open the file
|
|
142
|
+
{IF focused_ticket EXISTS:}
|
|
143
|
+
2. Link to Jira ticket {TICKET-KEY} (add Confluence URL as comment)
|
|
144
|
+
3. Edit the content (open in editor)
|
|
145
|
+
{N}. Done — no further actions
|
|
146
|
+
|
|
147
|
+
Choose [{N}]:
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Action: Link to Jira:** Add a comment to the focused ticket via MCP: `[rzlv-flow Update] Linked Confluence page: {title} — {confluence_url}`
|
|
151
|
+
|
|
152
|
+
## Output Format
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
## 📥 Fetched from Confluence
|
|
156
|
+
|
|
157
|
+
**Page:** {Page Title}
|
|
158
|
+
**Space:** {SPACE} | **Version:** {version} | **Last Updated:** {date}
|
|
159
|
+
**Confluence URL:** {confluence_url}
|
|
160
|
+
**Local Path:** {relative path to index.md}
|
|
161
|
+
|
|
162
|
+
### Sync Status
|
|
163
|
+
- **Page ID:** {confluence_page_id}
|
|
164
|
+
- **Version:** {version}
|
|
165
|
+
- **Synced at:** {timestamp}
|
|
166
|
+
- **Mode:** flexible (fetched from Confluence)
|
|
167
|
+
|
|
168
|
+
### Content Preview
|
|
169
|
+
{First 5 lines of the converted markdown content}
|
|
170
|
+
...
|
|
171
|
+
|
|
172
|
+
### Quick Actions
|
|
173
|
+
{Numbered action list from Step 5}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Error Handling
|
|
177
|
+
|
|
178
|
+
- If MCP is unavailable, exit with: "Atlassian MCP not configured. See the rzlv-flow toolset README for setup."
|
|
179
|
+
- If the page is not found (404), inform the user and offer to search again.
|
|
180
|
+
- If the space is inaccessible (403), inform the user and suggest checking permissions.
|
|
181
|
+
- If the local path already exists, ask: "A local mirror already exists at {path}. Overwrite with fresh content? (y/n)"
|
|
182
|
+
- If yes, run FCMP: fetch remote, compare against local, merge if local has changes, then overwrite.
|
|
183
|
+
- If no, suggest an alternative path.
|
|
184
|
+
|
|
185
|
+
## Session Context
|
|
186
|
+
|
|
187
|
+
After running, update conversational context:
|
|
188
|
+
- **last_fetched_page** — The Confluence page title and URL
|
|
189
|
+
- **last_fetched_path** — The local mirror path
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: confluence-publish
|
|
3
|
+
description: Publish a local markdown document to Confluence. Supports publishing working docs, ticket guides, or any markdown file. Creates a Leaf Bundle local mirror, converts to Confluence storage format, pushes via MCP, and optionally links back to Jira. Use when you want to publish documentation to Confluence from your local workspace.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Publish any local markdown document to Confluence as a new or updated page. Handles document selection, Confluence location targeting, FCMP safety checks, Leaf Bundle local mirror creation, and optional Jira back-linking — all in one flow.
|
|
7
|
+
|
|
8
|
+
## Requirements
|
|
9
|
+
|
|
10
|
+
Requires: Atlassian MCP (`atlassian-rovo`). See the rzlv-flow toolset README for setup.
|
|
11
|
+
|
|
12
|
+
## Resources to Load
|
|
13
|
+
|
|
14
|
+
Before executing, read these resource files:
|
|
15
|
+
|
|
16
|
+
- `docs/ai/resources/fcmp-protocol.md` — **critical** for safe read/write against Confluence
|
|
17
|
+
- `docs/ai/resources/confluence-file-structure.md` — Leaf Bundle pattern and dual-mode rules
|
|
18
|
+
- `docs/ai/resources/sync-state-format.md` — YAML frontmatter schema for Confluence page files
|
|
19
|
+
|
|
20
|
+
## Relationship to `atlassian-orchestrator`
|
|
21
|
+
|
|
22
|
+
This skill overlaps with `atlassian-orchestrator` Mode 3b (flexible Confluence sync). The distinction:
|
|
23
|
+
|
|
24
|
+
- **`confluence-publish`** — Lightweight, developer-facing. Publish a single document quickly with minimal prompts. Best for ad-hoc publishing.
|
|
25
|
+
- **`atlassian-orchestrator` Mode 3** — Full structured workflow. Bulk-syncs `_docs/` folders to Confluence following epic hierarchy. Best for orchestrated documentation creation.
|
|
26
|
+
|
|
27
|
+
Use this skill when the user says "publish this to Confluence" or "push this doc to Confluence." Use the orchestrator when the user says "sync all documentation" or is working within an epic structure.
|
|
28
|
+
|
|
29
|
+
## Process
|
|
30
|
+
|
|
31
|
+
### Step 1: Select Document
|
|
32
|
+
|
|
33
|
+
Determine which document to publish. Present options based on context:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
What would you like to publish to Confluence?
|
|
37
|
+
1. Current ticket's guide (_docs/ content)
|
|
38
|
+
2. Specify a file path
|
|
39
|
+
3. List working docs in current ticket folder
|
|
40
|
+
4. Cancel
|
|
41
|
+
|
|
42
|
+
Choose [2]:
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Option 1 — Ticket guide:** Use `focused_ticket` from session context. Look for files in the ticket's `_docs/` folder or the parent epic's `_docs/` folder.
|
|
46
|
+
|
|
47
|
+
**Option 2 — File path:** Accept a relative or absolute path to any markdown file.
|
|
48
|
+
|
|
49
|
+
**Option 3 — List working docs:** List `.md` files in the focused ticket's directory and its `_work/` folder. Present as a numbered list for selection.
|
|
50
|
+
|
|
51
|
+
**Option 4 — Cancel:** Exit without action.
|
|
52
|
+
|
|
53
|
+
Validate the selected file exists and is a markdown file.
|
|
54
|
+
|
|
55
|
+
### Step 2: Choose Confluence Location
|
|
56
|
+
|
|
57
|
+
Ask the user where to publish:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Where should this page be published in Confluence?
|
|
61
|
+
1. Under the epic's Confluence section ({EPIC-KEY} — {epic summary})
|
|
62
|
+
2. Under the current ticket ({TICKET-KEY} — {ticket summary})
|
|
63
|
+
3. Custom parent page (you specify space + parent)
|
|
64
|
+
4. Space root (top-level page in a space)
|
|
65
|
+
|
|
66
|
+
Choose [1]:
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Option 1 — Under epic:** Use the epic's Confluence hierarchy. Determine the parent page from epic metadata or the orchestrator's prior sync state.
|
|
70
|
+
|
|
71
|
+
**Option 2 — Under ticket:** Create the page as a child of the ticket's Confluence page (if one exists) or under the epic with the ticket key in the title.
|
|
72
|
+
|
|
73
|
+
**Option 3 — Custom parent:** Ask for the Confluence space key and parent page title or ID.
|
|
74
|
+
|
|
75
|
+
**Option 4 — Space root:** Ask for just the Confluence space key. The page will be a top-level page in that space.
|
|
76
|
+
|
|
77
|
+
For options 1–2, use `confirmed_project` and instance from session context. If unavailable, ask for the space key.
|
|
78
|
+
|
|
79
|
+
### Step 3: FCMP Check
|
|
80
|
+
|
|
81
|
+
Before creating or updating the Confluence page:
|
|
82
|
+
|
|
83
|
+
1. **Search** for an existing page with the same title in the target space via MCP.
|
|
84
|
+
2. If a matching page exists:
|
|
85
|
+
- **FETCH** the current page content and version.
|
|
86
|
+
- **COMPARE** against the local document.
|
|
87
|
+
- Show the diff to the user and ask: "A page with this title already exists. Update it? (y/n)"
|
|
88
|
+
- If updating, proceed with FCMP merge.
|
|
89
|
+
3. If no matching page exists, proceed to create.
|
|
90
|
+
|
|
91
|
+
### Step 4: Create Leaf Bundle and Publish
|
|
92
|
+
|
|
93
|
+
1. **Create local mirror** — Create the Leaf Bundle directory structure following `confluence-file-structure.md`:
|
|
94
|
+
```
|
|
95
|
+
docs/confluence/{instance}/{space}/{path}/{page-slug}/index.md
|
|
96
|
+
```
|
|
97
|
+
The `{page-slug}` is derived from the page title (lowercase, hyphens for spaces).
|
|
98
|
+
|
|
99
|
+
2. **Add frontmatter** — Populate the `index.md` with sync frontmatter per `sync-state-format.md`:
|
|
100
|
+
- Set `mode: "flexible"` (or `"structured"` if publishing from `_docs/`)
|
|
101
|
+
- Set `sync.confluence_title` to the page title
|
|
102
|
+
- Set `sync.space` to the target space key
|
|
103
|
+
- Set `source.origin` or `source.doc_type` as appropriate
|
|
104
|
+
- Leave `sync.confluence_page_id` empty (populated after push)
|
|
105
|
+
|
|
106
|
+
3. **Convert to Confluence format** — Transform the markdown content to Confluence storage format for the MCP push.
|
|
107
|
+
|
|
108
|
+
4. **Push via MCP** — Create or update the page using MCP:
|
|
109
|
+
- For new pages: create with title, space, parent page ID, and converted content.
|
|
110
|
+
- For updates: include the version number for optimistic locking.
|
|
111
|
+
|
|
112
|
+
5. **Update local frontmatter** — After successful push, update the `index.md` frontmatter:
|
|
113
|
+
- Set `sync.confluence_page_id` from the API response
|
|
114
|
+
- Set `sync.confluence_url` from the API response
|
|
115
|
+
- Set `sync.version` from the API response
|
|
116
|
+
- Set `sync.last_synced` to the current timestamp
|
|
117
|
+
- Set `sync.remote_updated` to the current timestamp
|
|
118
|
+
|
|
119
|
+
### Step 5: Optional Jira Linking
|
|
120
|
+
|
|
121
|
+
If a focused ticket or linked Jira ticket exists in session context:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
Link this page to Jira ticket {TICKET-KEY}?
|
|
125
|
+
1. Add link as a Jira comment
|
|
126
|
+
2. Add link in the ticket description
|
|
127
|
+
3. Both (comment + description)
|
|
128
|
+
4. Skip — don't link to Jira
|
|
129
|
+
|
|
130
|
+
Choose [4]:
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Option 1 — Comment:** Add a Jira comment via MCP: `[rzlv-flow Update] Published Confluence page: {title} — {confluence_url}`
|
|
134
|
+
|
|
135
|
+
**Option 2 — Description:** Append the Confluence URL to the ticket description field. Follow FCMP protocol for the update.
|
|
136
|
+
|
|
137
|
+
**Option 3 — Both:** Execute both options 1 and 2.
|
|
138
|
+
|
|
139
|
+
**Option 4 — Skip:** No Jira linking.
|
|
140
|
+
|
|
141
|
+
## Output Format
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
## 📄 Published to Confluence
|
|
145
|
+
|
|
146
|
+
**Page:** {Page Title}
|
|
147
|
+
**Space:** {SPACE} | **Parent:** {parent page title}
|
|
148
|
+
**URL:** {confluence_url}
|
|
149
|
+
**Local Mirror:** {relative path to index.md}
|
|
150
|
+
|
|
151
|
+
### Sync Status
|
|
152
|
+
- **Page ID:** {confluence_page_id}
|
|
153
|
+
- **Version:** {version}
|
|
154
|
+
- **Synced at:** {timestamp}
|
|
155
|
+
|
|
156
|
+
{IF JIRA LINKED:}
|
|
157
|
+
### Jira Link
|
|
158
|
+
- Linked to {TICKET-KEY} via {comment | description | both}
|
|
159
|
+
|
|
160
|
+
### Next Steps
|
|
161
|
+
{IF page was newly created:}
|
|
162
|
+
- Edit the local mirror at `{path}` and re-run this skill to sync changes
|
|
163
|
+
{IF page was updated:}
|
|
164
|
+
- Page updated successfully — local mirror is in sync
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Error Handling
|
|
168
|
+
|
|
169
|
+
- If MCP is unavailable, exit with: "Atlassian MCP not configured. See the rzlv-flow toolset README for setup."
|
|
170
|
+
- If the target space doesn't exist or is inaccessible, inform the user and ask for a different space.
|
|
171
|
+
- If an optimistic locking conflict occurs (409), re-run FCMP from Fetch and retry.
|
|
172
|
+
- If the parent page doesn't exist, offer to create the page at the space root instead.
|
|
173
|
+
|
|
174
|
+
## Session Context
|
|
175
|
+
|
|
176
|
+
After running, update conversational context:
|
|
177
|
+
- **last_published_page** — The Confluence page title and URL
|
|
178
|
+
- **last_published_path** — The local mirror path
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: context-analyst
|
|
3
|
+
description: Transform meeting transcripts, notes, or unstructured input into structured context documents. Extracts key decisions, action items, requirements, and stakeholder positions. Produces documents ready for PM review and handoff to other skills (like atlassian-orchestrator for Jira/Confluence creation). Use when you have raw meeting notes, transcripts, or brainstorming output that needs to be structured.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Transform unstructured input — meeting transcripts, notes, brainstorming output, audio summaries — into structured context documents with clear decisions, action items, requirements, assumptions with confidence levels, and stakeholder positions. The absolute priority is retention of ALL relevant discussion nuances, assumptions, and explicit statements — even at the expense of brevity. Output is ready for PM review and can be handed off to `atlassian-orchestrator` for Jira/Confluence creation.
|
|
7
|
+
|
|
8
|
+
## Requirements
|
|
9
|
+
|
|
10
|
+
No MCP servers required. This skill works with any LLM client.
|
|
11
|
+
|
|
12
|
+
Optional: Atlassian MCP (`atlassian-rovo`) if you want to immediately create Jira/Confluence structures from the output. See the rzlv-flow toolset README for setup.
|
|
13
|
+
|
|
14
|
+
## Core Principles
|
|
15
|
+
|
|
16
|
+
- **Context retention is paramount** — never aggressively summarize. Preserve the "how" of discussions, not just the "what."
|
|
17
|
+
- **Always create a file** — never dump processed output only in chat. The context document must be saved to a file for downstream use.
|
|
18
|
+
- **Preserve speaker attribution** — direct quotes preserve intent better than paraphrasing. Attribute positions, decisions, and assumptions to speakers.
|
|
19
|
+
- **Flag uncertainty explicitly** — unresolved debates and open questions are valuable signal, not noise.
|
|
20
|
+
- **Every assumption deserves documentation** — with confidence level (High/Medium/Low) and speaker attribution.
|
|
21
|
+
|
|
22
|
+
## Resources to Load
|
|
23
|
+
|
|
24
|
+
None required — this skill is standalone.
|
|
25
|
+
|
|
26
|
+
Optionally, if the user wants output placed in the Jira mirror structure, read:
|
|
27
|
+
- `docs/ai/resources/jira-file-structure.md` — for file placement rules
|
|
28
|
+
|
|
29
|
+
## Process
|
|
30
|
+
|
|
31
|
+
### Step 1: Accept Input
|
|
32
|
+
|
|
33
|
+
Accept the source material in any of these forms:
|
|
34
|
+
|
|
35
|
+
- **Pasted text** — User pastes meeting transcript, notes, or other unstructured text directly into the conversation.
|
|
36
|
+
- **File reference** — User points to a file containing the source material (e.g. "analyze the notes in `meeting-notes/2025-04-03.md`").
|
|
37
|
+
- **Multiple sources** — User provides several files or snippets to combine into one context document.
|
|
38
|
+
|
|
39
|
+
If the input is unclear or empty, ask:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
What would you like me to analyze? You can:
|
|
43
|
+
1. Paste meeting notes or a transcript here
|
|
44
|
+
2. Point me to a file (e.g. "meeting-notes/standup.md")
|
|
45
|
+
3. Describe the meeting or discussion to capture
|
|
46
|
+
|
|
47
|
+
Choose or paste your content:
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Step 2: Identify Source Metadata
|
|
51
|
+
|
|
52
|
+
Before analyzing, capture metadata about the source:
|
|
53
|
+
|
|
54
|
+
- **Title/topic** — What was the meeting or discussion about? Infer from content or ask.
|
|
55
|
+
- **Date** — When did this occur? Extract from the content or use today's date.
|
|
56
|
+
- **Participants** — Who was involved? Extract names mentioned in the content.
|
|
57
|
+
- **Key contributors** — Identify the 2-3 most active participants.
|
|
58
|
+
- **Source type** — Transcript, notes, brainstorm, audio summary, etc. Infer from format.
|
|
59
|
+
|
|
60
|
+
### Step 3: Noise Filtering
|
|
61
|
+
|
|
62
|
+
Apply minimal filtering before analysis:
|
|
63
|
+
|
|
64
|
+
- **Remove ONLY:** Phatic communication ("hello", "how are you"), social pleasantries, audio/connection technical issues ("can you hear me?", "you're on mute").
|
|
65
|
+
- **RETAIN ALL:** Product discussions, scope discussions, technical discussions, UX discussions, disagreements, tentative ideas, and "thinking out loud" sections. When in doubt, retain.
|
|
66
|
+
|
|
67
|
+
### Step 4: Extract and Structure
|
|
68
|
+
|
|
69
|
+
Analyze the input and extract the following categories. Not every category will be present in every input — include only sections that have content.
|
|
70
|
+
|
|
71
|
+
**Initial Framing & Goals:**
|
|
72
|
+
- Synthesize introductory remarks — what problem is being discussed and why now?
|
|
73
|
+
- Capture the business case if stated.
|
|
74
|
+
- Identify the high-level goal of the meeting.
|
|
75
|
+
|
|
76
|
+
**Problem and User Context:**
|
|
77
|
+
- User needs with speaker attribution and direct quotes.
|
|
78
|
+
- Edge cases and historical context discussed.
|
|
79
|
+
- Target users or personas mentioned.
|
|
80
|
+
|
|
81
|
+
**Key Decisions:**
|
|
82
|
+
- Identify explicit decisions ("we decided...", "the decision is...", "agreed to...")
|
|
83
|
+
- Identify implicit decisions (consensus reached, directions chosen)
|
|
84
|
+
- For each decision, capture the outcome and rationale
|
|
85
|
+
- Quote the relevant source text for traceability
|
|
86
|
+
|
|
87
|
+
**Action Items:**
|
|
88
|
+
- Identify tasks assigned or volunteered ("I'll do...", "can you...", "{name} will...")
|
|
89
|
+
- Capture the owner if mentioned
|
|
90
|
+
- Capture any deadlines or timeframes mentioned
|
|
91
|
+
- Mark as checklist items for easy tracking
|
|
92
|
+
|
|
93
|
+
**Requirements:**
|
|
94
|
+
- Identify functional requirements discussed
|
|
95
|
+
- Identify non-functional requirements (performance, security, scalability)
|
|
96
|
+
- Identify constraints or limitations mentioned (security, compliance, tech stack)
|
|
97
|
+
- Distinguish between confirmed requirements and proposed/tentative ones
|
|
98
|
+
|
|
99
|
+
**Assumptions:**
|
|
100
|
+
- Capture every assumption — both explicit ("I'm assuming...") and inferred from context.
|
|
101
|
+
- For each assumption, document:
|
|
102
|
+
- **Type:** Explicit (speaker stated it) or Inferred (analyst detected it)
|
|
103
|
+
- **Speaker:** Who made or implied this assumption
|
|
104
|
+
- **Confidence:** High (80%+), Medium (50-80%), or Low (<50%)
|
|
105
|
+
- **Impact:** What breaks if this assumption is wrong
|
|
106
|
+
|
|
107
|
+
**Open Questions:**
|
|
108
|
+
- Identify unresolved questions raised during the discussion
|
|
109
|
+
- Identify items that were deferred ("we'll discuss later", "needs more research")
|
|
110
|
+
- Capture who is responsible for following up, if mentioned
|
|
111
|
+
- Include the original quote where possible
|
|
112
|
+
|
|
113
|
+
**Stakeholder Positions:**
|
|
114
|
+
- Track individual viewpoints, concerns, and preferences with speaker names
|
|
115
|
+
- Note any disagreements or tensions
|
|
116
|
+
- Capture context for why someone holds a position
|
|
117
|
+
|
|
118
|
+
**Solution Discussion & Technical Details:**
|
|
119
|
+
- Proposed components/approaches with speaker attribution
|
|
120
|
+
- Architecture decisions or preferences discussed
|
|
121
|
+
- Technology choices or constraints
|
|
122
|
+
- Integration requirements
|
|
123
|
+
- Performance targets or SLAs mentioned
|
|
124
|
+
|
|
125
|
+
### Step 5: Produce Context Document
|
|
126
|
+
|
|
127
|
+
Generate a structured markdown document with the extracted content using the output format below.
|
|
128
|
+
|
|
129
|
+
### Step 6: Save Output
|
|
130
|
+
|
|
131
|
+
Determine where to save the context document:
|
|
132
|
+
|
|
133
|
+
1. **If the user specifies a path** — Save there.
|
|
134
|
+
2. **If a Jira project context exists** — Offer to save in the Jira mirror structure:
|
|
135
|
+
```
|
|
136
|
+
docs/jira/{instance}/{project}/_context/{date}-{topic-slug}.md
|
|
137
|
+
```
|
|
138
|
+
3. **Default** — Ask the user:
|
|
139
|
+
```
|
|
140
|
+
Where should I save this context document?
|
|
141
|
+
1. Specify a file path
|
|
142
|
+
2. Save to project context folder (docs/jira/.../_context/)
|
|
143
|
+
3. Don't save — just display it
|
|
144
|
+
|
|
145
|
+
Choose [3]:
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
If the target path already exists, warn before overwriting:
|
|
149
|
+
```
|
|
150
|
+
⚠️ File already exists: {path}
|
|
151
|
+
1. Overwrite
|
|
152
|
+
2. Save as {path-v2}
|
|
153
|
+
3. Cancel
|
|
154
|
+
|
|
155
|
+
Choose [2]:
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Step 7: Suggest Follow-up
|
|
159
|
+
|
|
160
|
+
Based on what was extracted, suggest relevant next steps using other skills:
|
|
161
|
+
|
|
162
|
+
- **If requirements and technical details were identified:**
|
|
163
|
+
"Use `atlassian-orchestrator` to create an epic structure with documentation from this context."
|
|
164
|
+
|
|
165
|
+
- **If action items map to Jira tickets:**
|
|
166
|
+
"Use `atlassian-orchestrator` to create Jira stories from the identified action items."
|
|
167
|
+
|
|
168
|
+
- **If decisions should be documented in Confluence:**
|
|
169
|
+
"Use `atlassian-orchestrator` (Confluence sync — flexible mode) to publish this document to Confluence."
|
|
170
|
+
|
|
171
|
+
## Output Format
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
# {Feature/Topic Name} — Meeting Context Document
|
|
175
|
+
|
|
176
|
+
## Meeting Metadata
|
|
177
|
+
| Field | Value |
|
|
178
|
+
|-------|-------|
|
|
179
|
+
| **Meeting Name** | {meeting name or topic} |
|
|
180
|
+
| **Date** | {date} |
|
|
181
|
+
| **Participants** | {alphabetical list} |
|
|
182
|
+
| **Key Contributors** | {top 2-3 most active names} |
|
|
183
|
+
| **Source Type** | {Transcript / Notes / Audio Summary / etc.} |
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
{INCLUDE ONLY SECTIONS THAT HAVE CONTENT:}
|
|
188
|
+
|
|
189
|
+
## Initial Framing & High-Level Goal
|
|
190
|
+
{Synthesis of introductory remarks and business case}
|
|
191
|
+
|
|
192
|
+
## Problem and User Context
|
|
193
|
+
|
|
194
|
+
### User Needs
|
|
195
|
+
{FOR EACH KEY POINT WITH SPEAKER:}
|
|
196
|
+
* **{Speaker Name}:** "{quote or detailed summary}"
|
|
197
|
+
|
|
198
|
+
### Edge Cases & Historical Context
|
|
199
|
+
{FOR EACH ITEM:}
|
|
200
|
+
* {Specific scenario or historical context discussed}
|
|
201
|
+
|
|
202
|
+
## Solution Discussion
|
|
203
|
+
|
|
204
|
+
### Proposed Components
|
|
205
|
+
| Component | Description | Speaker |
|
|
206
|
+
|-----------|-------------|---------|
|
|
207
|
+
| {Component A} | {description} | {speaker} |
|
|
208
|
+
| {Component B} | {description} | {speaker} |
|
|
209
|
+
|
|
210
|
+
### Constraints Identified
|
|
211
|
+
* **Security/Compliance:** {specific mentions}
|
|
212
|
+
* **Performance:** {metrics or concerns}
|
|
213
|
+
* **Technology Stack:** {platforms, languages, constraints}
|
|
214
|
+
|
|
215
|
+
## Decisions Made
|
|
216
|
+
| Decision | Outcome | Context | Speaker |
|
|
217
|
+
|----------|---------|---------|---------|
|
|
218
|
+
| {Decision 1} | {final outcome} | {why/rationale} | {speaker} |
|
|
219
|
+
|
|
220
|
+
## Assumptions
|
|
221
|
+
| Assumption | Type | Speaker | Confidence | Impact if Wrong |
|
|
222
|
+
|------------|------|---------|------------|----------------|
|
|
223
|
+
| {Assumption 1} | Explicit/Inferred | {name} | High/Medium/Low | {what breaks} |
|
|
224
|
+
|
|
225
|
+
## Action Items
|
|
226
|
+
{FOR EACH ACTION:}
|
|
227
|
+
- [ ] {Action description} {IF OWNER:}(Owner: {person}) {IF DEADLINE:}— Due: {date/timeframe}
|
|
228
|
+
|
|
229
|
+
## Requirements
|
|
230
|
+
**Confirmed:**
|
|
231
|
+
{FOR EACH CONFIRMED REQUIREMENT:}
|
|
232
|
+
- {Requirement description}
|
|
233
|
+
|
|
234
|
+
**Proposed / Tentative:**
|
|
235
|
+
{FOR EACH PROPOSED REQUIREMENT:}
|
|
236
|
+
- {Requirement description} — needs confirmation
|
|
237
|
+
|
|
238
|
+
## Open Questions
|
|
239
|
+
{FOR EACH QUESTION:}
|
|
240
|
+
* **{Question}:** "{original quote or summary}" — {Speaker}
|
|
241
|
+
|
|
242
|
+
## Stakeholder Positions
|
|
243
|
+
{FOR EACH PERSON WITH A NOTABLE POSITION:}
|
|
244
|
+
- **{Person}:** {Position or concern summary}
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Suggested Next Steps
|
|
249
|
+
{Based on extracted content:}
|
|
250
|
+
1. {Actionable suggestion, potentially referencing other skills}
|
|
251
|
+
2. {Additional suggestion}
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
*Generated by: context-analyst skill*
|
|
255
|
+
*Source: {filename or "pasted input"}*
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Session Context
|
|
259
|
+
|
|
260
|
+
After running, update conversational context with:
|
|
261
|
+
|
|
262
|
+
- **last_context_document_path** — Where the document was saved (if saved)
|
|
263
|
+
- **last_context_document_topic** — The topic/title of the document
|
|
264
|
+
- **context_action_items_count** — Number of action items extracted (useful for follow-up)
|
|
265
|
+
- **context_assumptions_count** — Number of assumptions captured (useful for PM review)
|