@orderful/droid 0.35.0 → 0.35.2

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.
Files changed (39) hide show
  1. package/.claude-plugin/marketplace.json +5 -5
  2. package/CHANGELOG.md +31 -0
  3. package/dist/bin/droid.js +22 -20
  4. package/dist/index.js +22 -20
  5. package/dist/lib/skills.d.ts.map +1 -1
  6. package/dist/tools/brain/.claude-plugin/plugin.json +1 -1
  7. package/dist/tools/brain/TOOL.yaml +1 -1
  8. package/dist/tools/brain/skills/brain-obsidian/SKILL.md +5 -4
  9. package/dist/tools/code-review/.claude-plugin/plugin.json +1 -1
  10. package/dist/tools/code-review/TOOL.yaml +1 -1
  11. package/dist/tools/code-review/skills/code-review/SKILL.md +7 -0
  12. package/dist/tools/codex/.claude-plugin/plugin.json +1 -1
  13. package/dist/tools/codex/TOOL.yaml +1 -1
  14. package/dist/tools/plan/.claude-plugin/plugin.json +1 -1
  15. package/dist/tools/plan/TOOL.yaml +1 -1
  16. package/dist/tools/plan/skills/plan/SKILL.md +7 -4
  17. package/dist/tools/plan/skills/plan/references/templates.md +1 -1
  18. package/dist/tools/plan/skills/plan/references/workflows.md +4 -4
  19. package/dist/tools/wrapup/.claude-plugin/plugin.json +1 -1
  20. package/dist/tools/wrapup/TOOL.yaml +1 -1
  21. package/dist/tools/wrapup/skills/wrapup/SKILL.md +10 -0
  22. package/package.json +1 -1
  23. package/src/lib/skills.ts +37 -20
  24. package/src/tools/brain/.claude-plugin/plugin.json +1 -1
  25. package/src/tools/brain/TOOL.yaml +1 -1
  26. package/src/tools/brain/skills/brain-obsidian/SKILL.md +5 -4
  27. package/src/tools/code-review/.claude-plugin/plugin.json +1 -1
  28. package/src/tools/code-review/TOOL.yaml +1 -1
  29. package/src/tools/code-review/skills/code-review/SKILL.md +7 -0
  30. package/src/tools/codex/.claude-plugin/plugin.json +1 -1
  31. package/src/tools/codex/TOOL.yaml +1 -1
  32. package/src/tools/plan/.claude-plugin/plugin.json +1 -1
  33. package/src/tools/plan/TOOL.yaml +1 -1
  34. package/src/tools/plan/skills/plan/SKILL.md +7 -4
  35. package/src/tools/plan/skills/plan/references/templates.md +1 -1
  36. package/src/tools/plan/skills/plan/references/workflows.md +4 -4
  37. package/src/tools/wrapup/.claude-plugin/plugin.json +1 -1
  38. package/src/tools/wrapup/TOOL.yaml +1 -1
  39. package/src/tools/wrapup/skills/wrapup/SKILL.md +10 -0
