@orderful/droid 0.31.1 → 0.32.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 +17 -4
- package/AGENTS.md +16 -0
- package/CHANGELOG.md +90 -0
- package/dist/bin/droid.js +515 -434
- package/dist/commands/setup.d.ts +1 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/tui/components/PlatformBadges.d.ts +6 -0
- package/dist/commands/tui/components/PlatformBadges.d.ts.map +1 -0
- package/dist/commands/tui/components/SettingsDetails.d.ts +4 -1
- package/dist/commands/tui/components/SettingsDetails.d.ts.map +1 -1
- package/dist/commands/tui/types.d.ts +1 -1
- package/dist/commands/tui/types.d.ts.map +1 -1
- package/dist/commands/tui/views/SetupScreen.d.ts +3 -2
- package/dist/commands/tui/views/SetupScreen.d.ts.map +1 -1
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/index.js +138 -86
- package/dist/lib/agents.d.ts +7 -2
- package/dist/lib/agents.d.ts.map +1 -1
- package/dist/lib/platforms.d.ts +10 -1
- package/dist/lib/platforms.d.ts.map +1 -1
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/types.d.ts +5 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/tools/brain/.claude-plugin/plugin.json +1 -1
- package/dist/tools/brain/TOOL.yaml +1 -1
- package/dist/tools/brain/commands/brain.md +13 -11
- package/dist/tools/brain/commands/scratchpad.md +4 -6
- package/dist/tools/brain/skills/brain/SKILL.md +62 -105
- package/dist/tools/brain/skills/brain/references/templates.md +37 -5
- package/dist/tools/brain/skills/brain/references/workflows.md +27 -16
- package/dist/tools/brain/skills/brain-obsidian/references/workflows.md +1 -1
- package/dist/tools/codex/.claude-plugin/plugin.json +1 -1
- package/dist/tools/codex/TOOL.yaml +1 -1
- package/dist/tools/codex/commands/codex.md +15 -12
- package/dist/tools/codex/skills/codex/SKILL.md +30 -63
- package/dist/tools/codex/skills/codex/references/creating.md +2 -2
- package/dist/tools/codex/skills/codex/references/decisions.md +1 -1
- package/dist/tools/droid/.claude-plugin/plugin.json +1 -1
- package/dist/tools/droid/TOOL.yaml +1 -1
- package/dist/tools/droid/skills/droid/SKILL.md +48 -409
- package/dist/tools/project/.claude-plugin/plugin.json +1 -1
- package/dist/tools/project/TOOL.yaml +1 -1
- package/dist/tools/project/commands/project.md +12 -12
- package/dist/tools/project/skills/project/SKILL.md +12 -4
- package/dist/tools/project/skills/project/references/creating.md +2 -2
- package/dist/tools/project/skills/project/references/loading.md +17 -3
- package/dist/tools/tech-design/skills/tech-design/references/think.md +1 -1
- package/dist/tools/wrapup/.claude-plugin/plugin.json +16 -0
- package/dist/tools/wrapup/TOOL.yaml +16 -0
- package/dist/tools/wrapup/commands/wrapup.md +21 -0
- package/dist/tools/wrapup/skills/wrapup/SKILL.md +86 -0
- package/dist/tools/wrapup/skills/wrapup/references/output-schema.md +93 -0
- package/dist/tools/wrapup/skills/wrapup/references/subagent-prompts.md +87 -0
- package/package.json +1 -1
- package/src/commands/setup.ts +67 -61
- package/src/commands/tui/components/PlatformBadges.tsx +36 -0
- package/src/commands/tui/components/SettingsDetails.tsx +16 -4
- package/src/commands/tui/types.ts +1 -1
- package/src/commands/tui/views/SetupScreen.tsx +26 -49
- package/src/commands/tui.tsx +21 -9
- package/src/lib/agents.ts +23 -7
- package/src/lib/platforms.ts +44 -1
- package/src/lib/skills.ts +79 -40
- package/src/lib/types.ts +11 -0
- package/src/tools/brain/.claude-plugin/plugin.json +1 -1
- package/src/tools/brain/TOOL.yaml +1 -1
- package/src/tools/brain/commands/brain.md +13 -11
- package/src/tools/brain/commands/scratchpad.md +4 -6
- package/src/tools/brain/skills/brain/SKILL.md +62 -105
- package/src/tools/brain/skills/brain/references/templates.md +37 -5
- package/src/tools/brain/skills/brain/references/workflows.md +27 -16
- package/src/tools/brain/skills/brain-obsidian/references/workflows.md +1 -1
- package/src/tools/codex/.claude-plugin/plugin.json +1 -1
- package/src/tools/codex/TOOL.yaml +1 -1
- package/src/tools/codex/commands/codex.md +15 -12
- package/src/tools/codex/skills/codex/SKILL.md +30 -63
- package/src/tools/codex/skills/codex/references/creating.md +2 -2
- package/src/tools/codex/skills/codex/references/decisions.md +1 -1
- package/src/tools/droid/.claude-plugin/plugin.json +1 -1
- package/src/tools/droid/TOOL.yaml +1 -1
- package/src/tools/droid/skills/droid/SKILL.md +48 -409
- package/src/tools/project/.claude-plugin/plugin.json +1 -1
- package/src/tools/project/TOOL.yaml +1 -1
- package/src/tools/project/commands/project.md +12 -12
- package/src/tools/project/skills/project/SKILL.md +12 -4
- package/src/tools/project/skills/project/references/creating.md +2 -2
- package/src/tools/project/skills/project/references/loading.md +17 -3
- package/src/tools/tech-design/skills/tech-design/references/think.md +1 -1
- package/src/tools/wrapup/.claude-plugin/plugin.json +16 -0
- package/src/tools/wrapup/TOOL.yaml +16 -0
- package/src/tools/wrapup/commands/wrapup.md +21 -0
- package/src/tools/wrapup/skills/wrapup/SKILL.md +86 -0
- package/src/tools/wrapup/skills/wrapup/references/output-schema.md +93 -0
- package/src/tools/wrapup/skills/wrapup/references/subagent-prompts.md +87 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: project
|
|
3
3
|
description: "Manage project context files for persistent AI memory across sessions"
|
|
4
|
-
argument-hint: "[{keywords} | update | create {name}]"
|
|
4
|
+
argument-hint: "[search {keywords} | update | create {name}]"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# /project
|
|
@@ -10,21 +10,21 @@ argument-hint: "[{keywords} | update | create {name}]"
|
|
|
10
10
|
|
|
11
11
|
**Your task:** Invoke the **project skill** with these arguments.
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Examples
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
- `/project search droid` → Search for and load project matching "droid"
|
|
16
|
+
- `/project search platform -- show changelog` → Search, load, then show changelog
|
|
17
|
+
- `/project update` → Update from conversation context
|
|
18
|
+
- `/project create new-feature` → Create a new project
|
|
18
19
|
|
|
19
20
|
## Quick Reference
|
|
20
21
|
|
|
21
22
|
```
|
|
22
|
-
/project
|
|
23
|
-
/project {keywords}
|
|
24
|
-
/project
|
|
25
|
-
/project
|
|
23
|
+
/project # List and select a project
|
|
24
|
+
/project search {keywords} # Search for existing project
|
|
25
|
+
/project search {keywords} -- {q} # Search, load, then execute follow-up
|
|
26
|
+
/project update # Update from conversation context
|
|
27
|
+
/project create {name} # Create new project
|
|
26
28
|
```
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
See the **project skill** for complete documentation and procedures.
|
|
30
|
+
See the **project skill** for complete documentation.
|
|
@@ -46,19 +46,27 @@ Default `projects_dir` by AI tool (only if overrides.yaml is missing or lacks `p
|
|
|
46
46
|
| Command | Action |
|
|
47
47
|
| ------------------------------------- | ------------------------------------------------------ |
|
|
48
48
|
| `/project` | List and select a project |
|
|
49
|
-
| `/project {keywords}` |
|
|
49
|
+
| `/project search {keywords}` | Search for existing project (fuzzy-match and load) |
|
|
50
|
+
| `/project search {keywords} -- {instruction}` | Search, load, then execute follow-up instruction |
|
|
50
51
|
| `/project create {name}` | Create new project (requires `create` keyword) |
|
|
51
52
|
| `/project create --from codex:{name}` | Create project seeded with codex context |
|
|
52
53
|
| `/project update` | Update from conversation context |
|
|
53
54
|
|
|
54
|
-
**IMPORTANT:**
|
|
55
|
+
**IMPORTANT:** Use `/project search {keywords}` to find and load existing projects. Only use `/project create {name}` when the user explicitly wants to create a new project.
|
|
55
56
|
|
|
56
57
|
## Loading a Project
|
|
57
58
|
|
|
58
|
-
**Trigger:** `/project {keywords}` or user asks to load/open a project
|
|
59
|
+
**Trigger:** `/project search {keywords}` or user asks to load/open a project
|
|
59
60
|
|
|
60
61
|
**TLDR:** Search for and load an existing project. Fuzzy-match keywords against project folders, read PROJECT.md, summarize context.
|
|
61
62
|
|
|
63
|
+
**Follow-up instructions:** Use `--` to add an instruction to execute after loading:
|
|
64
|
+
```bash
|
|
65
|
+
/project search droid -- show the changelog
|
|
66
|
+
/project search platform -- what's the current status?
|
|
67
|
+
```
|
|
68
|
+
Parse args by splitting on ` -- `. First part = search terms, second part = instruction to execute after loading.
|
|
69
|
+
|
|
62
70
|
Full procedure: `references/loading.md`
|
|
63
71
|
|
|
64
72
|
## Updating a Project
|
|
@@ -86,7 +94,7 @@ Templates: `references/templates.md`
|
|
|
86
94
|
|
|
87
95
|
Projects work best in a cycle:
|
|
88
96
|
|
|
89
|
-
1. **Load** - `/project {name}` gives Claude full context
|
|
97
|
+
1. **Load** - `/project search {name}` gives Claude full context
|
|
90
98
|
2. **Research/Plan** - Explore the problem, consider approaches
|
|
91
99
|
3. **Document** - Capture decisions in PROJECT.md before implementing
|
|
92
100
|
4. **Implement** - Build with full context of why decisions were made
|
|
@@ -123,7 +123,7 @@ Bridge shared organizational knowledge (codex) to personal working memory (proje
|
|
|
123
123
|
- Technical details from tech design
|
|
124
124
|
|
|
125
125
|
Full codex docs remain at: {codex_repo}/projects/{name}/
|
|
126
|
-
Use `/codex {name}` to load the complete shared context.
|
|
126
|
+
Use `/codex search {name}` to load the complete shared context.
|
|
127
127
|
```
|
|
128
128
|
|
|
129
129
|
### Error Handling
|
|
@@ -144,7 +144,7 @@ Try: /project create --from codex:partnership-automation
|
|
|
144
144
|
A project named "{name}" already exists at {path}.
|
|
145
145
|
|
|
146
146
|
Options:
|
|
147
|
-
- Load existing: /project {name}
|
|
147
|
+
- Load existing: /project search {name}
|
|
148
148
|
- Use different name: /project create other-name --from codex:{codex-name}
|
|
149
149
|
```
|
|
150
150
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Loading a Project
|
|
2
2
|
|
|
3
|
-
**Trigger:** `/project {keywords}` or
|
|
3
|
+
**Trigger:** `/project search {keywords}` or `/project search {keywords} -- {instruction}`
|
|
4
4
|
|
|
5
|
-
**IMPORTANT:** This is a SEARCH operation.
|
|
5
|
+
**IMPORTANT:** This is a SEARCH operation. The `search` keyword is required. Creating requires the explicit `/project create {name}` command.
|
|
6
6
|
|
|
7
7
|
## Procedure
|
|
8
8
|
|
|
@@ -33,10 +33,12 @@
|
|
|
33
33
|
- Summarize key context (2-3 sentences)
|
|
34
34
|
- Use project contents for all subsequent work in the session
|
|
35
35
|
|
|
36
|
+
7. **If `-- {instruction}` provided:** Execute the follow-up instruction against the loaded project
|
|
37
|
+
|
|
36
38
|
## Example
|
|
37
39
|
|
|
38
40
|
```
|
|
39
|
-
User: /project transaction templates
|
|
41
|
+
User: /project search transaction templates
|
|
40
42
|
|
|
41
43
|
Claude: Found project "transaction-templates". Loading...
|
|
42
44
|
|
|
@@ -46,3 +48,15 @@ This project covers Handlebars templates for EDI transaction generation.
|
|
|
46
48
|
Key focus areas: template rendering service, permission controls, and
|
|
47
49
|
the upcoming UI for template management.
|
|
48
50
|
```
|
|
51
|
+
|
|
52
|
+
**With follow-up instruction:**
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
User: /project search droid -- show changelog
|
|
56
|
+
|
|
57
|
+
Claude: Found project "droid". Loading...
|
|
58
|
+
[project context]
|
|
59
|
+
|
|
60
|
+
Here's the recent changelog:
|
|
61
|
+
[changelog content]
|
|
62
|
+
```
|
|
@@ -227,7 +227,7 @@ Which would you prefer?
|
|
|
227
227
|
**If option 3 (create comment):**
|
|
228
228
|
|
|
229
229
|
```bash
|
|
230
|
-
#
|
|
230
|
+
# Get user_mention from: droid config tech-design
|
|
231
231
|
# Add comment to thought doc:
|
|
232
232
|
|
|
233
233
|
> @{user} Explored events vs polling for status updates
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "droid-wrapup",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Session wrap-up that captures decisions, learnings, and open items to persistent docs.",
|
|
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
|
+
"wrapup"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: wrapup
|
|
2
|
+
description: "Session wrap-up that captures decisions, learnings, and open items to persistent docs."
|
|
3
|
+
version: 0.1.0
|
|
4
|
+
status: alpha
|
|
5
|
+
|
|
6
|
+
includes:
|
|
7
|
+
skills:
|
|
8
|
+
- name: wrapup
|
|
9
|
+
required: true
|
|
10
|
+
commands:
|
|
11
|
+
- name: wrapup
|
|
12
|
+
is_alias: false
|
|
13
|
+
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
config_schema: {}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wrapup
|
|
3
|
+
description: "Session wrap-up that captures decisions, learnings, and open items"
|
|
4
|
+
argument-hint: ""
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /wrapup
|
|
8
|
+
|
|
9
|
+
**User invoked:** `/wrapup $ARGUMENTS`
|
|
10
|
+
|
|
11
|
+
**Your task:** Invoke the **wrapup skill** with these arguments.
|
|
12
|
+
|
|
13
|
+
## Quick Reference
|
|
14
|
+
|
|
15
|
+
Wrap up the current session using the context lifeboat pattern:
|
|
16
|
+
1. Quickly extract session context to temp file (you do this)
|
|
17
|
+
2. Spawn subagents to analyse artifacts (fresh context)
|
|
18
|
+
3. Synthesise findings and confirm with user
|
|
19
|
+
4. Write to brain docs, project files, or codex on approval
|
|
20
|
+
|
|
21
|
+
See the **wrapup skill** for complete documentation.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wrapup
|
|
3
|
+
description: "Session wrap-up that captures decisions, learnings, and open items to persistent docs. Use when ending a session to persist context. User prompts like 'let's wrap up', 'end of session', 'capture what we did'."
|
|
4
|
+
allowed-tools: [Read, Edit, Write, Glob, Grep, Bash, Task]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Wrapup Skill
|
|
8
|
+
|
|
9
|
+
Session wrap-up that captures decisions, learnings, and open items before closing.
|
|
10
|
+
|
|
11
|
+
## Context Lifeboat Pattern
|
|
12
|
+
|
|
13
|
+
This skill runs at the END of sessions when context pressure is highest.
|
|
14
|
+
To avoid triggering compaction mid-wrapup, offload heavy lifting to fresh-context subagents.
|
|
15
|
+
|
|
16
|
+
## Phase 1: Quick Context Extraction
|
|
17
|
+
|
|
18
|
+
You have the conversation history. Quickly extract and write to `/tmp/wrapup-session-brief.md`:
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
# Session Brief
|
|
22
|
+
|
|
23
|
+
## User Goals
|
|
24
|
+
- {what the user was trying to accomplish}
|
|
25
|
+
|
|
26
|
+
## Decisions Made
|
|
27
|
+
- {explicit choices, design decisions, why}
|
|
28
|
+
|
|
29
|
+
## Key Learnings
|
|
30
|
+
- {discoveries, aha moments, findings}
|
|
31
|
+
|
|
32
|
+
## Open Items
|
|
33
|
+
- {unresolved questions, blockers, WIP state}
|
|
34
|
+
|
|
35
|
+
## Files Touched
|
|
36
|
+
- {files discussed/modified and why}
|
|
37
|
+
|
|
38
|
+
## Mentioned But Not Done
|
|
39
|
+
- {bugs to file, docs to update, future work}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Do this IMMEDIATELY. Don't analyse deeply—just dump what you know.
|
|
43
|
+
|
|
44
|
+
## Phase 2: Artifact Analysis
|
|
45
|
+
|
|
46
|
+
Spawn subagents **in parallel** to analyse artifacts. Each reads your session brief and analyses one area.
|
|
47
|
+
|
|
48
|
+
| Subagent | Type | Analyses |
|
|
49
|
+
|----------|------|----------|
|
|
50
|
+
| Git state | Bash | Uncommitted changes, branch status |
|
|
51
|
+
| Project file | Explore | ~/.droid/project.md staleness |
|
|
52
|
+
| Brain docs | Explore | Recently modified docs needing updates |
|
|
53
|
+
| Codex gaps | Explore | Knowledge worth codifying |
|
|
54
|
+
|
|
55
|
+
See `references/subagent-prompts.md` for detailed prompts.
|
|
56
|
+
|
|
57
|
+
## Phase 3: Synthesise and Present
|
|
58
|
+
|
|
59
|
+
Combine subagent findings into a summary:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
## Wrapup Summary
|
|
63
|
+
|
|
64
|
+
**Session:** {brief description}
|
|
65
|
+
|
|
66
|
+
**Uncommitted Work:**
|
|
67
|
+
{from git subagent}
|
|
68
|
+
|
|
69
|
+
**Proposed Updates:**
|
|
70
|
+
1. **{destination}** ({type})
|
|
71
|
+
- {item}
|
|
72
|
+
|
|
73
|
+
**Suggested Actions:**
|
|
74
|
+
- {action}: {description}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
See `references/output-schema.md` for structured output format.
|
|
78
|
+
|
|
79
|
+
## Phase 4: Confirm and Write
|
|
80
|
+
|
|
81
|
+
Present options using AskUserQuestion:
|
|
82
|
+
- **"Yes, update all"** → Write to all destinations
|
|
83
|
+
- **"Let me review first"** → Show detailed diff for each
|
|
84
|
+
- **"Skip"** → Close without updating
|
|
85
|
+
|
|
86
|
+
On approval, write updates using appropriate format for each destination.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Output Schema
|
|
2
|
+
|
|
3
|
+
Structured format for subagent findings. Main agent uses this to synthesise the wrapup summary.
|
|
4
|
+
|
|
5
|
+
## Schema
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"active_contexts": [
|
|
10
|
+
{
|
|
11
|
+
"type": "brain | project | codex | git",
|
|
12
|
+
"name": "human-readable name",
|
|
13
|
+
"path": "file path (if applicable)",
|
|
14
|
+
"status": "active | stale | clean"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"proposed_updates": [
|
|
18
|
+
{
|
|
19
|
+
"destination": "filename or identifier",
|
|
20
|
+
"destination_type": "brain | project | codex",
|
|
21
|
+
"items": [
|
|
22
|
+
{
|
|
23
|
+
"category": "decision | learning | open_item | next_step",
|
|
24
|
+
"content": "text to add"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"suggested_actions": [
|
|
30
|
+
{
|
|
31
|
+
"type": "commit | codex_topic | file_bug | update_docs",
|
|
32
|
+
"content": "description of suggested action",
|
|
33
|
+
"priority": "high | medium | low"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Field Descriptions
|
|
40
|
+
|
|
41
|
+
### active_contexts
|
|
42
|
+
|
|
43
|
+
What's currently "open" or relevant:
|
|
44
|
+
- **brain**: Active planning/research docs
|
|
45
|
+
- **project**: ~/.droid/project.md if it exists
|
|
46
|
+
- **codex**: Relevant codex entries touched
|
|
47
|
+
- **git**: Current branch and uncommitted state
|
|
48
|
+
|
|
49
|
+
### proposed_updates
|
|
50
|
+
|
|
51
|
+
Concrete changes to write on approval:
|
|
52
|
+
- **destination**: Where to write (filename)
|
|
53
|
+
- **destination_type**: Which system (brain, project, codex)
|
|
54
|
+
- **items**: List of things to add, categorised
|
|
55
|
+
|
|
56
|
+
Item categories:
|
|
57
|
+
- `decision`: Explicit choice made during session
|
|
58
|
+
- `learning`: Discovery, insight, or finding
|
|
59
|
+
- `open_item`: Unresolved question or blocker
|
|
60
|
+
- `next_step`: Identified future work
|
|
61
|
+
|
|
62
|
+
### suggested_actions
|
|
63
|
+
|
|
64
|
+
Actions that need user judgment:
|
|
65
|
+
- `commit`: Git changes ready to commit
|
|
66
|
+
- `codex_topic`: Knowledge worth codifying
|
|
67
|
+
- `file_bug`: Bug discovered but not filed
|
|
68
|
+
- `update_docs`: Documentation that needs updating
|
|
69
|
+
|
|
70
|
+
## Example
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"active_contexts": [
|
|
75
|
+
{"type": "brain", "name": "plan-wrapup-tool", "path": "1-Projects/droid/plans/plan-wrapup-tool.md", "status": "active"},
|
|
76
|
+
{"type": "git", "name": "tf/wrapup-tool", "path": null, "status": "uncommitted"}
|
|
77
|
+
],
|
|
78
|
+
"proposed_updates": [
|
|
79
|
+
{
|
|
80
|
+
"destination": "plan-wrapup-tool.md",
|
|
81
|
+
"destination_type": "brain",
|
|
82
|
+
"items": [
|
|
83
|
+
{"category": "decision", "content": "Using context lifeboat pattern - main agent extracts, subagents analyse"},
|
|
84
|
+
{"category": "next_step", "content": "Test with real session, iterate on prompts"}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"suggested_actions": [
|
|
89
|
+
{"type": "commit", "content": "4 files ready: TOOL.yaml, SKILL.md, wrapup.md, changeset", "priority": "high"},
|
|
90
|
+
{"type": "codex_topic", "content": "Context lifeboat pattern for end-of-session tooling", "priority": "medium"}
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Subagent Prompts
|
|
2
|
+
|
|
3
|
+
Detailed prompts for Phase 2 artifact analysis. Spawn these in parallel using the Task tool.
|
|
4
|
+
|
|
5
|
+
## Git State Analysis
|
|
6
|
+
|
|
7
|
+
**Subagent type:** Bash
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Analyse git status and git diff in the current working directory. Categorise changes:
|
|
11
|
+
|
|
12
|
+
1. **Ready to commit** - Complete, coherent changes that could be committed now
|
|
13
|
+
2. **WIP** - Partial changes, incomplete features, or messy state
|
|
14
|
+
3. **Untracked files** - New files that might need to be added or ignored
|
|
15
|
+
|
|
16
|
+
For each category, list the files and briefly describe what changed.
|
|
17
|
+
|
|
18
|
+
Output format:
|
|
19
|
+
- Status: clean | uncommitted | wip
|
|
20
|
+
- Branch: {current branch name}
|
|
21
|
+
- Summary of uncommitted work (if any)
|
|
22
|
+
- Recommendation: commit now, stash, or leave as-is
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Project File Check
|
|
26
|
+
|
|
27
|
+
**Subagent type:** Explore
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
Read /tmp/wrapup-session-brief.md for session context.
|
|
31
|
+
|
|
32
|
+
Check if ~/.droid/project.md exists. If it does:
|
|
33
|
+
1. Read the current project file
|
|
34
|
+
2. Compare against session brief
|
|
35
|
+
3. Identify:
|
|
36
|
+
- Stale entries that should be updated or removed
|
|
37
|
+
- New items from the session to add (decisions, blockers, next steps)
|
|
38
|
+
- Status changes (completed items, new blockers)
|
|
39
|
+
|
|
40
|
+
Output specific proposed updates with exact text to add/change.
|
|
41
|
+
If no project file exists, note that and skip.
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Brain Doc Check
|
|
45
|
+
|
|
46
|
+
**Subagent type:** Explore
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Read /tmp/wrapup-session-brief.md for session context.
|
|
50
|
+
|
|
51
|
+
First, check ~/.droid/skills/brain/overrides.yaml for the brain_dir setting.
|
|
52
|
+
If not configured, skip brain doc analysis.
|
|
53
|
+
|
|
54
|
+
If configured:
|
|
55
|
+
1. Search the brain directory for recently modified .md files (last 24 hours)
|
|
56
|
+
2. Read any that seem related to the session topics
|
|
57
|
+
3. Check if they need updates based on session decisions/learnings
|
|
58
|
+
4. Look for @droid comments that were addressed
|
|
59
|
+
|
|
60
|
+
Output:
|
|
61
|
+
- Active brain docs found (if any)
|
|
62
|
+
- Proposed additions for each relevant doc
|
|
63
|
+
- Any resolved @droid comments to mark done
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Codex Gap Analysis
|
|
67
|
+
|
|
68
|
+
**Subagent type:** Explore
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
Read /tmp/wrapup-session-brief.md for session context.
|
|
72
|
+
|
|
73
|
+
Check if the codex skill is installed (~/.droid/skills/codex/overrides.yaml).
|
|
74
|
+
If not configured, skip codex analysis.
|
|
75
|
+
|
|
76
|
+
If the session involved:
|
|
77
|
+
- Deep research on a topic
|
|
78
|
+
- Discovering patterns or best practices
|
|
79
|
+
- Solving a non-trivial problem with reusable insights
|
|
80
|
+
|
|
81
|
+
Then suggest potential codex topics:
|
|
82
|
+
- Topic name
|
|
83
|
+
- Brief description of what to capture
|
|
84
|
+
- Why it's worth codifying (reusable, non-obvious, hard-won knowledge)
|
|
85
|
+
|
|
86
|
+
Output: List of suggested codex topics, or "No codex suggestions" if session was routine.
|
|
87
|
+
```
|
package/package.json
CHANGED
package/src/commands/setup.ts
CHANGED
|
@@ -7,6 +7,16 @@ import { homedir } from 'os';
|
|
|
7
7
|
import { loadConfig, saveConfig, configExists } from '../lib/config';
|
|
8
8
|
import { getBundledSkills } from '../lib/skills';
|
|
9
9
|
import { Platform, BuiltInOutput, type DroidConfig, type OutputPreference } from '../lib/types';
|
|
10
|
+
import { detectAllPlatforms } from '../lib/platforms';
|
|
11
|
+
|
|
12
|
+
// Re-export for external use
|
|
13
|
+
export { detectAllPlatforms, getActivePlatforms } from '../lib/platforms';
|
|
14
|
+
|
|
15
|
+
const PLATFORM_LABELS: Record<Platform, string> = {
|
|
16
|
+
[Platform.ClaudeCode]: 'Claude Code',
|
|
17
|
+
[Platform.Cursor]: 'Cursor',
|
|
18
|
+
[Platform.OpenCode]: 'OpenCode',
|
|
19
|
+
};
|
|
10
20
|
|
|
11
21
|
/**
|
|
12
22
|
* Permissions droid needs to operate without constant prompts
|
|
@@ -19,34 +29,6 @@ const DROID_PERMISSIONS = [
|
|
|
19
29
|
'Grep(~/.droid/**)',
|
|
20
30
|
];
|
|
21
31
|
|
|
22
|
-
/**
|
|
23
|
-
* Detect which platform is installed
|
|
24
|
-
* Priority: Claude Code > Cursor > OpenCode (Claude Code is most common)
|
|
25
|
-
*/
|
|
26
|
-
function detectPlatform(): Platform | null {
|
|
27
|
-
try {
|
|
28
|
-
execSync('claude --version', { stdio: 'ignore' });
|
|
29
|
-
return Platform.ClaudeCode;
|
|
30
|
-
} catch {
|
|
31
|
-
// Claude Code not found
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Check for Cursor - it's an app, check if .cursor directory exists
|
|
35
|
-
const cursorDir = join(homedir(), '.cursor');
|
|
36
|
-
if (existsSync(cursorDir)) {
|
|
37
|
-
return Platform.Cursor;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
execSync('opencode --version', { stdio: 'ignore' });
|
|
42
|
-
return Platform.OpenCode;
|
|
43
|
-
} catch {
|
|
44
|
-
// OpenCode not found
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
32
|
/**
|
|
51
33
|
* Try to get git username
|
|
52
34
|
*/
|
|
@@ -189,12 +171,19 @@ export async function setupCommand(): Promise<void> {
|
|
|
189
171
|
}
|
|
190
172
|
}
|
|
191
173
|
|
|
192
|
-
// Detect
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
174
|
+
// Detect ALL platforms
|
|
175
|
+
const detectedPlatforms = detectAllPlatforms();
|
|
176
|
+
|
|
177
|
+
if (detectedPlatforms.length === 0) {
|
|
178
|
+
console.log(chalk.yellow('⚠ No platforms detected (Claude Code, Cursor, or OpenCode)\n'));
|
|
179
|
+
} else if (detectedPlatforms.length === 1) {
|
|
180
|
+
console.log(chalk.green(`✓ Detected ${PLATFORM_LABELS[detectedPlatforms[0]]}\n`));
|
|
196
181
|
} else {
|
|
197
|
-
console.log(chalk.
|
|
182
|
+
console.log(chalk.green(`✓ Detected ${detectedPlatforms.length} platforms:`));
|
|
183
|
+
for (const p of detectedPlatforms) {
|
|
184
|
+
console.log(chalk.gray(` • ${PLATFORM_LABELS[p]}`));
|
|
185
|
+
}
|
|
186
|
+
console.log('');
|
|
198
187
|
}
|
|
199
188
|
|
|
200
189
|
// Detect git username
|
|
@@ -203,23 +192,29 @@ export async function setupCommand(): Promise<void> {
|
|
|
203
192
|
// Get dynamic output options
|
|
204
193
|
const outputOptions = getOutputOptions();
|
|
205
194
|
|
|
195
|
+
// Ask which platforms to ignore if multiple detected
|
|
196
|
+
let ignoredPlatformsAnswer: Platform[] = [];
|
|
197
|
+
if (detectedPlatforms.length > 1) {
|
|
198
|
+
const { ignored_platforms } = await inquirer.prompt<{ ignored_platforms: Platform[] }>([
|
|
199
|
+
{
|
|
200
|
+
type: 'checkbox',
|
|
201
|
+
name: 'ignored_platforms',
|
|
202
|
+
message: 'Which platforms should be ignored? (commands/agents won\'t be installed)',
|
|
203
|
+
choices: detectedPlatforms.map(p => ({
|
|
204
|
+
name: PLATFORM_LABELS[p],
|
|
205
|
+
value: p,
|
|
206
|
+
checked: false,
|
|
207
|
+
})),
|
|
208
|
+
},
|
|
209
|
+
]);
|
|
210
|
+
ignoredPlatformsAnswer = ignored_platforms;
|
|
211
|
+
}
|
|
212
|
+
|
|
206
213
|
const answers = await inquirer.prompt<{
|
|
207
|
-
platform: Platform;
|
|
208
214
|
user_mention: string;
|
|
209
215
|
output_preference: OutputPreference;
|
|
210
216
|
git_username: string;
|
|
211
217
|
}>([
|
|
212
|
-
{
|
|
213
|
-
type: 'list',
|
|
214
|
-
name: 'platform',
|
|
215
|
-
message: 'Which platform are you using?',
|
|
216
|
-
choices: [
|
|
217
|
-
{ name: 'Claude Code', value: Platform.ClaudeCode },
|
|
218
|
-
{ name: 'Cursor', value: Platform.Cursor },
|
|
219
|
-
{ name: 'OpenCode', value: Platform.OpenCode },
|
|
220
|
-
],
|
|
221
|
-
default: detectedPlatform || Platform.ClaudeCode,
|
|
222
|
-
},
|
|
223
218
|
{
|
|
224
219
|
type: 'input',
|
|
225
220
|
name: 'user_mention',
|
|
@@ -245,35 +240,46 @@ export async function setupCommand(): Promise<void> {
|
|
|
245
240
|
},
|
|
246
241
|
]);
|
|
247
242
|
|
|
243
|
+
// Determine primary platform (first detected that isn't ignored)
|
|
244
|
+
const ignoredPlatforms = ignoredPlatformsAnswer;
|
|
245
|
+
const activePlatforms = detectedPlatforms.filter(p => !ignoredPlatforms.includes(p));
|
|
246
|
+
const primaryPlatform = activePlatforms.length > 0
|
|
247
|
+
? activePlatforms[0]
|
|
248
|
+
: (detectedPlatforms[0] ?? Platform.ClaudeCode);
|
|
249
|
+
|
|
248
250
|
const existingConfig = loadConfig();
|
|
249
251
|
const config: DroidConfig = {
|
|
250
252
|
...existingConfig,
|
|
251
|
-
platform:
|
|
253
|
+
platform: primaryPlatform,
|
|
252
254
|
user_mention: answers.user_mention,
|
|
253
255
|
output_preference: answers.output_preference,
|
|
254
256
|
git_username: answers.git_username,
|
|
257
|
+
...(ignoredPlatforms.length > 0 && { ignored_platforms: ignoredPlatforms }),
|
|
255
258
|
};
|
|
256
259
|
|
|
257
260
|
saveConfig(config);
|
|
258
261
|
|
|
259
262
|
console.log(chalk.green('\n✓ Config saved to ~/.droid/config.yaml'));
|
|
260
263
|
|
|
261
|
-
// Configure
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
264
|
+
// Configure permissions for ALL active platforms
|
|
265
|
+
for (const platform of activePlatforms) {
|
|
266
|
+
const { added, alreadyPresent, error } = configurePlatformPermissions(platform);
|
|
267
|
+
if (error) {
|
|
268
|
+
console.log(chalk.red(`✗ ${PLATFORM_LABELS[platform]}: ${error}`));
|
|
269
|
+
} else if (platform === Platform.ClaudeCode) {
|
|
270
|
+
if (added.length > 0) {
|
|
271
|
+
console.log(chalk.green(`✓ Added droid permissions to ${PLATFORM_LABELS[platform]} settings`));
|
|
272
|
+
} else if (alreadyPresent) {
|
|
273
|
+
console.log(chalk.gray(` ${PLATFORM_LABELS[platform]} permissions already configured`));
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
console.log(chalk.gray(` ${PLATFORM_LABELS[platform]} directories ready`));
|
|
271
277
|
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
console.log(chalk.
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Show summary if multiple platforms
|
|
281
|
+
if (activePlatforms.length > 1) {
|
|
282
|
+
console.log(chalk.green(`\n✓ Will install to ${activePlatforms.length} platforms: ${activePlatforms.map(p => PLATFORM_LABELS[p]).join(', ')}`));
|
|
277
283
|
}
|
|
278
284
|
|
|
279
285
|
console.log(chalk.gray('\nRun `droid skills` to browse and install skills.'));
|