claude-autopm 3.23.1 → 3.23.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 (38) hide show
  1. package/.github/workflows/deploy-docs.yml +2 -2
  2. package/.github/workflows/npm-publish.yml +2 -2
  3. package/.github/workflows/plugin-publish.yml +2 -2
  4. package/README.md +3 -1
  5. package/autopm/.claude/docs/xml-prompts/README.md +3 -3
  6. package/autopm/.claude/docs/xml-prompts/creating-templates.md +2 -2
  7. package/autopm/.claude/docs/xml-prompts/templates-guide.md +1 -1
  8. package/install/install.js +22 -3
  9. package/install/post-install-check.js +29 -0
  10. package/package.json +6 -6
  11. package/packages/plugin-obsidian/LICENSE +21 -0
  12. package/packages/plugin-obsidian/README.md +129 -0
  13. package/packages/plugin-obsidian/claude-md/obsidian-section.md +30 -0
  14. package/packages/plugin-obsidian/commands/obsidian:doctor.md +63 -0
  15. package/packages/plugin-obsidian/commands/obsidian:setup.md +69 -0
  16. package/packages/plugin-obsidian/commands/obsidian:sync.md +105 -0
  17. package/packages/plugin-obsidian/package.json +51 -0
  18. package/packages/plugin-obsidian/plugin.json +73 -0
  19. package/packages/plugin-obsidian/scripts/obsidian/doctor.js +455 -0
  20. package/packages/plugin-obsidian/scripts/obsidian/setup.js +449 -0
  21. package/packages/plugin-obsidian/scripts/obsidian/sync-to-obsidian.js +584 -0
  22. package/packages/plugin-obsidian/scripts/obsidian/sync-to-obsidian.sh +533 -0
  23. package/packages/plugin-obsidian/templates/DASHBOARD.md.tmpl +63 -0
  24. package/packages/plugin-obsidian/templates/FRONTMATTER_SCHEMA.md +40 -0
  25. package/packages/plugin-obsidian/templates/MOC.md.tmpl +61 -0
  26. package/packages/plugin-obsidian/templates/_templates/epic.md +30 -0
  27. package/packages/plugin-obsidian/templates/_templates/issue.md +28 -0
  28. package/packages/plugin-obsidian/templates/_templates/prd.md +29 -0
  29. package/packages/plugin-obsidian/templates/diagrams/01-architecture.md +38 -0
  30. package/packages/plugin-obsidian/templates/diagrams/pizarra.excalidraw.md +29 -0
  31. package/packages/plugin-obsidian/tests/docs.test.js +97 -0
  32. package/packages/plugin-obsidian/tests/doctor.test.js +432 -0
  33. package/packages/plugin-obsidian/tests/installer-wiring.test.js +60 -0
  34. package/packages/plugin-obsidian/tests/setup.test.js +536 -0
  35. package/packages/plugin-obsidian/tests/sync-to-obsidian-node.test.js +458 -0
  36. package/packages/plugin-obsidian/tests/sync-to-obsidian.bats +266 -0
  37. package/packages/plugin-obsidian/tests/templates.test.js +125 -0
  38. package/packages/plugin-obsidian/tests/test-sync-basic.sh +121 -0
@@ -35,7 +35,7 @@ jobs:
35
35
  cache-dependency-path: docs-site/package-lock.json
36
36
 
37
37
  - name: Setup Pages
38
- uses: actions/configure-pages@v4
38
+ uses: actions/configure-pages@v6
39
39
 
40
40
  - name: Install dependencies
41
41
  run: npm ci
@@ -59,4 +59,4 @@ jobs:
59
59
  steps:
60
60
  - name: Deploy to GitHub Pages
61
61
  id: deployment
62
- uses: actions/deploy-pages@v4
62
+ uses: actions/deploy-pages@v5
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
13
  - uses: actions/checkout@v4
14
- - uses: actions/setup-node@v4
14
+ - uses: actions/setup-node@v6
15
15
  with:
16
16
  node-version: '20'
17
17
  - run: npm ci --legacy-peer-deps
@@ -24,7 +24,7 @@ jobs:
24
24
  contents: read
25
25
  steps:
26
26
  - uses: actions/checkout@v4
27
- - uses: actions/setup-node@v4
27
+ - uses: actions/setup-node@v6
28
28
  with:
29
29
  node-version: '20'
30
30
  registry-url: 'https://registry.npmjs.org'