@@ -22,7 +22,7 @@
22
22
  {
23
23
  "name": "droid-brain",
24
24
  "description": "Your scratchpad (or brain) - a collaborative space for planning and research. Create docs with /brain plan, /brain research, or /brain review. Use @mentions for async discussion. Docs persist across sessions.",
25
- "version": "0.3.5",
25
+ "version": "0.3.6",
26
26
  "source": {
27
27
  "source": "github",
28
28
  "repo": "orderful/droid",
@@ -48,7 +48,7 @@
48
48
  {
49
49
  "name": "droid-code-review",
50
50
  "description": "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring.",
51
- "version": "0.2.2",
51
+ "version": "0.2.3",
52
52
  "source": {
53
53
  "source": "github",
54
54
  "repo": "orderful/droid",
@@ -61,7 +61,7 @@
61
61
  {
62
62
  "name": "droid-codex",
63
63
  "description": "Shared organizational knowledge - PRDs, tech designs, domains, proposals, patterns, and explored topics. Use when loading project context, searching codex, capturing decisions, or creating new entries.",
64
- "version": "0.2.0",
64
+ "version": "0.2.1",
65
65
  "source": {
66
66
  "source": "github",
67
67
  "repo": "orderful/droid",
@@ -87,7 +87,7 @@
87
87
  {
88
88
  "name": "droid-plan",
89
89
  "description": "Task-scoped planning with portable, structured plans. Use when planning implementation for a PR, ticket, or small feature. User prompts like 'let's plan this', 'can we start a plan', 'think through the implementation'.",
90
- "version": "0.1.0",
90
+ "version": "0.1.1",
91
91
  "source": {
92
92
  "source": "github",
93
93
  "repo": "orderful/droid",
@@ -126,7 +126,7 @@
126
126
  {
127
127
  "name": "droid-wrapup",
128
128
  "description": "Session wrap-up that captures decisions, learnings, and open items to persistent docs.",
129
- "version": "0.1.2",
129
+ "version": "0.1.3",
130
130
  "source": {
131
131
  "source": "github",
132
132
  "repo": "orderful/droid",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @orderful/droid
2
2
 
3
+ ## 0.35.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#213](https://github.com/Orderful/droid/pull/213) [`95a67d7`](https://github.com/Orderful/droid/commit/95a67d7f3bc57652113cf89bfb24de84d5d94490) Thanks [@frytyler](https://github.com/frytyler)! - Add explicit Configuration sections to all skills to prevent ambiguous config references. This ensures Claude sees the exact config commands (`droid config --get`) in the main SKILL.md file rather than having to look in references.
8
+
9
+ **Updated skills:**
10
+ - **wrapup** (v0.1.3): Added Configuration section explaining it uses configs from project, brain, and codex tools
11
+ - **code-review** (v0.2.3): Added Configuration section explaining optional brain integration
12
+ - **brain** (v0.3.6): Updated brain-obsidian to use explicit `droid config --get` commands instead of referencing override files directly
13
+
14
+ This follows the progressive disclosure principle: SKILL.md should have explicit config commands to prevent misinterpretation, with detailed procedures in references.
15
+
16
+ - [#213](https://github.com/Orderful/droid/pull/213) [`95a67d7`](https://github.com/Orderful/droid/commit/95a67d7f3bc57652113cf89bfb24de84d5d94490) Thanks [@frytyler](https://github.com/frytyler)! - Fix plan skill to use explicit config commands instead of deprecated syntax. The plan skill now clearly specifies `droid config --get tools.brain` and `droid config --get user_mention` instead of the ambiguous "Read config" instruction that was causing Claude to use the deprecated `droid config <tool>` command.
17
+
18
+ Also corrected `inbox_dir` to `inbox_folder` throughout plan skill docs to match the actual config schema.
19
+
20
+ ## 0.35.1
21
+
22
+ ### Patch Changes
23
+
24
+ - [#211](https://github.com/Orderful/droid/pull/211) [`6df8a25`](https://github.com/Orderful/droid/commit/6df8a2511a1680bec65618d0f5e6e684811cd922) Thanks [@frytyler](https://github.com/frytyler)! - Bump codex tool version to force reinstall with fixed subdirectory copying
25
+
26
+ Users who installed codex 0.2.0 before the fix would be missing references/review/ subdirectory. Bumping to 0.2.1 ensures they get the complete installation with all reference files.
27
+
28
+ - [#211](https://github.com/Orderful/droid/pull/211) [`6df8a25`](https://github.com/Orderful/droid/commit/6df8a2511a1680bec65618d0f5e6e684811cd922) Thanks [@frytyler](https://github.com/frytyler)! - Fix skill installation not copying reference and script subdirectories
29
+
30
+ The installSkill() function was only copying top-level files from references/ and scripts/ directories, causing subdirectories to be skipped. This blocked the /codex review feature which relies on references/review/workflow.md.
31
+
32
+ Added a generic copyDirectoryRecursive() helper that preserves directory structure while maintaining the existing file type filters (.md for references, .ts/.js/.py for scripts). Applied to both references/ and scripts/ copying.
33
+
3
34
  ## 0.35.0
4
35
 
5
36
  ### Minor Changes
package/dist/bin/droid.js CHANGED
@@ -1305,6 +1305,22 @@ function updateAllSkills() {
1305
1305
  }
1306
1306
  return result;
1307
1307
  }
1308
+ function copyDirectoryRecursive(source, target, fileFilter) {
1309
+ if (!existsSync6(target)) {
1310
+ mkdirSync4(target, { recursive: true });
1311
+ }
1312
+ const entries = readdirSync5(source, { withFileTypes: true });
1313
+ for (const entry of entries) {
1314
+ const sourcePath = join7(source, entry.name);
1315
+ const targetPath = join7(target, entry.name);
1316
+ if (entry.isDirectory()) {
1317
+ copyDirectoryRecursive(sourcePath, targetPath, fileFilter);
1318
+ } else if (entry.isFile() && fileFilter(entry.name)) {
1319
+ const content = readFileSync6(sourcePath, "utf-8");
1320
+ writeFileSync4(targetPath, content);
1321
+ }
1322
+ }
1323
+ }
1308
1324
  function installSkill(skillName) {
1309
1325
  const config = loadConfig();
1310
1326
  const skillPath = findSkillPath(skillName);
@@ -1418,34 +1434,20 @@ function installSkill(skillName) {
1418
1434
  const referencesSource = join7(skillDir, "references");
1419
1435
  if (existsSync6(referencesSource)) {
1420
1436
  const targetReferencesDir = join7(targetSkillDir, "references");
1421
- if (!existsSync6(targetReferencesDir)) {
1422
- mkdirSync4(targetReferencesDir, { recursive: true });
1423
- }
1424
- const referenceFiles = readdirSync5(referencesSource).filter(
1437
+ copyDirectoryRecursive(
1438
+ referencesSource,
1439
+ targetReferencesDir,
1425
1440
  (f) => f.endsWith(".md")
1426
1441
  );
1427
- for (const file of referenceFiles) {
1428
- const sourcePath = join7(referencesSource, file);
1429
- const targetPath = join7(targetReferencesDir, file);
1430
- const content = readFileSync6(sourcePath, "utf-8");
1431
- writeFileSync4(targetPath, content);
1432
- }
1433
1442
  }
1434
1443
  const scriptsSource = join7(skillDir, "scripts");
1435
1444
  if (existsSync6(scriptsSource)) {
1436
1445
  const targetScriptsDir = join7(targetSkillDir, "scripts");
1437
- if (!existsSync6(targetScriptsDir)) {
1438
- mkdirSync4(targetScriptsDir, { recursive: true });
1439
- }
1440
- const scriptFiles = readdirSync5(scriptsSource).filter(
1446
+ copyDirectoryRecursive(
1447
+ scriptsSource,
1448
+ targetScriptsDir,
1441
1449
  (f) => f.endsWith(".ts") || f.endsWith(".js") || f.endsWith(".py")
1442
1450
  );
1443
- for (const file of scriptFiles) {
1444
- const sourcePath = join7(scriptsSource, file);
1445
- const targetPath = join7(targetScriptsDir, file);
1446
- const content = readFileSync6(sourcePath, "utf-8");
1447
- writeFileSync4(targetPath, content);
1448
- }
1449
1451
  }
1450
1452
  const activePlatforms = getActivePlatforms(config);
1451
1453
  const targetPlatforms = activePlatforms.length > 0 ? activePlatforms : [config.platform];
package/dist/index.js CHANGED
@@ -1262,6 +1262,22 @@ function updateAllSkills() {
1262
1262
  }
1263
1263
  return result;
1264
1264
  }
1265
+ function copyDirectoryRecursive(source, target, fileFilter) {
1266
+ if (!existsSync6(target)) {
1267
+ mkdirSync4(target, { recursive: true });
1268
+ }
1269
+ const entries = readdirSync5(source, { withFileTypes: true });
1270
+ for (const entry of entries) {
1271
+ const sourcePath = join7(source, entry.name);
1272
+ const targetPath = join7(target, entry.name);
1273
+ if (entry.isDirectory()) {
1274
+ copyDirectoryRecursive(sourcePath, targetPath, fileFilter);
1275
+ } else if (entry.isFile() && fileFilter(entry.name)) {
1276
+ const content = readFileSync6(sourcePath, "utf-8");
1277
+ writeFileSync4(targetPath, content);
1278
+ }
1279
+ }
1280
+ }
1265
1281
  function installSkill(skillName) {
1266
1282
  const config = loadConfig();
1267
1283
  const skillPath = findSkillPath(skillName);
@@ -1375,34 +1391,20 @@ function installSkill(skillName) {
1375
1391
  const referencesSource = join7(skillDir, "references");
1376
1392
  if (existsSync6(referencesSource)) {
1377
1393
  const targetReferencesDir = join7(targetSkillDir, "references");
1378
- if (!existsSync6(targetReferencesDir)) {
1379
- mkdirSync4(targetReferencesDir, { recursive: true });
1380
- }
1381
- const referenceFiles = readdirSync5(referencesSource).filter(
1394
+ copyDirectoryRecursive(
1395
+ referencesSource,
1396
+ targetReferencesDir,
1382
1397
  (f) => f.endsWith(".md")
1383
1398
  );
1384
- for (const file of referenceFiles) {
1385
- const sourcePath = join7(referencesSource, file);
1386
- const targetPath = join7(targetReferencesDir, file);
1387
- const content = readFileSync6(sourcePath, "utf-8");
1388
- writeFileSync4(targetPath, content);
1389
- }
1390
1399
  }
1391
1400
  const scriptsSource = join7(skillDir, "scripts");
1392
1401
  if (existsSync6(scriptsSource)) {
1393
1402
  const targetScriptsDir = join7(targetSkillDir, "scripts");
1394
- if (!existsSync6(targetScriptsDir)) {
1395
- mkdirSync4(targetScriptsDir, { recursive: true });
1396
- }
1397
- const scriptFiles = readdirSync5(scriptsSource).filter(
1403
+ copyDirectoryRecursive(
1404
+ scriptsSource,
1405
+ targetScriptsDir,
1398
1406
  (f) => f.endsWith(".ts") || f.endsWith(".js") || f.endsWith(".py")
1399
1407
  );
1400
- for (const file of scriptFiles) {
1401
- const sourcePath = join7(scriptsSource, file);
1402
- const targetPath = join7(targetScriptsDir, file);
1403
- const content = readFileSync6(sourcePath, "utf-8");
1404
- writeFileSync4(targetPath, content);
1405
- }
1406
1408
  }
1407
1409
  const activePlatforms = getActivePlatforms(config);
1408
1410
  const targetPlatforms = activePlatforms.length > 0 ? activePlatforms : [config.platform];
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-brain",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "Your scratchpad (or brain) - a collaborative space for planning and research. Create docs with /brain plan, /brain research, or /brain review. Use @mentions for async discussion. Docs persist across sessions.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: brain
2
2
  description: "Your scratchpad (or brain) - a collaborative space for planning and research. Create docs with /brain plan, /brain research, or /brain review. Use @mentions for async discussion. Docs persist across sessions."
3
- version: 0.3.5
3
+ version: 0.3.6
4
4
  status: beta
5
5
 
6
6
  includes:
@@ -15,13 +15,14 @@ Extends the brain skill with Obsidian-specific features. **This skill overrides
15
15
 
16
16
  ## Configuration
17
17
 
18
- **Required:** Set vault path in `~/.droid/skills/brain/overrides.yaml`:
18
+ **Required:** Run `droid config --get tools.brain` and ensure `brain_dir` is set to your Obsidian vault path.
19
19
 
20
- ```yaml
21
- brain_dir: ~/path/to/your/vault
20
+ If not configured, set it with:
21
+ ```bash
22
+ droid config --set tools.brain.brain_dir=~/path/to/your/vault
22
23
  ```
23
24
 
24
- **Optional:** Configure folders in `~/.droid/skills/brain-obsidian/overrides.yaml`:
25
+ **Optional:** Configure Obsidian-specific folders with `droid config --get tools.brain-obsidian`:
25
26
 
26
27
  | Setting | Default | Description |
27
28
  | ------------------ | ------------- | ------------------------------- |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-code-review",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: code-review
2
2
  description: "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring."
3
- version: 0.2.2
3
+ version: 0.2.3
4
4
  status: alpha
5
5
 
6
6
  includes:
@@ -9,6 +9,13 @@ allowed-tools: [Read, Grep, Glob, Bash, Task]
9
9
 
10
10
  Run comprehensive code reviews using specialized agents, each focused on a specific concern.
11
11
 
12
+ ## Configuration
13
+
14
+ Code-review has no configuration of its own. Optional integration with other tools:
15
+
16
+ - **Brain skill** (optional): If installed, offers to save review results to a `/brain review` doc
17
+ - Check with: `droid config --get tools.brain` to see if `brain_dir` is configured
18
+
12
19
  ## How It Works
13
20
 
14
21
  The `/code-review` command orchestrates multiple specialized agents in parallel:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-codex",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Shared organizational knowledge - PRDs, tech designs, domains, proposals, patterns, and explored topics. Use when loading project context, searching codex, capturing decisions, or creating new entries.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: codex
2
2
  description: "Shared organizational knowledge - PRDs, tech designs, domains, proposals, patterns, and explored topics. Use when loading project context, searching codex, capturing decisions, or creating new entries."
3
- version: 0.2.0
3
+ version: 0.2.1
4
4
  status: beta
5
5
 
6
6
  includes:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-plan",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Task-scoped planning with portable, structured plans. Use when planning implementation for a PR, ticket, or small feature. User prompts like 'let's plan this', 'can we start a plan', 'think through the implementation'.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: plan
2
2
  description: "Task-scoped planning with portable, structured plans. Use when planning implementation for a PR, ticket, or small feature. User prompts like 'let's plan this', 'can we start a plan', 'think through the implementation'."
3
- version: 0.1.0
3
+ version: 0.1.1
4
4
  status: alpha
5
5
 
6
6
  includes:
@@ -24,8 +24,8 @@ Task-scoped planning for PRs, tickets, and small features. Lighter than `/tech-d
24
24
  ## Configuration
25
25
 
26
26
  Uses config from dependencies:
27
- - `droid config --get tools.brain` → `brain_dir`, `inbox_dir`
28
- - `droid config --get tools.comments` → `user_mention`
27
+ - `droid config --get tools.brain` → `brain_dir`, `inbox_folder`
28
+ - `droid config --get user_mention` → `user_mention` (global config)
29
29
 
30
30
  ## Commands
31
31
 
@@ -39,10 +39,13 @@ Uses config from dependencies:
39
39
 
40
40
  ## `/plan new {topic}`
41
41
 
42
- 1. Read config (`brain_dir`, `inbox_dir`, `user_mention`)
42
+ 1. **Read config first:**
43
+ - Run `droid config --get tools.brain` for `brain_dir` and `inbox_folder`
44
+ - Run `droid config --get user_mention` for user's mention tag
45
+ - If `brain_dir` not configured, ask user where to store plans
43
46
  2. Determine location:
44
47
  - If `/project` active → offer: `{projects_dir}/{project}/plans/`
45
- - Otherwise → `{brain_dir}/{inbox_dir}/plans/`
48
+ - Otherwise → `{brain_dir}/{inbox_folder}/plans/`
46
49
  3. Offer context loading (`/project`, `/codex` search)
47
50
  4. Ask clarifying questions (goal, scope, constraints)
48
51
  5. Generate plan from template (see `references/templates.md`)
@@ -173,4 +173,4 @@ Plans are named `plan-{topic}.md` with kebab-case topic:
173
173
 
174
174
  ## Location
175
175
 
176
- Plans live in `{brain_dir}/{inbox_dir}/plans/` or `{projects_dir}/{project}/plans/` if project-nested.
176
+ Plans live in `{brain_dir}/{inbox_folder}/plans/` or `{projects_dir}/{project}/plans/` if project-nested.
@@ -7,8 +7,8 @@ Detailed command flows for the plan skill.
7
7
  ### Step 1: Read Configuration
8
8
 
9
9
  ```bash
10
- droid config --get tools.brain # → brain_dir, inbox_dir
11
- droid config --get tools.comments # → user_mention
10
+ droid config --get tools.brain # → brain_dir, inbox_folder
11
+ droid config --get user_mention # → user_mention (global config)
12
12
  ```
13
13
 
14
14
  If brain not configured, ask user for `brain_dir` location.
@@ -21,12 +21,12 @@ Check if `/project` is active (check `{projects_dir}/{project}/PROJECT.md` exist
21
21
  ```
22
22
  Offer choice via AskUserQuestion:
23
23
  - "Project folder" → {projects_dir}/{project}/plans/plan-{topic}.md
24
- - "Inbox" → {brain_dir}/{inbox_dir}/plans/plan-{topic}.md
24
+ - "Inbox" → {brain_dir}/{inbox_folder}/plans/plan-{topic}.md
25
25
  ```
26
26
 
27
27
  **If no project:**
28
28
  ```
29
- Use: {brain_dir}/{inbox_dir}/plans/plan-{topic}.md
29
+ Use: {brain_dir}/{inbox_folder}/plans/plan-{topic}.md
30
30
  ```
31
31
 
32
32
  ### Step 3: Check for Existing Plan
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-wrapup",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Session wrap-up that captures decisions, learnings, and open items to persistent docs.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: wrapup
2
2
  description: "Session wrap-up that captures decisions, learnings, and open items to persistent docs."
3
- version: 0.1.2
3
+ version: 0.1.3
4
4
  status: alpha
5
5
 
6
6
  includes:
@@ -8,6 +8,16 @@ allowed-tools: [Read, Edit, Write, Glob, Grep, Bash, Task]
8
8
 
9
9
  Session wrap-up that captures decisions, learnings, and open items before closing.
10
10
 
11
+ ## Configuration
12
+
13
+ Wrapup has no configuration of its own. It reads config from other installed tools:
14
+
15
+ - **Project skill** (optional): `droid config --get tools.project` → `projects_dir` to update project files
16
+ - **Brain skill** (optional): `droid config --get tools.brain` → `brain_dir` to update brain docs
17
+ - **Codex skill** (optional): `droid config --get tools.codex` → `codex_repo` to suggest codex entries
18
+
19
+ If these tools aren't configured, wrapup skips those artifacts and focuses on git state and conversation summary.
20
+
11
21
  ## Context Lifeboat Pattern
12
22
 
13
23
  This skill runs at the END of sessions when context pressure is highest.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderful/droid",
3
- "version": "0.35.0",
3
+ "version": "0.35.2",
4
4
  "description": "AI workflow toolkit for sharing skills, commands, and agents across the team",
5
5
  "type": "module",
6
6
  "bin": {
package/src/lib/skills.ts CHANGED
@@ -393,6 +393,39 @@ export function updateAllSkills(): {
393
393
  return result;
394
394
  }
395
395
 
396
+ /**
397
+ * Recursively copy a directory and all its contents
398
+ * @param source Source directory path
399
+ * @param target Target directory path
400
+ * @param fileFilter Function that returns true if the file should be copied
401
+ */
402
+ function copyDirectoryRecursive(
403
+ source: string,
404
+ target: string,
405
+ fileFilter: (filename: string) => boolean,
406
+ ): void {
407
+ if (!existsSync(target)) {
408
+ mkdirSync(target, { recursive: true });
409
+ }
410
+
411
+ const entries = readdirSync(source, { withFileTypes: true });
412
+
413
+ for (const entry of entries) {
414
+ const sourcePath = join(source, entry.name);
415
+ const targetPath = join(target, entry.name);
416
+
417
+ if (entry.isDirectory()) {
418
+ // Recursively copy subdirectory
419
+ copyDirectoryRecursive(sourcePath, targetPath, fileFilter);
420
+ } else if (entry.isFile() && fileFilter(entry.name)) {
421
+ // Copy file if it passes the filter
422
+ const content = readFileSync(sourcePath, 'utf-8');
423
+ writeFileSync(targetPath, content);
424
+ }
425
+ // Ignore files that don't pass the filter
426
+ }
427
+ }
428
+
396
429
  /**
397
430
  * Install a skill
398
431
  */
@@ -553,36 +586,20 @@ export function installSkill(skillName: string): {
553
586
  const referencesSource = join(skillDir, 'references');
554
587
  if (existsSync(referencesSource)) {
555
588
  const targetReferencesDir = join(targetSkillDir, 'references');
556
- if (!existsSync(targetReferencesDir)) {
557
- mkdirSync(targetReferencesDir, { recursive: true });
558
- }
559
- const referenceFiles = readdirSync(referencesSource).filter((f) =>
589
+ copyDirectoryRecursive(referencesSource, targetReferencesDir, (f) =>
560
590
  f.endsWith('.md'),
561
591
  );
562
- for (const file of referenceFiles) {
563
- const sourcePath = join(referencesSource, file);
564
- const targetPath = join(targetReferencesDir, file);
565
- const content = readFileSync(sourcePath, 'utf-8');
566
- writeFileSync(targetPath, content);
567
- }
568
592
  }
569
593
 
570
594
  // Copy scripts if present (deterministic CLI scripts for the skill)
571
595
  const scriptsSource = join(skillDir, 'scripts');
572
596
  if (existsSync(scriptsSource)) {
573
597
  const targetScriptsDir = join(targetSkillDir, 'scripts');
574
- if (!existsSync(targetScriptsDir)) {
575
- mkdirSync(targetScriptsDir, { recursive: true });
576
- }
577
- const scriptFiles = readdirSync(scriptsSource).filter(
598
+ copyDirectoryRecursive(
599
+ scriptsSource,
600
+ targetScriptsDir,
578
601
  (f) => f.endsWith('.ts') || f.endsWith('.js') || f.endsWith('.py'),
579
602
  );
580
- for (const file of scriptFiles) {
581
- const sourcePath = join(scriptsSource, file);
582
- const targetPath = join(targetScriptsDir, file);
583
- const content = readFileSync(sourcePath, 'utf-8');
584
- writeFileSync(targetPath, content);
585
- }
586
603
  }
587
604
 
588
605
  // Get active platforms for multi-platform install
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-brain",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "description": "Your scratchpad (or brain) - a collaborative space for planning and research. Create docs with /brain plan, /brain research, or /brain review. Use @mentions for async discussion. Docs persist across sessions.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: brain
2
2
  description: "Your scratchpad (or brain) - a collaborative space for planning and research. Create docs with /brain plan, /brain research, or /brain review. Use @mentions for async discussion. Docs persist across sessions."
3
- version: 0.3.5
3
+ version: 0.3.6
4
4
  status: beta
5
5
 
6
6
  includes:
@@ -15,13 +15,14 @@ Extends the brain skill with Obsidian-specific features. **This skill overrides
15
15
 
16
16
  ## Configuration
17
17
 
18
- **Required:** Set vault path in `~/.droid/skills/brain/overrides.yaml`:
18
+ **Required:** Run `droid config --get tools.brain` and ensure `brain_dir` is set to your Obsidian vault path.
19
19
 
20
- ```yaml
21
- brain_dir: ~/path/to/your/vault
20
+ If not configured, set it with:
21
+ ```bash
22
+ droid config --set tools.brain.brain_dir=~/path/to/your/vault
22
23
  ```
23
24
 
24
- **Optional:** Configure folders in `~/.droid/skills/brain-obsidian/overrides.yaml`:
25
+ **Optional:** Configure Obsidian-specific folders with `droid config --get tools.brain-obsidian`:
25
26
 
26
27
  | Setting | Default | Description |
27
28
  | ------------------ | ------------- | ------------------------------- |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-code-review",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: code-review
2
2
  description: "Comprehensive code review using specialized agents. Reviews PRs, staged changes, branches, or specific files with confidence scoring."
3
- version: 0.2.2
3
+ version: 0.2.3
4
4
  status: alpha
5
5
 
6
6
  includes:
@@ -9,6 +9,13 @@ allowed-tools: [Read, Grep, Glob, Bash, Task]
9
9
 
10
10
  Run comprehensive code reviews using specialized agents, each focused on a specific concern.
11
11
 
12
+ ## Configuration
13
+
14
+ Code-review has no configuration of its own. Optional integration with other tools:
15
+
16
+ - **Brain skill** (optional): If installed, offers to save review results to a `/brain review` doc
17
+ - Check with: `droid config --get tools.brain` to see if `brain_dir` is configured
18
+
12
19
  ## How It Works
13
20
 
14
21
  The `/code-review` command orchestrates multiple specialized agents in parallel:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-codex",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Shared organizational knowledge - PRDs, tech designs, domains, proposals, patterns, and explored topics. Use when loading project context, searching codex, capturing decisions, or creating new entries.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: codex
2
2
  description: "Shared organizational knowledge - PRDs, tech designs, domains, proposals, patterns, and explored topics. Use when loading project context, searching codex, capturing decisions, or creating new entries."
3
- version: 0.2.0
3
+ version: 0.2.1
4
4
  status: beta
5
5
 
6
6
  includes:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-plan",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Task-scoped planning with portable, structured plans. Use when planning implementation for a PR, ticket, or small feature. User prompts like 'let's plan this', 'can we start a plan', 'think through the implementation'.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: plan
2
2
  description: "Task-scoped planning with portable, structured plans. Use when planning implementation for a PR, ticket, or small feature. User prompts like 'let's plan this', 'can we start a plan', 'think through the implementation'."
3
- version: 0.1.0
3
+ version: 0.1.1
4
4
  status: alpha
5
5
 
6
6
  includes:
@@ -24,8 +24,8 @@ Task-scoped planning for PRs, tickets, and small features. Lighter than `/tech-d
24
24
  ## Configuration
25
25
 
26
26
  Uses config from dependencies:
27
- - `droid config --get tools.brain` → `brain_dir`, `inbox_dir`
28
- - `droid config --get tools.comments` → `user_mention`
27
+ - `droid config --get tools.brain` → `brain_dir`, `inbox_folder`
28
+ - `droid config --get user_mention` → `user_mention` (global config)
29
29
 
30
30
  ## Commands
31
31
 
@@ -39,10 +39,13 @@ Uses config from dependencies:
39
39
 
40
40
  ## `/plan new {topic}`
41
41
 
42
- 1. Read config (`brain_dir`, `inbox_dir`, `user_mention`)
42
+ 1. **Read config first:**
43
+ - Run `droid config --get tools.brain` for `brain_dir` and `inbox_folder`
44
+ - Run `droid config --get user_mention` for user's mention tag
45
+ - If `brain_dir` not configured, ask user where to store plans
43
46
  2. Determine location:
44
47
  - If `/project` active → offer: `{projects_dir}/{project}/plans/`
45
- - Otherwise → `{brain_dir}/{inbox_dir}/plans/`
48
+ - Otherwise → `{brain_dir}/{inbox_folder}/plans/`
46
49
  3. Offer context loading (`/project`, `/codex` search)
47
50
  4. Ask clarifying questions (goal, scope, constraints)
48
51
  5. Generate plan from template (see `references/templates.md`)
@@ -173,4 +173,4 @@ Plans are named `plan-{topic}.md` with kebab-case topic:
173
173
 
174
174
  ## Location
175
175
 
176
- Plans live in `{brain_dir}/{inbox_dir}/plans/` or `{projects_dir}/{project}/plans/` if project-nested.
176
+ Plans live in `{brain_dir}/{inbox_folder}/plans/` or `{projects_dir}/{project}/plans/` if project-nested.
@@ -7,8 +7,8 @@ Detailed command flows for the plan skill.
7
7
  ### Step 1: Read Configuration
8
8
 
9
9
  ```bash
10
- droid config --get tools.brain # → brain_dir, inbox_dir
11
- droid config --get tools.comments # → user_mention
10
+ droid config --get tools.brain # → brain_dir, inbox_folder
11
+ droid config --get user_mention # → user_mention (global config)
12
12
  ```
13
13
 
14
14
  If brain not configured, ask user for `brain_dir` location.
@@ -21,12 +21,12 @@ Check if `/project` is active (check `{projects_dir}/{project}/PROJECT.md` exist
21
21
  ```
22
22
  Offer choice via AskUserQuestion:
23
23
  - "Project folder" → {projects_dir}/{project}/plans/plan-{topic}.md
24
- - "Inbox" → {brain_dir}/{inbox_dir}/plans/plan-{topic}.md
24
+ - "Inbox" → {brain_dir}/{inbox_folder}/plans/plan-{topic}.md
25
25
  ```
26
26
 
27
27
  **If no project:**
28
28
  ```
29
- Use: {brain_dir}/{inbox_dir}/plans/plan-{topic}.md
29
+ Use: {brain_dir}/{inbox_folder}/plans/plan-{topic}.md
30
30
  ```
31
31
 
32
32
  ### Step 3: Check for Existing Plan
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-wrapup",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Session wrap-up that captures decisions, learnings, and open items to persistent docs.",
5
5
  "author": {
6
6
  "name": "Orderful",
@@ -1,6 +1,6 @@
1
1
  name: wrapup
2
2
  description: "Session wrap-up that captures decisions, learnings, and open items to persistent docs."
3
- version: 0.1.2
3
+ version: 0.1.3
4
4
  status: alpha
5
5
 
6
6
  includes:
@@ -8,6 +8,16 @@ allowed-tools: [Read, Edit, Write, Glob, Grep, Bash, Task]
8
8
 
9
9
  Session wrap-up that captures decisions, learnings, and open items before closing.
10
10
 
11
+ ## Configuration
12
+
13
+ Wrapup has no configuration of its own. It reads config from other installed tools:
14
+
15
+ - **Project skill** (optional): `droid config --get tools.project` → `projects_dir` to update project files
16
+ - **Brain skill** (optional): `droid config --get tools.brain` → `brain_dir` to update brain docs
17
+ - **Codex skill** (optional): `droid config --get tools.codex` → `codex_repo` to suggest codex entries
18
+
19
+ If these tools aren't configured, wrapup skips those artifacts and focuses on git state and conversation summary.
20
+
11
21
  ## Context Lifeboat Pattern
12
22
 
13
23
  This skill runs at the END of sessions when context pressure is highest.