@intentsolutionsio/obsidian-project-documentation 3.2.1

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.
@@ -0,0 +1,245 @@
1
+ ---
2
+ name: obsidian-project-documentation
3
+ description: Document technical projects in Obsidian vault. Use when the User mentions "document this", "close out", "wrap up", "update notes", "track progress", "where are we at", or asks about project docs.
4
+ version: 3.2.1
5
+ allowed-tools: Read, Bash, AskUserQuestion, Task
6
+ ---
7
+
8
+ # Obsidian Project Documentation Assistant
9
+
10
+ This skill helps maintain project documentation in an Obsidian vault while working with Claude Code. It
11
+ automatically captures project progress and insights into structured, consistent notes.
12
+
13
+ **Architecture:** This skill acts as a lightweight launcher that detects project context, asks clarifying
14
+ questions if needed, then launches an agent to handle the documentation work in the background.
15
+
16
+ ## How This Works
17
+
18
+ Three situations trigger this skill, falling into two execution paths:
19
+
20
+ | Situation | Trigger | Path |
21
+ | --------- | ------- | ---- |
22
+ | **1** — New session start | User opens a project and says hello, or Claude Code starts | **Path A** — read-only context load |
23
+ | **2** — Mid-session documentation | "document this", "update notes", "track progress", etc. | **Path B** — full documentation run |
24
+ | **3** — Session end | "wrap up", "close out", "we're done for today", etc. | **Path B** — full documentation run |
25
+
26
+ **Path A is read-only.** It must never launch the documentation agent or write to the vault.
27
+
28
+ **Path B launches the agent.** It performs context detection and spawns the manager agent to write vault notes.
29
+
30
+ ## Shared Step: Load Configuration
31
+
32
+ Before following either path, load the config:
33
+
34
+ ### Step 1: Load Configuration
35
+
36
+ ```bash
37
+ cat ~/.claude/obsidian-project-assistant-config.json 2>/dev/null
38
+ ```
39
+
40
+ Expected format:
41
+
42
+ ```json
43
+ {
44
+ "vault_path": "/path/to/ObsidianVault",
45
+ "areas": ["Hardware", "Software", "Woodworking", "Music Synthesis"],
46
+ "auto_commit": false,
47
+ "auto_push": false,
48
+ "git_enabled": true
49
+ }
50
+ ```
51
+
52
+ **If config doesn't exist (first-run setup):**
53
+
54
+ Use AskUserQuestion to ask the User for their Obsidian vault path:
55
+
56
+ ```text
57
+ Question: "Where is your Obsidian vault? (e.g. ~/Documents/ObsidianVault)"
58
+ Options:
59
+ - ~/Documents/ObsidianVault
60
+ - ~/Documents/MyVault
61
+ - Other (custom path)
62
+ ```
63
+
64
+ Then write the config to `~/.claude/obsidian-project-assistant-config.json`:
65
+
66
+ ```bash
67
+ cat > ~/.claude/obsidian-project-assistant-config.json <<EOF
68
+ {
69
+ "vault_path": "<user-provided path with ~ expanded to $HOME>",
70
+ "areas": ["Hardware", "Software", "Woodworking", "Music Synthesis"],
71
+ "auto_commit": false,
72
+ "auto_push": false,
73
+ "git_enabled": true
74
+ }
75
+ EOF
76
+ ```
77
+
78
+ Confirm the config was written, then follow the appropriate path below.
79
+
80
+ ## Path A: Session Start (Situation 1)
81
+
82
+ Read-only. Do not launch the agent. Do not write to the vault.
83
+
84
+ ### Step A1: Detect Project Name
85
+
86
+ Use the same detection logic as Step B2 (git repo name → directory name) to determine which vault note to load.
87
+
88
+ ### Step A2: Read Project Context
89
+
90
+ ```bash
91
+ cat "{vault_path}/Projects/{project_name}.md" 2>/dev/null
92
+ ```
93
+
94
+ Also read `CLAUDE.md` from the current working directory if it exists.
95
+
96
+ ### Step A3: Welcome the User
97
+
98
+ Greet the User by name, summarise:
99
+
100
+ - Current project phase and status from the vault note
101
+ - The next steps recorded at the end of the last session
102
+ - Any decisions or open questions worth flagging
103
+
104
+ Keep this brief — it is an orientation, not a report.
105
+
106
+ ## Path B: Documentation Run (Situations 2 & 3)
107
+
108
+ ### Step B1: Quick Context Detection
109
+
110
+ #### Detect Project Name
111
+
112
+ Try these methods in order:
113
+
114
+ 1. **From the User's message** - If the User explicitly mentions project name in their request
115
+ 2. **From git repository**:
116
+
117
+ ```bash
118
+ git rev-parse --is-inside-work-tree 2>/dev/null && basename $(git rev-parse --show-toplevel)
119
+ ```
120
+
121
+ Transform kebab-case → Title Case (e.g., "obsidian-project-assistant" → "Obsidian Project Assistant")
122
+
123
+ 3. **From directory name**:
124
+
125
+ ```bash
126
+ basename $(pwd)
127
+ ```
128
+
129
+ If none of these work or result is generic (like "src", "build", "test"), refer to Step B2 below.
130
+
131
+ #### Detect Project Area
132
+
133
+ Run all four area detections in parallel and count matches. This avoids the false positives of a sequential
134
+ if/elif chain where the first match wins regardless of signal strength.
135
+
136
+ ```bash
137
+ HW=$(find . -maxdepth 2 -type f \( -name "*.ino" -o -name "*.pcb" -o -name "*.sch" -o -name "platformio.ini" -o -name "arduino_secrets.h" \) 2>/dev/null | wc -l)
138
+ SW=$(find . -maxdepth 2 -type f \( -name "package.json" -o -name "requirements.txt" -o -name "Cargo.toml" -o -name "go.mod" -o -name "*.py" -o -name "*.js" -o -name "*.ts" \) 2>/dev/null | wc -l)
139
+ WW=$(find . -maxdepth 2 -type f \( -name "*.stl" -o -name "*.blend" -o -name "*.f3d" -o -name "*.skp" -o -name "cut-list.md" \) 2>/dev/null | wc -l)
140
+ MS=$(find . -maxdepth 2 -type f \( -name "*.pd" -o -name "*.maxpat" -o -name "*.syx" -o -name "*.amxd" -o -name "patch-notes.md" \) 2>/dev/null | wc -l)
141
+ ```
142
+
143
+ Select the area using this decision logic:
144
+
145
+ - If `HW > 0` AND `SW > 0`: area is ambiguous (embedded software) — refer to Step B2
146
+ - Else if exactly one count is greater than all others: use that area
147
+ - Else if all counts are zero, or no clear winner: refer to Step B2
148
+
149
+ If no clear match, refer to Step B2 below.
150
+
151
+ #### Extract Description
152
+
153
+ Try to extract a brief description:
154
+
155
+ 1. Check if README.md exists and read first paragraph
156
+ 2. Check package.json for description field
157
+ 3. Parse the User's message for description
158
+ 4. See Step B2 below if the previous steps fail.
159
+
160
+ ### Step B2: Ask Clarifying Questions
161
+
162
+ If project_name is null OR area is null, use AskUserQuestion before launching agent:
163
+
164
+ **If project name is unclear:**
165
+
166
+ ```text
167
+ Question: "What would you like to name this project?"
168
+ Options:
169
+ - [Current directory name]
170
+ - [Git repo name if available]
171
+ - Other (custom input)
172
+ ```
173
+
174
+ **If area is unclear:**
175
+
176
+ ```text
177
+ Question: "What type of project is this?"
178
+ Options:
179
+ - Hardware
180
+ - Software
181
+ - Woodworking
182
+ - Music Synthesis
183
+ - Other (custom input)
184
+ ```
185
+
186
+ ### Step B3: Launch Documentation Agent
187
+
188
+ Launch an `obsidian-project-documentation:manager` agent with a prompt that includes all of the following context
189
+ variables. Every variable must be populated from the sources listed — do not leave any as empty or undefined.
190
+
191
+ | Variable | Source |
192
+ | -------- | ------ |
193
+ | `{vault_path}` | `vault_path` from config |
194
+ | `{project_name}` | Detected or user-supplied in Step 2–3 |
195
+ | `{area}` | Detected or user-supplied in Step 2–3 |
196
+ | `{description}` | Extracted or user-supplied in Step 2–3 |
197
+ | `{cwd}` | Run `pwd` |
198
+ | `{current_date}` | Run `date +%Y-%m-%d` |
199
+ | `{auto_commit}` | `auto_commit` from config |
200
+ | `{auto_push}` | `auto_push` from config |
201
+ | `{git_enabled}` | `git_enabled` from config |
202
+ | `{user_original_message}` | The exact message the User sent that triggered this skill |
203
+
204
+ Use this prompt template, substituting each `{variable}` with its value:
205
+
206
+ ```text
207
+ Vault Path: {vault_path}
208
+ Project Name: {project_name}
209
+ Project Area: {area}
210
+ Description: {description}
211
+ Working Directory: {cwd}
212
+ Current Date: {current_date}
213
+ auto_commit: {auto_commit}
214
+ auto_push: {auto_push}
215
+ git_enabled: {git_enabled}
216
+ User's original message: {user_original_message}
217
+ ```
218
+
219
+ ### Step B4: Report Results
220
+
221
+ When the agent completes, inform the User:
222
+
223
+ ```text
224
+ ✅ Project documented successfully!
225
+ 📝 Updated: {path_to_note}
226
+ 📋 Summary: {what_was_documented}
227
+ 🔄 Git: {commit_status} {push_status}
228
+ ```
229
+
230
+ ## Error Handling
231
+
232
+ If errors occur:
233
+
234
+ - **Config missing**: Run first-run setup (ask for vault path, write config)
235
+ - **Vault not accessible**: Verify vault_path in config
236
+ - **Git operations fail**: Report error, but still create/update note
237
+ - **Template missing**: Use a basic template or ask the User to reinstall
238
+
239
+ ## Important things to remember
240
+
241
+ - Use absolute paths for all file operations.
242
+ - Use the current date for all timestamp operations.
243
+ - Handle errors gracefully (missing templates, git failures, etc.).
244
+ - When refering to the User, use their name and not 'User'. If in any doubt of the User's pronouns, ask the
245
+ User but always remember them.
@@ -0,0 +1,267 @@
1
+ # Area Mapping Reference
2
+
3
+ Quick reference for file extensions and patterns that indicate project areas.
4
+
5
+ ## File Extension to Area Mapping
6
+
7
+ | Extension | Area | Description |
8
+ | --------- | ---- | ----------- |
9
+ | `.ino` | Hardware | Arduino sketch files |
10
+ | `.cpp`, `.h` | Hardware* | C/C++ (embedded context) |
11
+ | `.pcb` | Hardware | PCB design files |
12
+ | `.sch` | Hardware | Schematic files |
13
+ | `.js`, `.ts` | Software | JavaScript/TypeScript |
14
+ | `.py` | Software | Python |
15
+ | `.go` | Software | Go |
16
+ | `.rs` | Software | Rust |
17
+ | `.java` | Software | Java |
18
+ | `.rb` | Software | Ruby |
19
+ | `.php` | Software | PHP |
20
+ | `.stl` | Woodworking | 3D model (STL) |
21
+ | `.obj` | Woodworking | 3D object file |
22
+ | `.blend` | Woodworking | Blender file |
23
+ | `.f3d` | Woodworking | Fusion 360 file |
24
+ | `.skp` | Woodworking | SketchUp file |
25
+ | `.pd` | Music Synthesis | Pure Data patch |
26
+ | `.maxpat` | Music Synthesis | Max/MSP patch |
27
+ | `.syx` | Music Synthesis | SysEx MIDI file |
28
+ | `.fxp` | Music Synthesis | VST preset |
29
+ | `.amxd` | Music Synthesis | Ableton M4L device |
30
+ | `.sh` | Software | Shell |
31
+
32
+ *Note: `.cpp` and `.h` can be Software or Hardware depending on context. Check for embedded indicators.
33
+
34
+ ## Configuration File Mapping
35
+
36
+ | File | Area | Description |
37
+ | ---- | ---- | ----------- |
38
+ | `platformio.ini` | Hardware | PlatformIO configuration |
39
+ | `arduino_secrets.h` | Hardware | Arduino secrets |
40
+ | `package.json` | Software | Node.js package |
41
+ | `requirements.txt` | Software | Python dependencies |
42
+ | `Cargo.toml` | Software | Rust package |
43
+ | `go.mod` | Software | Go module |
44
+ | `pom.xml` | Software | Java Maven |
45
+ | `build.gradle` | Software | Java Gradle |
46
+ | `cut-list.md` | Woodworking | Woodworking cut list |
47
+ | `materials.md` | Woodworking | Materials list |
48
+ | `patch-notes.md` | Music Synthesis | Synth patch notes |
49
+ | `tuning-table.txt` | Music Synthesis | Musical tuning data |
50
+
51
+ ## Keyword Indicators
52
+
53
+ ### Hardware Keywords
54
+
55
+ ```text
56
+ arduino, esp32, esp8266, teensy, stm32
57
+ circuit, pcb, schematic, breadboard
58
+ sensor, actuator, microcontroller, mcu
59
+ i2c, spi, uart, serial, gpio
60
+ led, button, motor, servo
61
+ voltage, current, resistor, capacitor
62
+ ```
63
+
64
+ ### Software Keywords
65
+
66
+ ```text
67
+ api, rest, graphql, endpoint
68
+ backend, frontend, fullstack
69
+ server, client, database, db
70
+ web, mobile, desktop, app
71
+ framework, library, package
72
+ npm, pip, cargo, composer
73
+ react, vue, angular, flask, django
74
+ docker, kubernetes, container
75
+ ```
76
+
77
+ ### Woodworking Keywords
78
+
79
+ ```text
80
+ joinery, dovetail, mortise, tenon
81
+ dado, rabbet, tongue, groove
82
+ finish, stain, polyurethane, lacquer
83
+ wood, lumber, hardwood, plywood, mdf
84
+ oak, maple, walnut, cherry, pine
85
+ table, saw, router, planer, jointer
86
+ shop, workshop, woodshop, bench
87
+ clamp, chisel, plane, sandpaper
88
+ ```
89
+
90
+ ### Music Synthesis Keywords
91
+
92
+ ```text
93
+ oscillator, vco, vca, vcf
94
+ filter, lowpass, highpass, bandpass
95
+ envelope, adsr, attack, decay, sustain, release
96
+ lfo, modulation, frequency, amplitude
97
+ modular, eurorack, rack, module
98
+ patch, voice, polyphony, monophonic
99
+ cv, gate, trigger, clock
100
+ midi, note, cc, sysex
101
+ synthesis, synth, analog, digital
102
+ waveform, sine, saw, square, triangle
103
+ ```
104
+
105
+ ## Detection Priority
106
+
107
+ When multiple areas match:
108
+
109
+ 1. **Hardware + Software**: Ask user (likely embedded software project)
110
+ 2. **Woodworking + Hardware**: Ask user (could be CNC or electronics enclosure)
111
+ 3. **Music Synthesis + Hardware**: Ask user (likely hardware synthesizer build)
112
+ 4. **Music Synthesis + Software**: Ask user (software synthesizer or plugin)
113
+
114
+ ## Special Cases
115
+
116
+ ### Embedded Software (Hardware + Software)
117
+
118
+ If both hardware and software indicators present:
119
+
120
+ - Check for microcontroller keywords (arduino, esp32, etc.) → Hardware
121
+ - Check for web/api keywords → Software
122
+ - When in doubt, ask user to choose primary area
123
+
124
+ ### 3D Printing Projects
125
+
126
+ `.stl`, `.gcode` files could be:
127
+
128
+ - Woodworking (jigs, fixtures, furniture parts)
129
+ - Hardware (enclosures, brackets, mechanical parts)
130
+ - Music Synthesis (eurorack panels, knobs)
131
+
132
+ Check context and ask user if needed.
133
+
134
+ ### CAD/Design Projects
135
+
136
+ `.blend`, `.f3d`, `.skp` files could be:
137
+
138
+ - Woodworking (furniture design)
139
+ - Hardware (enclosure design)
140
+ - General 3D modeling
141
+
142
+ Look for other context clues or ask user.
143
+
144
+ ## Custom Area Support
145
+
146
+ Users can add custom areas in config.json:
147
+
148
+ ```json
149
+ {
150
+ "areas": [
151
+ "Hardware",
152
+ "Software",
153
+ "Woodworking",
154
+ "Music Synthesis",
155
+ "Photography",
156
+ "3D Printing"
157
+ ]
158
+ }
159
+ ```
160
+
161
+ If user has custom areas, ask them to classify or provide detection rules.
162
+
163
+ ## Canonical Technology Names for Relationship Matching
164
+
165
+ When populating the `technologies:` frontmatter field or matching cross-project relationships, use these canonical
166
+ names for consistency. Matching is case-insensitive; always write the canonical form listed here.
167
+
168
+ ### Hardware
169
+
170
+ | Canonical Name | Aliases / Indicators |
171
+ | -------------- | -------------------- |
172
+ | Arduino | arduino, `.ino` |
173
+ | ESP32 | esp32, esp-32 |
174
+ | ESP8266 | esp8266, esp-8266 |
175
+ | Teensy | teensy |
176
+ | STM32 | stm32, bluepill |
177
+ | Raspberry Pi | raspberry pi, rpi, raspi |
178
+ | Raspberry Pi Pico | pico, rp2040 |
179
+ | KiCad | kicad, `.kicad_pcb` |
180
+ | I2C | i2c, i²c, wire |
181
+ | SPI | spi |
182
+ | UART | uart, serial |
183
+ | MQTT | mqtt |
184
+ | BLE | ble, bluetooth le, bluetooth low energy |
185
+ | WiFi | wifi, wi-fi, wireless |
186
+ | CNC | cnc, gcode, `.gcode` |
187
+
188
+ ### Software
189
+
190
+ | Canonical Name | Aliases / Indicators |
191
+ | -------------- | -------------------- |
192
+ | JavaScript | javascript, `.js` |
193
+ | TypeScript | typescript, `.ts` |
194
+ | Python | python, `.py` |
195
+ | Go | golang, `.go` |
196
+ | Rust | rust, `.rs`, cargo |
197
+ | Java | java, `.java` |
198
+ | Ruby | ruby, `.rb` |
199
+ | PHP | php, `.php` |
200
+ | Shell | bash, sh, zsh, `.sh` |
201
+ | React | react, reactjs |
202
+ | Vue | vue, vuejs |
203
+ | Angular | angular |
204
+ | Flask | flask |
205
+ | Django | django |
206
+ | Express | express, expressjs |
207
+ | FastAPI | fastapi |
208
+ | Docker | docker, dockerfile, container |
209
+ | Kubernetes | kubernetes, k8s, helm |
210
+ | PostgreSQL | postgresql, postgres |
211
+ | MySQL | mysql |
212
+ | MongoDB | mongodb, mongo |
213
+ | SQLite | sqlite |
214
+ | Redis | redis |
215
+ | AWS | aws, amazon web services |
216
+ | Claude API | claude api, anthropic, claude code |
217
+
218
+ ### Woodworking
219
+
220
+ | Canonical Name | Aliases / Indicators |
221
+ | -------------- | -------------------- |
222
+ | Dovetail joinery | dovetail |
223
+ | Mortise and tenon | mortise, tenon |
224
+ | CNC routing | cnc router |
225
+ | Hand-cut joinery | hand-cut, hand cut |
226
+ | Lathe turning | lathe, turned, turning |
227
+ | Oak | oak |
228
+ | Maple | maple |
229
+ | Walnut | walnut |
230
+ | Cherry | cherry |
231
+ | Pine | pine |
232
+ | Plywood | plywood |
233
+ | MDF | mdf |
234
+ | Oil finish | oil, danish oil, tung oil |
235
+ | Polyurethane | polyurethane |
236
+ | Fusion 360 | fusion 360, `.f3d` |
237
+ | SketchUp | sketchup, `.skp` |
238
+
239
+ ### Music Synthesis
240
+
241
+ | Canonical Name | Aliases / Indicators |
242
+ | -------------- | -------------------- |
243
+ | Eurorack | eurorack, euro-rack |
244
+ | Pure Data | pure data, pd, `.pd` |
245
+ | Max/MSP | max/msp, maxmsp, `.maxpat` |
246
+ | Ableton Live | ableton, live, `.als`, `.amxd` |
247
+ | MIDI | midi, `.syx`, `.mid` |
248
+ | CV/Gate | cv, gate, cv/gate |
249
+ | Analog synthesis | analog, analogue |
250
+ | FM synthesis | fm, fm synthesis, frequency modulation |
251
+ | Granular synthesis | granular |
252
+ | Wavetable synthesis | wavetable |
253
+ | VCO | vco, oscillator |
254
+ | VCF | vcf, filter |
255
+ | VCA | vca, amplifier |
256
+ | ADSR | adsr, envelope |
257
+ | OSC | osc, open sound control |
258
+
259
+ ## Future Enhancements
260
+
261
+ Potential improvements for area detection:
262
+
263
+ - Machine learning classification based on file content
264
+ - User training: remember classifications for similar projects
265
+ - Directory path patterns (~/arduino-projects → Hardware)
266
+ - Git repository topics/keywords from GitHub
267
+ - README.md badge detection (shields.io)