@@ -34,7 +34,7 @@ jobs:
34
34
  - plugin-testing
35
35
  steps:
36
36
  - uses: actions/checkout@v4
37
- - uses: actions/setup-node@v4
37
+ - uses: actions/setup-node@v6
38
38
  with:
39
39
  node-version: '20'
40
40
  registry-url: 'https://registry.npmjs.org'
@@ -52,7 +52,7 @@ jobs:
52
52
  id-token: write
53
53
  steps:
54
54
  - uses: actions/checkout@v4
55
- - uses: actions/setup-node@v4
55
+ - uses: actions/setup-node@v6
56
56
  with:
57
57
  node-version: '20'
58
58
  registry-url: 'https://registry.npmjs.org'
package/README.md CHANGED
@@ -27,6 +27,7 @@ Choose your scenario during installation:
27
27
  | **GitHub** | 12 | Core + languages for GitHub projects |
28
28
  | **Azure** | 14 | Core + languages + Azure DevOps |
29
29
  | **Docker** | 16 | Core + DevOps + containers |
30
+ | **Obsidian** | 12 | PM + Obsidian vault integration |
30
31
  | **Full** | 44+ | All plugins, all agents |
31
32
  | **Performance** | 44+ | Full + max parallelization |
32
33
 
@@ -134,10 +135,11 @@ All commands run inside Claude Code (not terminal):
134
135
 
135
136
  ## Features
136
137
 
137
- ### 13 Official Plugins
138
+ ### 14 Official Plugins
138
139
 
139
140
  - **Core** — Context management, testing, configuration, MCP
140
141
  - **PM System** — PRD, epics, issues, decomposition, git workflow
142
+ - **Obsidian** — Read-only vault sync, Dataview frontmatter, diagnostics
141
143
  - **Azure DevOps** — Work items, boards, pipelines, sprints
142
144
  - **GitHub** — Workflows, issues, PRs, automation
143
145
  - **Languages** — Python, JavaScript, Node.js, Bash
@@ -435,7 +435,7 @@ Create templates tailored to your project:
435
435
  --stage 2
436
436
 
437
437
  # Edit template
438
- vim autopm/.claude/templates/xml-prompts/dev/microservice.xml
438
+ vim .claude/templates/xml-prompts/dev/microservice.xml
439
439
 
440
440
  # Use custom template
441
441
  /prompt:xml microservice \
@@ -522,5 +522,5 @@ Solution: Provide missing flag
522
522
  - `.claude/commands/xml/prompt-xml.md`
523
523
  - `.claude/commands/xml/template.md`
524
524
  - **Utilities:**
525
- - `autopm/.claude/lib/xml-prompt-builder.js`
526
- - `autopm/.claude/lib/xml-validator.js`
525
+ - `.claude/lib/xml-prompt-builder.js`
526
+ - `.claude/lib/xml-validator.js`
@@ -111,7 +111,7 @@ This will prompt you for:
111
111
 
112
112
  ```bash
113
113
  # Create file in appropriate category
114
- vim autopm/.claude/templates/xml-prompts/dev/my-template.xml
114
+ vim .claude/templates/xml-prompts/dev/my-template.xml
115
115
  ```
116
116
 
117
117
  ### Step 3: Define Template Content
@@ -558,7 +558,7 @@ cat test.xml | grep -q "<thinking>" && echo "✅ Has thinking" || echo "❌ Miss
558
558
  Track template changes:
559
559
 
560
560
  ```bash
561
- git add autopm/.claude/templates/xml-prompts/dev/my-template.xml
561
+ git add .claude/templates/xml-prompts/dev/my-template.xml
562
562
  git commit -m "Update microservice template with health check requirements"
563
563
  ```
564
564
 
@@ -462,7 +462,7 @@ done
462
462
  /xml:template create microservice --category dev --stage 2
463
463
 
464
464
  # Edit to add project-specific constraints
465
- vim autopm/.claude/templates/xml-prompts/dev/microservice.xml
465
+ vim .claude/templates/xml-prompts/dev/microservice.xml
466
466
 
467
467
  # Add your patterns:
468
468
  # - Service structure requirements
@@ -556,6 +556,14 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
556
556
  • Advanced users only
