@orderful/droid 0.37.0 → 0.39.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/.claude-plugin/marketplace.json +1 -118
- package/.claude-plugin/plugin.json +51 -0
- package/AGENTS.md +4 -0
- package/CHANGELOG.md +53 -0
- package/README.md +70 -39
- package/dist/bin/droid.js +658 -212
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/tui/components/PlatformBadges.d.ts.map +1 -1
- package/dist/commands/tui/components/SettingsDetails.d.ts.map +1 -1
- package/dist/commands/tui/hooks/useAppUpdate.d.ts.map +1 -1
- package/dist/commands/tui/views/SetupScreen.d.ts.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/index.js +345 -186
- package/dist/lib/agents.d.ts +4 -2
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/migrations.d.ts.map +1 -1
- package/dist/lib/platform.codex.d.ts +36 -0
- package/dist/lib/platform.codex.d.ts.map +1 -0
- package/dist/lib/platforms.d.ts +30 -24
- package/dist/lib/platforms.d.ts.map +1 -1
- package/dist/lib/secrets.d.ts +7 -0
- package/dist/lib/secrets.d.ts.map +1 -0
- package/dist/lib/skills.d.ts +4 -2
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/types.d.ts +2 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/tools/brain/.claude-plugin/plugin.json +8 -1
- package/dist/tools/brain/TOOL.yaml +1 -1
- package/dist/tools/brain/skills/brain/SKILL.md +6 -3
- package/dist/tools/brain/skills/brain/references/workflows.md +9 -5
- package/dist/tools/brain/skills/brain-obsidian/SKILL.md +2 -0
- package/dist/tools/coach/.claude-plugin/plugin.json +6 -0
- package/dist/tools/coach/skills/coach/SKILL.md +3 -0
- package/dist/tools/code-review/.claude-plugin/plugin.json +12 -0
- package/dist/tools/code-review/skills/code-review/SKILL.md +2 -0
- package/dist/tools/codex/.claude-plugin/plugin.json +9 -0
- package/dist/tools/codex/skills/codex/SKILL.md +3 -0
- package/dist/tools/comments/.claude-plugin/plugin.json +6 -0
- package/dist/tools/comments/skills/comments/SKILL.md +5 -0
- package/dist/tools/droid/.claude-plugin/plugin.json +8 -1
- package/dist/tools/droid/TOOL.yaml +4 -2
- package/dist/tools/droid/commands/setup.md +125 -0
- package/dist/tools/droid/skills/droid/SKILL.md +117 -2
- package/dist/tools/plan/.claude-plugin/plugin.json +6 -0
- package/dist/tools/plan/skills/plan/SKILL.md +2 -0
- package/dist/tools/project/.claude-plugin/plugin.json +6 -0
- package/dist/tools/project/skills/project/SKILL.md +3 -0
- package/dist/tools/status-update/.claude-plugin/plugin.json +22 -0
- package/dist/tools/status-update/TOOL.yaml +21 -0
- package/dist/tools/status-update/commands/status-update.md +27 -0
- package/dist/tools/status-update/skills/status-update/SKILL.md +253 -0
- package/dist/tools/status-update/skills/status-update/references/formatting.md +203 -0
- package/dist/tools/tech-design/.claude-plugin/plugin.json +7 -1
- package/dist/tools/tech-design/TOOL.yaml +1 -1
- package/dist/tools/tech-design/commands/tech-design.md +2 -0
- package/dist/tools/tech-design/skills/tech-design/SKILL.md +39 -9
- package/dist/tools/tech-design/skills/tech-design/references/publish.md +272 -216
- package/dist/tools/tech-design/skills/tech-design/references/start.md +50 -20
- package/dist/tools/wrapup/.claude-plugin/plugin.json +6 -0
- package/dist/tools/wrapup/skills/wrapup/SKILL.md +2 -0
- package/package.json +1 -1
- package/scripts/build-plugins.ts +154 -6
- package/src/bin/droid.ts +35 -0
- package/src/commands/auth.ts +150 -0
- package/src/commands/setup.ts +107 -2
- package/src/commands/tui/components/PlatformBadges.tsx +1 -0
- package/src/commands/tui/components/SettingsDetails.tsx +1 -0
- package/src/commands/tui/hooks/useAppUpdate.ts +21 -1
- package/src/commands/tui/views/SetupScreen.tsx +10 -1
- package/src/commands/update.ts +21 -1
- package/src/lib/agents.ts +13 -2
- package/src/lib/migrations.ts +81 -9
- package/src/lib/platform.codex.ts +131 -0
- package/src/lib/platforms.ts +127 -6
- package/src/lib/secrets.ts +12 -0
- package/src/lib/skills.ts +53 -6
- package/src/lib/types.ts +1 -0
- package/src/tools/brain/.claude-plugin/plugin.json +8 -1
- package/src/tools/brain/TOOL.yaml +1 -1
- package/src/tools/brain/skills/brain/SKILL.md +6 -3
- package/src/tools/brain/skills/brain/references/workflows.md +9 -5
- package/src/tools/brain/skills/brain-obsidian/SKILL.md +2 -0
- package/src/tools/coach/.claude-plugin/plugin.json +6 -0
- package/src/tools/coach/skills/coach/SKILL.md +3 -0
- package/src/tools/code-review/.claude-plugin/plugin.json +12 -0
- package/src/tools/code-review/skills/code-review/SKILL.md +2 -0
- package/src/tools/codex/.claude-plugin/plugin.json +9 -0
- package/src/tools/codex/skills/codex/SKILL.md +3 -0
- package/src/tools/comments/.claude-plugin/plugin.json +6 -0
- package/src/tools/comments/skills/comments/SKILL.md +5 -0
- package/src/tools/droid/.claude-plugin/plugin.json +8 -1
- package/src/tools/droid/TOOL.yaml +4 -2
- package/src/tools/droid/commands/setup.md +125 -0
- package/src/tools/droid/skills/droid/SKILL.md +117 -2
- package/src/tools/plan/.claude-plugin/plugin.json +6 -0
- package/src/tools/plan/skills/plan/SKILL.md +2 -0
- package/src/tools/project/.claude-plugin/plugin.json +6 -0
- package/src/tools/project/skills/project/SKILL.md +3 -0
- package/src/tools/status-update/.claude-plugin/plugin.json +22 -0
- package/src/tools/status-update/TOOL.yaml +21 -0
- package/src/tools/status-update/commands/status-update.md +27 -0
- package/src/tools/status-update/skills/status-update/SKILL.md +253 -0
- package/src/tools/status-update/skills/status-update/references/formatting.md +203 -0
- package/src/tools/tech-design/.claude-plugin/plugin.json +7 -1
- package/src/tools/tech-design/TOOL.yaml +1 -1
- package/src/tools/tech-design/commands/tech-design.md +2 -0
- package/src/tools/tech-design/skills/tech-design/SKILL.md +39 -9
- package/src/tools/tech-design/skills/tech-design/references/publish.md +272 -216
- package/src/tools/tech-design/skills/tech-design/references/start.md +50 -20
- package/src/tools/wrapup/.claude-plugin/plugin.json +6 -0
- package/src/tools/wrapup/skills/wrapup/SKILL.md +2 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: droid
|
|
3
|
-
description: "Core droid meta-skill for updates, tool discovery, and
|
|
4
|
-
allowed-tools: [Bash]
|
|
3
|
+
description: "Core droid meta-skill for updates, tool discovery, usage help, and skill overrides. Use when checking for droid updates, discovering available tools, answering 'how do I...' questions about droid workflows, or customizing skill behaviour. User prompts like 'any droid updates?', 'what tools do I have?', 'what tools do you have?', 'remind me what tools you have', 'hey droid what can you do', 'how do I add context?', 'remind me how to use codex', 'what's the best way to start a session?', 'customize brain search', 'create an override for brain'."
|
|
4
|
+
allowed-tools: [Bash, Read, Write]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Droid
|
|
@@ -87,3 +87,118 @@ When answering "how do I..." questions:
|
|
|
87
87
|
1. `/project search {name}` - Load working context
|
|
88
88
|
2. `/codex search {topic}` - Find relevant org knowledge (if needed)
|
|
89
89
|
3. Then start working with full context
|
|
90
|
+
|
|
91
|
+
## Skill Overrides
|
|
92
|
+
|
|
93
|
+
Users can customize skill behaviour by creating override files in `~/.droid/skill_overrides/`.
|
|
94
|
+
|
|
95
|
+
**When:** User asks to customize a skill, use a different tool for a command, or mentions overrides.
|
|
96
|
+
|
|
97
|
+
### Creating an Override
|
|
98
|
+
|
|
99
|
+
1. **Explain** the override system:
|
|
100
|
+
- Override files live in `~/.droid/skill_overrides/{skill}.md`
|
|
101
|
+
- Use YAML frontmatter to declare which commands are overridden
|
|
102
|
+
- Template available at `~/.droid/skill_overrides/_template.md`
|
|
103
|
+
|
|
104
|
+
2. **Create** the override file with proper structure:
|
|
105
|
+
```markdown
|
|
106
|
+
---
|
|
107
|
+
overrides: [command1, command2]
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## command1
|
|
111
|
+
|
|
112
|
+
Custom instructions for this command...
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
3. **Register** the override in config:
|
|
116
|
+
```bash
|
|
117
|
+
# Set override path (use tool name in config path, skill name for file)
|
|
118
|
+
droid config --set tools.{tool}.override.path="~/.droid/skill_overrides/{skill}.md"
|
|
119
|
+
|
|
120
|
+
# Set overridden commands (as JSON array)
|
|
121
|
+
droid config --set tools.{tool}.override.commands='["command1", "command2"]'
|
|
122
|
+
|
|
123
|
+
# Enable the override (can toggle off later)
|
|
124
|
+
droid config --set tools.{tool}.override.enabled=true
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Note: Config uses tool name (e.g., `tools.brain`), file uses skill name. Usually the same, but tools can contain multiple skills.
|
|
128
|
+
|
|
129
|
+
**Toggle off:** `droid config --set tools.{tool}.override.enabled=false` to disable without removing.
|
|
130
|
+
|
|
131
|
+
4. **Confirm** the override is active
|
|
132
|
+
|
|
133
|
+
### Registering an Existing Override
|
|
134
|
+
|
|
135
|
+
If user says "I added an override for {tool}" or "register my {tool} override":
|
|
136
|
+
|
|
137
|
+
1. **Read** `~/.droid/skill_overrides/{skill}.md`
|
|
138
|
+
2. **Parse** YAML frontmatter to extract `overrides: [...]` array
|
|
139
|
+
3. **Register** using the config commands above (with tool name in config path)
|
|
140
|
+
4. **Confirm** registration
|
|
141
|
+
|
|
142
|
+
### Override Visibility
|
|
143
|
+
|
|
144
|
+
When an override is active, skills show:
|
|
145
|
+
```
|
|
146
|
+
[override] brain/search → ~/.droid/skill_overrides/brain.md
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
This helps users know customisation is being used and where to find it.
|
|
150
|
+
|
|
151
|
+
### Example: qmd for Brain Search
|
|
152
|
+
|
|
153
|
+
User: "I want brain search to use qmd for semantic search"
|
|
154
|
+
|
|
155
|
+
Create `~/.droid/skill_overrides/brain.md`:
|
|
156
|
+
```markdown
|
|
157
|
+
---
|
|
158
|
+
overrides: [search]
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## search
|
|
162
|
+
|
|
163
|
+
Use qmd for semantic search instead of filename matching.
|
|
164
|
+
|
|
165
|
+
**Prerequisites:** qmd installed, brain collection indexed (`qmd index brain -p {brain_dir}`)
|
|
166
|
+
|
|
167
|
+
**Workflow:**
|
|
168
|
+
|
|
169
|
+
1. Check if qmd collection exists: `qmd ls brain`
|
|
170
|
+
2. If exists, run: `qmd query "{query}" -c brain -n 10 --files`
|
|
171
|
+
3. Parse CSV output (format: `docid,score,filepath,context`)
|
|
172
|
+
4. Extract filepath (field 3) from each row
|
|
173
|
+
5. Present matches sorted by score
|
|
174
|
+
6. If qmd fails or collection doesn't exist, fall back to Glob: `{brain_dir}/**/*{query}*.md`
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Then register:
|
|
178
|
+
```bash
|
|
179
|
+
droid config --set tools.brain.override.path="~/.droid/skill_overrides/brain.md"
|
|
180
|
+
droid config --set tools.brain.override.commands='["search"]'
|
|
181
|
+
droid config --set tools.brain.override.enabled=true
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Override Lookup (for all skills)
|
|
185
|
+
|
|
186
|
+
When executing any skill command, check for overrides:
|
|
187
|
+
|
|
188
|
+
1. **Get tool config:** `droid config --get tools.{tool}`
|
|
189
|
+
|
|
190
|
+
2. **Check if override applies:**
|
|
191
|
+
- Config has `override` section AND
|
|
192
|
+
- `override.enabled` is `true` (or not set) AND
|
|
193
|
+
- `override.commands` includes the current command
|
|
194
|
+
|
|
195
|
+
3. **If override applies:**
|
|
196
|
+
- Show: `[override] {skill}/{command} → {override.path}`
|
|
197
|
+
- Read the override file at `override.path`
|
|
198
|
+
- Find the `## {command}` section
|
|
199
|
+
- Follow those instructions instead of default workflow
|
|
200
|
+
- If override fails or instructions unclear, fall back to default
|
|
201
|
+
|
|
202
|
+
4. **If no override:** Use default skill behaviour
|
|
203
|
+
|
|
204
|
+
This lookup is the same for all skills - config is per-tool, but the lookup workflow is universal.
|
|
@@ -28,6 +28,8 @@ Uses config from dependencies:
|
|
|
28
28
|
- `droid config --get tools.brain` → `brain_dir`, `inbox_folder`
|
|
29
29
|
- `droid config --get user_mention` → `user_mention` (global config)
|
|
30
30
|
|
|
31
|
+
**Overrides:** This skill supports user-defined overrides. See `/droid` skill § Skill Overrides.
|
|
32
|
+
|
|
31
33
|
## Commands
|
|
32
34
|
|
|
33
35
|
| Command | Action |
|
|
@@ -32,6 +32,9 @@ Chat history disappears. Projects persist.
|
|
|
32
32
|
| -------------- | ------------ | -------------------------------------------------- |
|
|
33
33
|
| `projects_dir` | **required** | Where projects are stored (must be configured) |
|
|
34
34
|
| `preset` | `markdown` | Output format: `markdown` or `obsidian` |
|
|
35
|
+
| `override` | (none) | User-defined behaviour overrides |
|
|
36
|
+
|
|
37
|
+
**Overrides:** This skill supports user-defined overrides. See `/droid` skill § Skill Overrides.
|
|
35
38
|
|
|
36
39
|
If `projects_dir` is not configured, inform the user they need to set it up:
|
|
37
40
|
```bash
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "droid-status-update",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Generate and post project status updates. Aggregates context from codex projects, Jira epics, and manual input. Posts to Slack or prints to terminal.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Orderful",
|
|
7
|
+
"url": "https://github.com/orderful"
|
|
8
|
+
},
|
|
9
|
+
"repository": "https://github.com/orderful/droid",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"droid",
|
|
13
|
+
"ai",
|
|
14
|
+
"status-update"
|
|
15
|
+
],
|
|
16
|
+
"skills": [
|
|
17
|
+
"./skills/status-update/SKILL.md"
|
|
18
|
+
],
|
|
19
|
+
"commands": [
|
|
20
|
+
"./commands/status-update.md"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: status-update
|
|
2
|
+
description: "Generate and post project status updates. Aggregates context from codex projects, Jira epics, and manual input. Posts to Slack or prints to terminal."
|
|
3
|
+
version: 0.1.0
|
|
4
|
+
status: beta
|
|
5
|
+
|
|
6
|
+
includes:
|
|
7
|
+
skills:
|
|
8
|
+
- name: status-update
|
|
9
|
+
required: true
|
|
10
|
+
commands:
|
|
11
|
+
- name: status-update
|
|
12
|
+
is_alias: false
|
|
13
|
+
agents: []
|
|
14
|
+
|
|
15
|
+
dependencies: []
|
|
16
|
+
|
|
17
|
+
config_schema:
|
|
18
|
+
default_crosspost_channel:
|
|
19
|
+
type: string
|
|
20
|
+
description: Default channel for cross-posting updates (e.g., rnd-updates)
|
|
21
|
+
required: false
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: status-update
|
|
3
|
+
description: "Generate and post project status updates. Pulls from codex, Jira, and manual input. Posts to Slack or prints to terminal."
|
|
4
|
+
argument-hint: "[{project}]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /status-update
|
|
8
|
+
|
|
9
|
+
**User invoked:** `/status-update $ARGUMENTS`
|
|
10
|
+
|
|
11
|
+
**Your task:** Invoke the **status-update skill** with these arguments.
|
|
12
|
+
|
|
13
|
+
## Examples
|
|
14
|
+
|
|
15
|
+
- `/status-update` → Prompt for project or use active project
|
|
16
|
+
- `/status-update partnership-automation` → Generate update for specific project
|
|
17
|
+
- `/status-update --no-slack` → Generate update but print to terminal instead of posting
|
|
18
|
+
|
|
19
|
+
## Quick Reference
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
/status-update # Interactive - prompts for everything
|
|
23
|
+
/status-update {project} # Use codex project for metadata
|
|
24
|
+
/status-update --no-slack # Output to terminal instead of Slack
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
See the **status-update skill** for complete documentation.
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: status-update
|
|
3
|
+
description: "Generate and post project status updates. Aggregates context from codex projects, Jira epics, and manual input. Posts to Slack or prints to terminal."
|
|
4
|
+
argument-hint: "[{project}]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
[
|
|
7
|
+
Read,
|
|
8
|
+
Glob,
|
|
9
|
+
Grep,
|
|
10
|
+
Bash(git:*),
|
|
11
|
+
Bash(curl:*),
|
|
12
|
+
Bash(droid:*),
|
|
13
|
+
]
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Status Update Skill
|
|
17
|
+
|
|
18
|
+
Generate formatted project status updates from multiple sources and post to Slack (or print to terminal).
|
|
19
|
+
|
|
20
|
+
## Data Sources (All Optional)
|
|
21
|
+
|
|
22
|
+
| Source | When available | What it provides |
|
|
23
|
+
|--------|----------------|------------------|
|
|
24
|
+
| **Codex project** | If project name matches a codex project | Metadata (slack, jira, links) + git history |
|
|
25
|
+
| **Jira MCP** | If jira.epic configured + MCP connected | Ticket status for in-flight/up-next drafts |
|
|
26
|
+
| **Manual input** | Always | User-provided status, phase, bullets |
|
|
27
|
+
|
|
28
|
+
## Output Destinations
|
|
29
|
+
|
|
30
|
+
| Destination | When available | Fallback |
|
|
31
|
+
|-------------|----------------|----------|
|
|
32
|
+
| **Slack** | If slack.channel configured + SLACK_USER_TOKEN set | Print to terminal |
|
|
33
|
+
|
|
34
|
+
## Procedure
|
|
35
|
+
|
|
36
|
+
### 1. Resolve Project Context
|
|
37
|
+
|
|
38
|
+
**If project name provided:**
|
|
39
|
+
|
|
40
|
+
1. Check if codex is configured:
|
|
41
|
+
```bash
|
|
42
|
+
droid config --get tools.codex
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
2. If codex configured, look for matching project:
|
|
46
|
+
```bash
|
|
47
|
+
ls {codex_repo}/projects/ | grep -i {project}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
3. If found, read CONTEXT.md frontmatter:
|
|
51
|
+
- `title` - Project name
|
|
52
|
+
- `slack.channel` - Primary Slack channel
|
|
53
|
+
- `slack.crosspost_channel` - Optional crosspost channel
|
|
54
|
+
- `slack.canvas_id` - Optional canvas for update log
|
|
55
|
+
- `jira.epic` - Optional Jira epic key
|
|
56
|
+
- `links.prd`, `links.tech_design`, `links.figma` - Optional doc links
|
|
57
|
+
|
|
58
|
+
**If no project name provided:**
|
|
59
|
+
|
|
60
|
+
1. Check for active project in conversation context
|
|
61
|
+
2. If none, ask: "Which project is this update for?"
|
|
62
|
+
3. If user provides a name, attempt to match to codex project
|
|
63
|
+
4. If no match, continue without codex metadata (prompt for details manually)
|
|
64
|
+
|
|
65
|
+
**If no codex match:**
|
|
66
|
+
|
|
67
|
+
Prompt user for:
|
|
68
|
+
- Project name (for display)
|
|
69
|
+
- Slack channel (optional - skip to print to terminal)
|
|
70
|
+
- Jira epic key (optional)
|
|
71
|
+
|
|
72
|
+
### 2. Generate Draft Content
|
|
73
|
+
|
|
74
|
+
Attempt to generate draft bullets from available sources.
|
|
75
|
+
|
|
76
|
+
#### Source A: Codex Git History (if codex project found)
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
git -C {codex_repo} log --oneline --since="7 days ago" -- projects/{project}/
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Parse commits to understand recent activity:
|
|
83
|
+
- DECISIONS.md changes → decisions made
|
|
84
|
+
- New artifacts → meetings, documents produced
|
|
85
|
+
- CONTEXT.md changes → project evolution
|
|
86
|
+
- PRD.md/TECH-DESIGN.md changes → documentation progress
|
|
87
|
+
|
|
88
|
+
Generate human-readable draft bullets from the git history.
|
|
89
|
+
|
|
90
|
+
#### Source B: Jira MCP (if configured)
|
|
91
|
+
|
|
92
|
+
**Check MCP availability:**
|
|
93
|
+
```
|
|
94
|
+
mcp__atlassian__getAccessibleAtlassianResources
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
If available and `jira.epic` is set, run two JQL queries:
|
|
98
|
+
|
|
99
|
+
1. **Recently completed + in progress:**
|
|
100
|
+
```
|
|
101
|
+
parent = {jira.epic} AND (status changed to Done AFTER -7d OR statusCategory in ("In Progress"))
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
2. **Up next:**
|
|
105
|
+
```
|
|
106
|
+
parent = {jira.epic} AND statusCategory = "To Do"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Categorise tickets:
|
|
110
|
+
|
|
111
|
+
| Jira Status | Category |
|
|
112
|
+
|-------------|----------|
|
|
113
|
+
| Done (last 7 days) | In flight (completed) |
|
|
114
|
+
| In Progress, In Review, In QA | In flight (active) |
|
|
115
|
+
| To Do, Backlog | Up next |
|
|
116
|
+
|
|
117
|
+
#### Combine Sources
|
|
118
|
+
|
|
119
|
+
If multiple sources available:
|
|
120
|
+
- Deduplicate where codex change and Jira ticket describe the same work
|
|
121
|
+
- Prefer Jira summaries for ticket-tracked work
|
|
122
|
+
- Include codex-only changes (decisions, meetings) not in Jira
|
|
123
|
+
|
|
124
|
+
**Present draft to user** for review/editing before finalising.
|
|
125
|
+
|
|
126
|
+
### 3. Gather Update Content
|
|
127
|
+
|
|
128
|
+
Ask user for (pre-fill from drafts where available):
|
|
129
|
+
|
|
130
|
+
1. **Status** - One of:
|
|
131
|
+
- `on_track` (green) - Everything proceeding as planned
|
|
132
|
+
- `at_risk` (yellow) - Some concerns or blockers emerging
|
|
133
|
+
- `blocked` (red) - Cannot proceed without resolution
|
|
134
|
+
|
|
135
|
+
2. **Current phase** - One of:
|
|
136
|
+
- `discovery` - Research and requirements gathering
|
|
137
|
+
- `post_discovery_feedback` - Incorporating discovery feedback
|
|
138
|
+
- `design` - Prototype and design work
|
|
139
|
+
- `post_design_feedback` - Incorporating design feedback
|
|
140
|
+
- `prd` - Writing PRD
|
|
141
|
+
- `tech_design` - Writing Tech Design
|
|
142
|
+
- `development` - Active implementation
|
|
143
|
+
- `qa` - QA & Testing
|
|
144
|
+
- `release` - Released to production
|
|
145
|
+
|
|
146
|
+
3. **In flight this week** - Bullet points (from draft or manual)
|
|
147
|
+
|
|
148
|
+
4. **Up next** - Bullet points (from draft or manual)
|
|
149
|
+
|
|
150
|
+
### 4. Format Message
|
|
151
|
+
|
|
152
|
+
See `references/formatting.md` for detailed formatting rules.
|
|
153
|
+
|
|
154
|
+
**Structure:**
|
|
155
|
+
```
|
|
156
|
+
*Status:* {status_emoji} *{status_text}*
|
|
157
|
+
|
|
158
|
+
*Where we're at*
|
|
159
|
+
{phase_checklist}
|
|
160
|
+
|
|
161
|
+
*In flight this week*
|
|
162
|
+
• {bullet 1}
|
|
163
|
+
• {bullet 2}
|
|
164
|
+
|
|
165
|
+
*Up next*
|
|
166
|
+
• {bullet 1}
|
|
167
|
+
• {bullet 2}
|
|
168
|
+
|
|
169
|
+
{links_footer if configured}
|
|
170
|
+
|
|
171
|
+
Posted with help from :droid:
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Add ` & :codex:` to footer if codex project was used.
|
|
175
|
+
|
|
176
|
+
### 5. Output
|
|
177
|
+
|
|
178
|
+
#### If Slack configured (channel + SLACK_USER_TOKEN):
|
|
179
|
+
|
|
180
|
+
**Post to primary channel:**
|
|
181
|
+
```bash
|
|
182
|
+
curl -s -X POST https://slack.com/api/chat.postMessage \
|
|
183
|
+
-H "Authorization: Bearer $SLACK_USER_TOKEN" \
|
|
184
|
+
-H "Content-Type: application/json; charset=utf-8" \
|
|
185
|
+
-d '{
|
|
186
|
+
"channel": "{slack.channel}",
|
|
187
|
+
"text": "{formatted_message}",
|
|
188
|
+
"unfurl_links": false
|
|
189
|
+
}'
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Check response for `"ok": true`. Save `ts` and `channel` from response.
|
|
193
|
+
|
|
194
|
+
**Crosspost (if crosspost_channel configured):**
|
|
195
|
+
|
|
196
|
+
Post summary version with link to full update:
|
|
197
|
+
```
|
|
198
|
+
*{project_title}*
|
|
199
|
+
|
|
200
|
+
{status_line}
|
|
201
|
+
{current_phase_only}
|
|
202
|
+
|
|
203
|
+
{in_flight_section}
|
|
204
|
+
|
|
205
|
+
:link: <{message_url}|View full update>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Message URL format: `https://orderful.slack.com/archives/{channel_id}/p{ts_without_dot}`
|
|
209
|
+
|
|
210
|
+
**Update canvas log (if canvas_id configured):**
|
|
211
|
+
```bash
|
|
212
|
+
curl -s -X POST https://slack.com/api/canvases.edit \
|
|
213
|
+
-H "Authorization: Bearer $SLACK_USER_TOKEN" \
|
|
214
|
+
-H "Content-Type: application/json; charset=utf-8" \
|
|
215
|
+
-d '{
|
|
216
|
+
"canvas_id": "{slack.canvas_id}",
|
|
217
|
+
"changes": [{
|
|
218
|
+
"operation": "insert_at_start",
|
|
219
|
+
"document_content": {
|
|
220
|
+
"type": "markdown",
|
|
221
|
+
"markdown": "### {date}\n{status} · {current_phase}\n[View update]({message_url})\n\n---"
|
|
222
|
+
}
|
|
223
|
+
}]
|
|
224
|
+
}'
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Confirm to user:**
|
|
228
|
+
- "Posted update to #{channel}"
|
|
229
|
+
- "Cross-posted to #{crosspost_channel}" (if applicable)
|
|
230
|
+
- "Added to canvas log" (if applicable)
|
|
231
|
+
|
|
232
|
+
#### If Slack NOT configured:
|
|
233
|
+
|
|
234
|
+
Print the formatted message to terminal.
|
|
235
|
+
|
|
236
|
+
Tell user: "Slack not configured. To post updates directly, add `slack.channel` to your project's CONTEXT.md and set `SLACK_USER_TOKEN` in your environment."
|
|
237
|
+
|
|
238
|
+
### Error Handling
|
|
239
|
+
|
|
240
|
+
| Error | Action |
|
|
241
|
+
|-------|--------|
|
|
242
|
+
| No SLACK_USER_TOKEN | Print to terminal, suggest setup |
|
|
243
|
+
| Slack API error | Show error, offer to print instead |
|
|
244
|
+
| Jira MCP not available | Skip Jira, continue with other sources |
|
|
245
|
+
| No codex project found | Continue with manual input |
|
|
246
|
+
|
|
247
|
+
## Configuration
|
|
248
|
+
|
|
249
|
+
No required configuration. Optional settings via `droid config`:
|
|
250
|
+
|
|
251
|
+
| Setting | Description |
|
|
252
|
+
|---------|-------------|
|
|
253
|
+
| `default_crosspost_channel` | Default channel for cross-posts if not in project metadata |
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Formatting Reference
|
|
2
|
+
|
|
3
|
+
Detailed formatting rules for status updates.
|
|
4
|
+
|
|
5
|
+
## Status Emoji
|
|
6
|
+
|
|
7
|
+
| Status | Emoji | Display Text |
|
|
8
|
+
|--------|-------|--------------|
|
|
9
|
+
| `on_track` | `:large_green_circle:` | On track |
|
|
10
|
+
| `at_risk` | `:large_yellow_circle:` | At risk |
|
|
11
|
+
| `blocked` | `:red_circle:` | Blocked |
|
|
12
|
+
|
|
13
|
+
## Phase Checklist
|
|
14
|
+
|
|
15
|
+
### Phases in Order
|
|
16
|
+
|
|
17
|
+
1. `discovery` - Research and requirements gathering
|
|
18
|
+
2. `post_discovery_feedback` - Incorporating discovery feedback
|
|
19
|
+
3. `design` - Prototype and design work
|
|
20
|
+
4. `post_design_feedback` - Incorporating design feedback
|
|
21
|
+
5. `prd` - Writing PRD
|
|
22
|
+
6. `tech_design` - Writing Tech Design
|
|
23
|
+
7. `development` - Active implementation
|
|
24
|
+
8. `qa` - QA & Testing
|
|
25
|
+
9. `release` - Released to production
|
|
26
|
+
|
|
27
|
+
### Phase Emoji
|
|
28
|
+
|
|
29
|
+
| State | Emoji |
|
|
30
|
+
|-------|-------|
|
|
31
|
+
| completed | `:check:` |
|
|
32
|
+
| current | `:work-in-progress-sign:` |
|
|
33
|
+
| upcoming | `:waiting-to-start:` |
|
|
34
|
+
|
|
35
|
+
### Collapsed Groups
|
|
36
|
+
|
|
37
|
+
When all phases in a group are completed or upcoming (not current), collapse them:
|
|
38
|
+
|
|
39
|
+
| Group | Phases | Collapsed Name |
|
|
40
|
+
|-------|--------|----------------|
|
|
41
|
+
| 1 | discovery, post_discovery_feedback | "Discovery & Post-Discovery Feedback" |
|
|
42
|
+
| 2 | design, post_design_feedback | "Prototype, Design & Post-Design Feedback" |
|
|
43
|
+
| 3 | prd, tech_design | "PRD & Tech Design" |
|
|
44
|
+
| 4 | development | "Development" |
|
|
45
|
+
| 5 | qa, release | "QA → Release" |
|
|
46
|
+
|
|
47
|
+
### Display Rules
|
|
48
|
+
|
|
49
|
+
1. **Completed phases** - Collapse into groups, show with `:check:`
|
|
50
|
+
2. **Current phase** - Show on its own line with `:work-in-progress-sign:` and **bold**
|
|
51
|
+
3. **Upcoming phases** - Collapse into chain with `→`, show with `:waiting-to-start:`
|
|
52
|
+
|
|
53
|
+
### Examples
|
|
54
|
+
|
|
55
|
+
**Current = `development`:**
|
|
56
|
+
```
|
|
57
|
+
*Where we're at*
|
|
58
|
+
:check: Discovery & Post-Discovery Feedback
|
|
59
|
+
:check: Prototype, Design & Post-Design Feedback
|
|
60
|
+
:check: PRD & Tech Design
|
|
61
|
+
:work-in-progress-sign: *Development*
|
|
62
|
+
:waiting-to-start: QA → Release
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Current = `prd`:**
|
|
66
|
+
```
|
|
67
|
+
*Where we're at*
|
|
68
|
+
:check: Discovery & Post-Discovery Feedback
|
|
69
|
+
:check: Prototype, Design & Post-Design Feedback
|
|
70
|
+
:work-in-progress-sign: *PRD*
|
|
71
|
+
:waiting-to-start: Tech Design → Development → QA → Release
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Current = `post_discovery_feedback`:**
|
|
75
|
+
```
|
|
76
|
+
*Where we're at*
|
|
77
|
+
:check: Discovery
|
|
78
|
+
:work-in-progress-sign: *Post-Discovery Feedback*
|
|
79
|
+
:waiting-to-start: Prototype, Design & Post-Design Feedback → PRD & Tech Design → Development → QA → Release
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Current = `design`:**
|
|
83
|
+
```
|
|
84
|
+
*Where we're at*
|
|
85
|
+
:check: Discovery & Post-Discovery Feedback
|
|
86
|
+
:work-in-progress-sign: *Prototype/Design*
|
|
87
|
+
:waiting-to-start: Post-Design Feedback → PRD & Tech Design → Development → QA → Release
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Links Footer
|
|
91
|
+
|
|
92
|
+
Only include links that are configured in project metadata:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
:link: <{prd_url}|PRD> · <{tech_design_url}|Tech Design> · <{figma_url}|Figma>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Omit any link that isn't set. If no links configured, omit the entire footer.
|
|
99
|
+
|
|
100
|
+
## Full Message Template
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
*Status:* {status_emoji} *{status_text}*
|
|
104
|
+
|
|
105
|
+
*Where we're at*
|
|
106
|
+
{phase_checklist}
|
|
107
|
+
|
|
108
|
+
*In flight this week*
|
|
109
|
+
• {bullet 1}
|
|
110
|
+
• {bullet 2}
|
|
111
|
+
|
|
112
|
+
*Up next*
|
|
113
|
+
• {bullet 1}
|
|
114
|
+
• {bullet 2}
|
|
115
|
+
|
|
116
|
+
{links_footer}
|
|
117
|
+
|
|
118
|
+
Posted with help from :droid:{ & :codex: if used}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Crosspost Template (Summary Version)
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
*{project_title}*
|
|
125
|
+
|
|
126
|
+
{status_line}
|
|
127
|
+
{current_phase_only - e.g., ":work-in-progress-sign: *Development*"}
|
|
128
|
+
|
|
129
|
+
{in_flight_section}
|
|
130
|
+
|
|
131
|
+
:link: <{message_url}|View full update>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Example Full Output
|
|
135
|
+
|
|
136
|
+
**Example 1: Development phase, on track**
|
|
137
|
+
```
|
|
138
|
+
*Status:* :large_green_circle: *On track*
|
|
139
|
+
|
|
140
|
+
*Where we're at*
|
|
141
|
+
:check: Discovery & Post-Discovery Feedback
|
|
142
|
+
:check: Prototype, Design & Post-Design Feedback
|
|
143
|
+
:check: PRD & Tech Design
|
|
144
|
+
:work-in-progress-sign: *Development*
|
|
145
|
+
:waiting-to-start: QA → Release
|
|
146
|
+
|
|
147
|
+
*In flight this week*
|
|
148
|
+
• Implementing scenario template API
|
|
149
|
+
• Adding copy endpoint for templates
|
|
150
|
+
|
|
151
|
+
*Up next*
|
|
152
|
+
• Fan-out orchestration design
|
|
153
|
+
• Integration tests
|
|
154
|
+
|
|
155
|
+
:link: <url|PRD> · <url|Tech Design> · <url|Figma>
|
|
156
|
+
|
|
157
|
+
Posted with help from :droid: & :codex:
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Example 2: PRD phase, at risk**
|
|
161
|
+
```
|
|
162
|
+
*Status:* :large_yellow_circle: *At risk*
|
|
163
|
+
|
|
164
|
+
*Where we're at*
|
|
165
|
+
:check: Discovery & Post-Discovery Feedback
|
|
166
|
+
:check: Prototype, Design & Post-Design Feedback
|
|
167
|
+
:work-in-progress-sign: *PRD*
|
|
168
|
+
:waiting-to-start: Tech Design → Development → QA → Release
|
|
169
|
+
|
|
170
|
+
*In flight this week*
|
|
171
|
+
• Finalising requirements with stakeholders
|
|
172
|
+
• Waiting on legal review for data handling
|
|
173
|
+
|
|
174
|
+
*Up next*
|
|
175
|
+
• Tech design kickoff
|
|
176
|
+
|
|
177
|
+
:link: <url|PRD>
|
|
178
|
+
|
|
179
|
+
Posted with help from :droid: & :codex:
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Example 3: No Slack, printed to terminal**
|
|
183
|
+
```
|
|
184
|
+
Status: On track
|
|
185
|
+
|
|
186
|
+
Where we're at
|
|
187
|
+
✓ Discovery & Post-Discovery Feedback
|
|
188
|
+
✓ Prototype, Design & Post-Design Feedback
|
|
189
|
+
→ Development
|
|
190
|
+
○ QA → Release
|
|
191
|
+
|
|
192
|
+
In flight this week
|
|
193
|
+
• Building the feature
|
|
194
|
+
• Writing tests
|
|
195
|
+
|
|
196
|
+
Up next
|
|
197
|
+
• Code review
|
|
198
|
+
• QA handoff
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
Tip: To post this to Slack, add slack.channel to your project's CONTEXT.md
|
|
202
|
+
and set SLACK_USER_TOKEN in your environment.
|
|
203
|
+
```
|