557
557
  `);
558
558
 
559
+ // Option 7: Obsidian (always available)
560
+ console.log(`${this.colors.CYAN}7. Obsidian${this.colors.NC} - PM + Obsidian vault integration (rsync, Dataview, templates)
561
+ • Core + PM + Obsidian vault sync
562
+ • Unidirectional project → vault mirroring
563
+ • Best for: Knowledge management, documentation-heavy projects
564
+ ${this.colors.DIM}• Plugins: core, pm, obsidian (3 plugins)${this.colors.NC}
565
+ `);
566
+
559
567
  if (process.env.AUTOPM_TEST_MODE === '1') {
560
568
  this.printMsg('CYAN', 'Auto-selecting option 0 (lite) for test mode');
561
569
  return 'lite';
@@ -571,7 +579,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
571
579
 
572
580
  return new Promise((resolve) => {
573
581
  const askQuestion = () => {
574
- rl.question(`${this.colors.CYAN}Enter your choice (0-6) [${defaultChoice}]: ${this.colors.NC}`, (answer) => {
582
+ rl.question(`${this.colors.CYAN}Enter your choice (0-7) [${defaultChoice}]: ${this.colors.NC}`, (answer) => {
575
583
  const choice = answer.trim() || defaultChoice;
576
584
  const scenarios = {
577
585
  '0': 'lite',
@@ -580,7 +588,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
580
588
  '3': 'docker',
581
589
  '4': 'full',
582
590
  '5': 'performance',
583
- '6': 'custom'
591
+ '6': 'custom',
592
+ '7': 'obsidian'
584
593
  };
585
594
 
586
595
  const selectedScenario = scenarios[choice];
@@ -608,7 +617,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
608
617
  }
609
618
 
610
619
  if (!selectedScenario) {
611
- console.log(`${this.colors.RED}✗ Invalid choice. Please select 0-6.${this.colors.NC}`);
620
+ console.log(`${this.colors.RED}✗ Invalid choice. Please select 0-7.${this.colors.NC}`);
612
621
  askQuestion();
613
622
  return;
614
623
  }
@@ -703,6 +712,16 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
703
712
  kubernetes: { enabled: true }
704
713
  },
705
714
  plugins: ['plugin-core', 'plugin-languages', 'plugin-frameworks', 'plugin-testing', 'plugin-devops', 'plugin-cloud', 'plugin-databases', 'plugin-data', 'plugin-pm', 'plugin-pm-github', 'plugin-ai', 'plugin-ml']
715
+ },
716
+ obsidian: {
717
+ version: version,
718
+ installed: new Date().toISOString(),
719
+ execution_strategy: 'sequential',
720
+ tools: {
721
+ docker: { enabled: false },
722
+ kubernetes: { enabled: false }
723
+ },
724
+ plugins: ['plugin-core', 'plugin-pm', 'plugin-obsidian']
706
725
  }
707
726
  };
708
727
 
@@ -37,6 +37,7 @@ class PostInstallChecker {
37
37
  this.checkMCPConfiguration();
38
38
  this.checkGitHooks();
39
39
  this.checkNodeVersion();
40
+ this.checkObsidianVault();
40
41
 
41
42
  // Display results
42
43
  this.displayResults();
@@ -336,6 +337,34 @@ class PostInstallChecker {
336
337
  }
337
338
  }
338
339
 
340
+ /**
341
+ * Check Obsidian vault configuration
342
+ */
343
+ checkObsidianVault() {
344
+ const configPath = path.join(this.projectRoot, '.claude', 'config.json');
345
+ let configured = false;
346
+ let message = 'Not configured — run: obsidian:setup';
347
+
348
+ if (fs.existsSync(configPath)) {
349
+ try {
350
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
351
+ const vaultPath = config.obsidian?.vault_path;
352
+ if (vaultPath) {
353
+ configured = true;
354
+ message = `Vault: ${vaultPath}`;
355
+ }
356
+ } catch (error) {
357
+ // config unreadable, leave as not configured
358
+ }
359
+ }
360
+
361
+ this.results.optional.push({
362
+ name: 'Obsidian vault',
363
+ status: configured,
364
+ message: message
365
+ });
366
+ }
367
+
339
368
  /**
340
369
  * Display check results
341
370
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-autopm",
3
- "version": "3.23.1",
3
+ "version": "3.23.2",
4
4
  "description": "Autonomous Project Management Framework for Claude Code - Advanced AI-powered development automation",
5
5
  "main": "bin/autopm.js",
6
6
  "workspaces": [
@@ -125,7 +125,7 @@
125
125
  "README.md"
126
126
  ],
127
127
  "dependencies": {
128
- "@anthropic-ai/sdk": "^0.67.0",
128
+ "@anthropic-ai/sdk": "^0.82.0",
129
129
  "@modelcontextprotocol/sdk": "^1.29.0",
130
130
  "@octokit/rest": "^22.0.0",
131
131
  "azure-devops-node-api": "^15.1.1",
@@ -135,10 +135,10 @@
135
135
  "fast-glob": "^3.3.2",
136
136
  "fs-extra": "^11.3.2",
137
137
  "glob": "^11.0.3",
138
- "inquirer": "^12.9.6",
138
+ "inquirer": "^13.3.2",
139
139
  "js-yaml": "^4.1.0",
140
140
  "markdown-it": "^14.1.0",
141
- "marked": "^16.4.0",
141
+ "marked": "^17.0.6",
142
142
  "moment": "^2.29.4",
143
143
  "ora": "~5.4.1",
144
144
  "simple-git": "^3.20.0",
@@ -151,7 +151,7 @@
151
151
  "@jest/globals": "^30.1.2",
152
152
  "@types/jest": "^30.0.0",
153
153
  "axios": "^1.12.2",
154
- "c8": "^10.1.3",
154
+ "c8": "^11.0.0",
155
155
  "chai": "^6.0.1",
156
156
  "jest": "^30.1.3",
157
157
  "jest-diff": "^30.1.2",
@@ -166,7 +166,7 @@
166
166
  "sinon": "^21.0.0"
167
167
  },
168
168
  "optionalDependencies": {
169
- "@playwright/mcp": "^0.0.68",
169
+ "@playwright/mcp": "^0.0.70",
170
170
  "@upstash/context7-mcp": "^2.1.6"
171
171
  },
172
172
  "publishConfig": {
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Rafal Lagowski
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,129 @@
1
+ # @claudeautopm/plugin-obsidian
2
+
3
+ > **Obsidian Vault Integration Plugin for ClaudeAutoPM Framework**
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ ## Overview
8
+
9
+ `@claudeautopm/plugin-obsidian` creates a read-only Obsidian vault mirror of your ClaudeAutoPM project. It syncs project markdown (agents, commands, rules, epics, PRDs, issues) to an Obsidian vault where Dataview, Mermaid, Excalidraw, and canonical frontmatter work out of the box.
10
+
11
+ Sync is **unidirectional**: project to vault. Never edit files in the Obsidian vault directly.
12
+
13
+ ### Package Information
14
+
15
+ - **Package Name:** `@claudeautopm/plugin-obsidian`
16
+ - **Category:** Integration
17
+ - **Schema Version:** 2.0
18
+
19
+ ---
20
+
21
+ ## Features
22
+
23
+ - **Vault Sync** -- Unidirectional project-to-vault sync via rsync (one-shot, watch, dry-run, safe-mode)
24
+ - **Setup Wizard** -- Interactive configuration for vault path, prefix, watch mode, and environment detection (WSL2, macOS, Linux)
25
+ - **Doctor** -- Five-check diagnostic for common integration issues (missing tools, unreachable vault, dotfolder visibility, Dataview prefix, broken symlinks)
26
+ - **Templates** -- MOC, Dashboard, Dataview queries, Mermaid diagrams, and Excalidraw canvas
27
+ - **Canonical Frontmatter** -- Schema for Dataview + Breadcrumbs compatibility across all synced files
28
+ - **Cross-Platform** -- Supports WSL2, macOS, and Linux-native environments
29
+
30
+ ---
31
+
32
+ ## Installation
33
+
34
+ ```bash
35
+ # Install via scenario
36
+ autopm install --scenario=obsidian
37
+
38
+ # Or add to existing installation (scenario 7)
39
+ autopm install
40
+ ```
41
+
42
+ ### Prerequisites
43
+
44
+ - `rsync` (required)
45
+ - `inotify-tools` (Linux/WSL, optional for `--watch` mode)
46
+ - `fswatch` (macOS, optional for `--watch` mode)
47
+ - Obsidian desktop app
48
+
49
+ ---
50
+
51
+ ## Commands
52
+
53
+ ### `obsidian:setup`
54
+
55
+ Interactive vault configuration wizard. Run once after install.
56
+
57
+ ```bash
58
+ /obsidian:setup --vault-path /path/to/vault --prefix my-project
59
+ ```
60
+
61
+ ### `obsidian:sync`
62
+
63
+ Sync project files to the Obsidian vault.
64
+
65
+ ```bash
66
+ /obsidian:sync # One-shot sync
67
+ /obsidian:sync --watch # Continuous sync on file changes
68
+ /obsidian:sync --check # Dry-run (show what would sync)
69
+ /obsidian:sync --safe-mode # Don't delete vault files
70
+ ```
71
+
72
+ ### `obsidian:doctor`
73
+
74
+ Diagnose common integration problems:
75
+
76
+ 1. Missing rsync / inotify-tools / fswatch
77
+ 2. Unreachable or non-writable vault path
78
+ 3. Issues under `.claude/issues/` (invisible to Dataview)
79
+ 4. Wrong Dataview FROM prefix
80
+ 5. Broken symlink between `.claude/issues` and `issues/`
81
+
82
+ ---
83
+
84
+ ## Configuration
85
+
86
+ Settings are stored in `.claude/config.json`:
87
+
88
+ ```json
89
+ {
90
+ "obsidian": {
91
+ "vault_path": "/path/to/vault",
92
+ "vault_prefix": "my-project",
93
+ "watch": false,
94
+ "environment": "wsl"
95
+ }
96
+ }
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Sync Mapping
102
+
103
+ | Project Path | Vault Path |
104
+ |--------------|------------|
105
+ | `.claude/agents/` | `{vault}/{prefix}/agents/` |
106
+ | `.claude/commands/` | `{vault}/{prefix}/commands/` |
107
+ | `.claude/rules/` | `{vault}/{prefix}/rules/` |
108
+ | `.claude/epics/` | `{vault}/{prefix}/epics/` |
109
+ | `.claude/prds/` | `{vault}/{prefix}/prds/` |
110
+ | `issues/` | `{vault}/{prefix}/issues/` |
111
+ | `*.md` (root) | `{vault}/{prefix}/` |
112
+
113
+ ---
114
+
115
+ ## Documentation
116
+
117
+ Full user guide: [docs/plugins/obsidian.md](../../docs/plugins/obsidian.md)
118
+
119
+ ---
120
+
121
+ ## Peer Dependencies
122
+
123
+ - **@claudeautopm/plugin-core** (^2.0.0) -- Core framework plugin (REQUIRED)
124
+
125
+ ---
126
+
127
+ ## License
128
+
129
+ MIT
@@ -0,0 +1,30 @@
1
+ ## Obsidian Vault Integration
2
+
3
+ This project uses Obsidian as a visual layer for project documentation.
4
+
5
+ ### Vault Sync
6
+
7
+ - **Sync is unidirectional**: Project → Vault (never edit in Obsidian)
8
+ - Run `/obsidian:sync` for one-shot sync
9
+ - Run `/obsidian:sync --watch` for continuous sync
10
+ - Run `/obsidian:doctor` to diagnose issues
11
+
12
+ ### Frontmatter Convention
13
+
14
+ All markdown files should include canonical frontmatter for Dataview:
15
+
16
+ ```yaml
17
+ ---
18
+ type: issue|prd|epic|agent|rule
19
+ status: open|in-progress|closed
20
+ created: "YYYY-MM-DDTHH:mm:ssZ"
21
+ updated: "YYYY-MM-DDTHH:mm:ssZ"
22
+ tags: [relevant, tags]
23
+ ---
24
+ ```
25
+
26
+ ### Important Rules
27
+
28
+ - **Never edit files in the Obsidian vault directly** — changes will be overwritten on next sync
29
+ - Dotfolders (`.claude/`) are invisible to Dataview — the sync script maps them to visible paths
30
+ - If using shared vaults, set `obsidian.vault_prefix` in `.claude/config.json`
@@ -0,0 +1,63 @@
1
+ ---
2
+ allowed-tools: Bash, Read
3
+ ---
4
+
5
+ # Obsidian Doctor
6
+
7
+ Run diagnostics on the Obsidian integration and suggest fixes for common problems.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /obsidian:doctor
13
+ ```
14
+
15
+ ## Instructions
16
+
17
+ ### 1. Locate Script
18
+
19
+ ```bash
20
+ SCRIPT_JS="packages/plugin-obsidian/scripts/obsidian/doctor.js"
21
+
22
+ if [ ! -f "$SCRIPT_JS" ]; then
23
+ SCRIPT_JS=".claude/scripts/doctor.js"
24
+ fi
25
+
26
+ if [ ! -f "$SCRIPT_JS" ]; then
27
+ echo "❌ Doctor script not found. Reinstall plugin-obsidian or run: /obsidian:setup"
28
+ exit 1
29
+ fi
30
+ ```
31
+
32
+ ### 2. Run Diagnostics
33
+
34
+ ```bash
35
+ node "$SCRIPT_JS"
36
+ ```
37
+
38
+ ### 3. Output
39
+
40
+ On success (all checks pass or only warnings):
41
+
42
+ ```
43
+ Obsidian Doctor
44
+ ════════════════════════════════════════════════════════════
45
+
46
+ ✅ rsync installed /usr/bin/rsync
47
+ ⚠️ inotify-tools missing Install: sudo apt install inotify-tools
48
+ ✅ Vault path ok /path/to/vault
49
+ ✅ Issues location ok issues/
50
+ ✅ Dataview prefix correct my-project
51
+ ✅ Symlink ok .claude/issues -> issues
52
+
53
+ ════════════════════════════════════════════════════════════
54
+ Result: 5 passed, 1 warning
55
+ ```
56
+
57
+ On failure (any check has an error):
58
+
59
+ ```
60
+ Result: 3 passed, 1 warning, 2 errors
61
+ ```
62
+
63
+ Exit code 0 means all checks passed (warnings are OK). Exit code 1 means at least one check failed.
@@ -0,0 +1,69 @@
1
+ ---
2
+ allowed-tools: Bash, Read, Write
3
+ ---
4
+
5
+ # Obsidian Setup Wizard
6
+
7
+ Configure an Obsidian vault for use with ClaudeAutoPM. Run this once after `autopm install --scenario=obsidian`.
8
+
9
+ ## Usage
10
+
11
+ ```
12
+ /obsidian:setup --vault-path /path/to/vault [--prefix my-project] [--watch] [--no-watch]
13
+ ```
14
+
15
+ Options:
16
+ - `--vault-path PATH` — Absolute path to your Obsidian vault (required)
17
+ - `--prefix NAME` — Subfolder name inside the vault (default: project directory name)
18
+ - `--watch` — Enable continuous sync in config
19
+ - `--no-watch` — Disable continuous sync in config (default)
20
+
21
+ ## Instructions
22
+
23
+ ### 1. Gather Arguments
24
+
25
+ Ask the user for `--vault-path` if not provided. The vault must already exist as a directory.
26
+
27
+ On WSL, vault paths typically look like: `/mnt/c/Users/<name>/Documents/Obsidian/Vault`
28
+
29
+ ### 2. Run Setup Script
30
+
31
+ Execute the backend script with the user's arguments:
32
+
33
+ ```bash
34
+ node packages/plugin-obsidian/scripts/obsidian/setup.js \
35
+ --vault-path "$VAULT_PATH" \
36
+ --prefix "$PREFIX" \
37
+ --project-root "$(pwd)"
38
+ ```
39
+
40
+ Add `--watch` or `--no-watch` if the user specified either.
41
+
42
+ ### 3. What the Script Does
43
+
44
+ The setup script performs these steps in order:
45
+
46
+ 1. **Detects environment** — WSL, macOS, or Linux
47
+ 2. **Validates vault path** — Checks existence and write permissions
48
+ 3. **Merges config** — Adds `obsidian` section to `.claude/config.json` (preserves all existing keys)
49
+ 4. **Generates templates** — Writes MOC, Dashboard, Obsidian templates, and diagram stubs into the vault
50
+ 5. **Applies canonical frontmatter** — Adds missing fields (`type`, `status`, `created`, `updated`, `tags`) to existing issues and PRDs without overwriting existing values
51
+ 6. **Migrates issues** — If `issues/` doesn't exist but `.claude/issues/` does, moves it and creates a symlink
52
+ 7. **Copies sync script** — Places `sync-to-obsidian.sh` into `.claude/scripts/`
53
+ 8. **Runs first sync** — Executes the sync script once to populate the vault
54
+
55
+ ### 4. Output
56
+
57
+ On success, the script prints a summary showing the vault path, prefix, environment, generated files, and recommended next steps (plugin installation links).
58
+
59
+ ### 5. Troubleshooting
60
+
61
+ If the script fails:
62
+
63
+ - **Vault path does not exist** — Create the directory first or check the path
64
+ - **Vault path is not writable** — Fix permissions: `chmod u+w /path/to/vault`
65
+ - **Sync script not found** — Re-run `autopm install --scenario=obsidian`
66
+
67
+ ## Related Commands
68
+
69
+ - `/obsidian:sync` — Run a one-off or continuous sync after setup