claude-dev-env 1.7.0 → 1.8.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/agents/deep-research.md +170 -0
- package/bin/install.mjs +98 -102
- package/hooks/HOOK_SPECS_PROMPT_WORKFLOW.md +68 -0
- package/hooks/blocking/agent-execution-intent-gate.py +83 -0
- package/hooks/blocking/prompt-workflow-stop-guard.py +131 -0
- package/hooks/blocking/prompt_workflow_gate_core.py +161 -0
- package/hooks/blocking/test_agent_execution_intent_gate.py +106 -0
- package/hooks/blocking/test_context_control_policy_files.py +27 -0
- package/hooks/blocking/test_prompt_workflow_gate_core.py +68 -0
- package/hooks/blocking/test_prompt_workflow_stop_guard.py +144 -0
- package/hooks/hooks.json +10 -0
- package/package.json +1 -6
- package/rules/prompt-workflow-context-controls.md +48 -0
- package/skills/agent-prompt/SKILL.md +200 -0
- package/skills/deep-research/SKILL.md +80 -0
- package/skills/dream/SKILL.md +118 -0
- package/skills/prompt-generator/REFERENCE.md +150 -0
- package/skills/prompt-generator/REFINEMENT_PIPELINE_RUNBOOK.md +174 -0
- package/skills/prompt-generator/SKILL.md +333 -0
- package/skills/research-mode/SKILL.md +53 -0
- package/skills/session-log/SKILL.md +237 -0
- package/skills/session-tidy/SKILL.md +181 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-log
|
|
3
|
+
description: Log a session report to the Obsidian vault, track vault context usage, extract unrecorded decisions, tidy the project's session folder, and output a /rename command. Use when the user says /session-log, journal this session, log this work, session report, or any variation of "summarize/log/record this session". Also triggers on "save session", "capture session", or "document what we did".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Session Log
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Write a structured session report, then run vault context tracking, decision extraction, and session tidying.
|
|
11
|
+
|
|
12
|
+
**Announce at start:** "I'm logging this session."
|
|
13
|
+
|
|
14
|
+
This skill runs as a 5-step workflow. Every step runs automatically -- no user prompts between steps except where noted.
|
|
15
|
+
|
|
16
|
+
## Backend Detection (run before Step 1)
|
|
17
|
+
|
|
18
|
+
Determine which storage backend is available. Try in this order and use the first that succeeds:
|
|
19
|
+
|
|
20
|
+
1. **Headless vault** -- run `ob --version` via Bash to verify the obsidian-headless CLI is installed. Then check `OBSIDIAN_VAULT_PATH` environment variable or `~/.claude/vault/` for a vault directory. If the CLI exists and a vault directory resolves, optionally run `ob sync-status --path <vault-path>` to verify sync is active. Set `backend = "headless"`.
|
|
21
|
+
|
|
22
|
+
2. **Obsidian MCP** -- call `mcp__obsidian__list_directory` with `path="sessions"`. If it succeeds, use Obsidian MCP for all operations. Set `backend = "obsidian"`.
|
|
23
|
+
|
|
24
|
+
3. **Local vault** -- if neither headless nor MCP is available, use `~/.claude/vault/` as a local vault directory. Create it via `mkdir -p ~/.claude/vault/sessions` if it does not exist. Set `backend = "local"`. This provides a working vault structure that can be upgraded to headless sync later.
|
|
25
|
+
|
|
26
|
+
**Backend capabilities:**
|
|
27
|
+
|
|
28
|
+
| Capability | headless | obsidian | local |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| Write session reports | Write tool | `mcp__obsidian__write_note` | Write tool |
|
|
31
|
+
| Search prior sessions | Bash `ls` + Grep | `mcp__obsidian__search_notes` | Bash `ls` + Grep |
|
|
32
|
+
| Session number detection | parse filenames | frontmatter search | parse filenames |
|
|
33
|
+
| Frontmatter | YAML `---` fences | handled by MCP | YAML `---` fences |
|
|
34
|
+
| Step 2 (vault context tracking) | skip | runs | skip |
|
|
35
|
+
| Step 4 (session tidy) | skip | runs | skip |
|
|
36
|
+
| Sync | Obsidian Sync | Obsidian Sync | none (local only) |
|
|
37
|
+
|
|
38
|
+
**Session number detection (headless and local):**
|
|
39
|
+
- List files in the project directory via Bash `ls`
|
|
40
|
+
- Parse filenames matching `[N]. *.md`
|
|
41
|
+
- Highest N + 1. If directory does not exist, create it and start at 1
|
|
42
|
+
|
|
43
|
+
**Output paths:**
|
|
44
|
+
- headless: `$OBSIDIAN_VAULT_PATH/sessions/[Project]/[N]. [Title].md` or `~/.claude/vault/sessions/[Project]/[N]. [Title].md`
|
|
45
|
+
- obsidian: `sessions/[Project]/[N]. [Title].md` (vault-relative)
|
|
46
|
+
- local: `~/.claude/vault/sessions/[Project]/[N]. [Title].md`
|
|
47
|
+
|
|
48
|
+
Announce the backend: "Using headless vault at [path].", "Using Obsidian vault.", or "Using local vault at ~/.claude/vault/. Run `/obsidian-check` for upgrade options."
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Step 1: Write Session Report
|
|
53
|
+
|
|
54
|
+
1. Review the conversation to identify: key outcomes, blockers, decisions, and next steps.
|
|
55
|
+
|
|
56
|
+
2. Determine session metadata:
|
|
57
|
+
- **Project name:** infer from conversation context
|
|
58
|
+
- **Session number:** search existing vault notes to find the latest session number for this project, then increment. Use `mcp__obsidian__search_notes` with `searchFrontmatter: true` and the project name. If no prior sessions exist, start at 1.
|
|
59
|
+
- **Date:** today's date
|
|
60
|
+
- **Title:** a 2-5 word summary of the session's primary outcome or focus area. Pick the single most important thing that happened. Examples: "Amazon Auth Migration", "Source Loading Fix", "Vault Reorganization". Avoid generic titles like "Bug Fixes" or "Various Updates".
|
|
61
|
+
|
|
62
|
+
3. **Write to vault** via `mcp__obsidian__write_note`:
|
|
63
|
+
- **Path:** `sessions/[Project]/[N]. [Title].md`
|
|
64
|
+
- **Frontmatter:** `{"type": "session-report", "project": "[name]", "session": [N], "date": "[YYYY-MM-DD]", "status": "completed"|"in-progress"|"blocked", "blocked": true|false, "tags": ["session", "[project-tag]"]}`
|
|
65
|
+
- **Content:** Markdown formatted (see Vault Format below)
|
|
66
|
+
|
|
67
|
+
4. **Backend-specific write:**
|
|
68
|
+
- **headless:** Write tool to the headless vault path. Include frontmatter as YAML `---` fences at the top of the file. Create the project directory via `mkdir -p` if it does not exist.
|
|
69
|
+
- **obsidian:** `mcp__obsidian__write_note` with path and frontmatter object
|
|
70
|
+
- **local:** Write tool to `~/.claude/vault/sessions/[Project]/[N]. [Title].md`. Include frontmatter as YAML `---` fences. Create the project directory via `mkdir -p` if it does not exist.
|
|
71
|
+
- **If the write fails:** output the content in the conversation so the user can copy it manually. Skip Steps 2-4 and go directly to Step 5.
|
|
72
|
+
|
|
73
|
+
### Vault Format -- Markdown Session Report
|
|
74
|
+
|
|
75
|
+
The vault note uses markdown (not HTML).
|
|
76
|
+
|
|
77
|
+
```markdown
|
|
78
|
+
## Session [N] Report -- [Month Day, Year]
|
|
79
|
+
|
|
80
|
+
### [emoji] [Section Title]
|
|
81
|
+
|
|
82
|
+
[1-3 sentence explanation of what happened and why it matters]
|
|
83
|
+
|
|
84
|
+
- **[Label]:** [detail]
|
|
85
|
+
|
|
86
|
+
**Fix:** [what was done]
|
|
87
|
+
|
|
88
|
+
### [emoji] [Section with tabular data]
|
|
89
|
+
|
|
90
|
+
[Context sentence]
|
|
91
|
+
|
|
92
|
+
| # | Item | Status |
|
|
93
|
+
|---|------|--------|
|
|
94
|
+
| 1 | ... | ... |
|
|
95
|
+
|
|
96
|
+
### [emoji] Notes
|
|
97
|
+
|
|
98
|
+
- **[Topic]:** [detail]
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Emoji Status Indicators
|
|
102
|
+
|
|
103
|
+
| Emoji | Meaning | Use when |
|
|
104
|
+
|-------|---------|----------|
|
|
105
|
+
| ✅ | Done/Fixed | A problem was resolved or a deliverable completed |
|
|
106
|
+
| 🚫 | Blocked | Something couldn't be done (external limit, dependency, etc.) |
|
|
107
|
+
| ⚠️ | Warning/Note | Important context, gotchas, or things to remember |
|
|
108
|
+
| 🔧 | In Progress | Work started but not finished |
|
|
109
|
+
| 📋 | Queued | Work identified but not yet started |
|
|
110
|
+
|
|
111
|
+
### Formatting Rules
|
|
112
|
+
|
|
113
|
+
- **Section headers** (`###`) get one emoji + descriptive title
|
|
114
|
+
- **Explanatory paragraphs** under each header -- not just bullets. Explain what happened and why.
|
|
115
|
+
- **Bold inline labels** for key facts: `**Fix:**`, `**Account:**`, etc.
|
|
116
|
+
- **Tables** for anything with 3+ rows of structured data (queued items, test results, file lists)
|
|
117
|
+
- **Bullets** for lists of 2+ related items
|
|
118
|
+
- **Links** where useful: file paths, URLs, PR links as markdown links
|
|
119
|
+
|
|
120
|
+
### What NOT to include
|
|
121
|
+
|
|
122
|
+
- Play-by-play of debugging steps or failed approaches
|
|
123
|
+
- Process narration ("First I tried X, then Y")
|
|
124
|
+
- Redundant sections -- if nothing was blocked, skip the blocked section
|
|
125
|
+
|
|
126
|
+
### Example
|
|
127
|
+
|
|
128
|
+
```markdown
|
|
129
|
+
## Session 6 Report -- March 27, 2026
|
|
130
|
+
|
|
131
|
+
### ✅ Developer Docs Sources Fixed
|
|
132
|
+
|
|
133
|
+
Both Developer Docs notebooks that had been broken since Session 5 are now fully loaded with working sources:
|
|
134
|
+
|
|
135
|
+
- **Notebook #28 -- Building with Claude & Tools:** 52 sources loaded (all green)
|
|
136
|
+
- **Notebook #29 -- Agent SDK & Testing:** 49 sources loaded (all green)
|
|
137
|
+
|
|
138
|
+
**Fix:** Swapped `platform.claude.com/docs/en/X.md` URLs to `docs.anthropic.com/en/docs/X` (drop .md, swap domain). Tested one URL first, then bulk-loaded.
|
|
139
|
+
|
|
140
|
+
### 🚫 Audio Generation Blocked
|
|
141
|
+
|
|
142
|
+
All 10 Audio Overviews (8 System Card + 2 Developer Docs) are ready to generate but hit the daily limit wall. The 19 overviews from Session 5 (15 Academy + 4 Opus) are still within the rolling 24-hour window.
|
|
143
|
+
|
|
144
|
+
### ⚠️ Session 7 Notes
|
|
145
|
+
|
|
146
|
+
- **Account:** Notebooks live under secondary@example.com (authuser=1), NOT the default primary@example.com.
|
|
147
|
+
- **Audio budget:** Once the 24h window resets, all 10 overviews fit within the 20/day Pro limit.
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Step 2: Vault Context Tracking
|
|
153
|
+
|
|
154
|
+
This step runs automatically after Step 1 completes.
|
|
155
|
+
|
|
156
|
+
1. **Check vault context usage.** Review the conversation history for any use of these MCP tools (excluding this skill's own calls during Step 1):
|
|
157
|
+
- `mcp__obsidian__search_notes`
|
|
158
|
+
- `mcp__obsidian__read_note`
|
|
159
|
+
- `mcp__obsidian__read_multiple_notes`
|
|
160
|
+
|
|
161
|
+
If any were used, set `vault_context_retrieved: true`. Otherwise `false`.
|
|
162
|
+
If true, also note which vault notes were read (list the paths).
|
|
163
|
+
|
|
164
|
+
2. **Update frontmatter.** Use `mcp__obsidian__update_frontmatter` to add the tracking field:
|
|
165
|
+
```
|
|
166
|
+
mcp__obsidian__update_frontmatter(
|
|
167
|
+
path="[session note path from Step 1]",
|
|
168
|
+
frontmatter={"vault_context_retrieved": true|false},
|
|
169
|
+
merge=true
|
|
170
|
+
)
|
|
171
|
+
```
|
|
172
|
+
If `update_frontmatter` fails, fall back to: read the note with `mcp__obsidian__read_note`, add the field to frontmatter manually, rewrite with `mcp__obsidian__write_note`.
|
|
173
|
+
|
|
174
|
+
3. **Append tracking line.** Use `mcp__obsidian__patch_note` to append a vault context line to the Notes section (or end of the note if no Notes section exists):
|
|
175
|
+
- If retrieved: `- **Vault context:** Retrieved ([list of note paths])`
|
|
176
|
+
- If not retrieved: `- **Vault context:** Not retrieved`
|
|
177
|
+
|
|
178
|
+
If `patch_note` fails, fall back to read-modify-write via `read_note` + `write_note`.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Step 3: Decision Extraction
|
|
183
|
+
|
|
184
|
+
This step runs automatically after Step 2 completes.
|
|
185
|
+
|
|
186
|
+
Scan the conversation for decisions, gotchas, or architectural choices that were not already saved via `/remember` or to memory. For each one found, ask the user:
|
|
187
|
+
|
|
188
|
+
> "I noticed this decision: [summary]. Want me to save it to the vault with /remember?"
|
|
189
|
+
|
|
190
|
+
Only write decision notes the user confirms. If no unrecorded decisions are found, skip silently.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Step 4: Session Tidy (Project Scope)
|
|
195
|
+
|
|
196
|
+
This step runs automatically after Step 3 completes. It runs a scoped version of `/session-tidy` -- only for the current project's session folder, not the entire vault.
|
|
197
|
+
|
|
198
|
+
1. **List files** in `sessions/[Project]/` via `mcp__obsidian__list_directory`.
|
|
199
|
+
|
|
200
|
+
2. **Quick audit** each file for:
|
|
201
|
+
- **Naming convention:** must match `[N]. [Title].md`
|
|
202
|
+
- **Frontmatter completeness:** all required fields present (`type`, `project`, `session`, `date`, `status`, `blocked`, `tags`)
|
|
203
|
+
- **Status coherence:** `status: "completed"` with `blocked: true` is contradictory. `status: "in-progress"` or `status: "blocked"` on sessions older than 7 days is stale.
|
|
204
|
+
|
|
205
|
+
3. **Auto-fix minor issues silently:**
|
|
206
|
+
- Missing frontmatter fields that can be inferred (e.g., `blocked: false` when status is `completed`)
|
|
207
|
+
- Type field set to wrong value (correct to `session-report`)
|
|
208
|
+
|
|
209
|
+
4. **Report issues that need user input:**
|
|
210
|
+
- Files with wrong naming convention (propose new name)
|
|
211
|
+
- Stale statuses (propose update to `completed` or ask)
|
|
212
|
+
- Contradictory status/blocked combos
|
|
213
|
+
|
|
214
|
+
If no issues are found, skip silently. Do not report "all clean."
|
|
215
|
+
|
|
216
|
+
5. **Rollup check:** if the project has 5+ sessions and no `Summary.md`, mention it:
|
|
217
|
+
> "This project has [N] sessions and no summary. Run `/session-tidy` for a full rollup."
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Step 5: Finalize
|
|
222
|
+
|
|
223
|
+
Copy a `/rename` command to the user's clipboard using `echo -n "/rename [Project] - [Primary Outcome]" | clip.exe`, then tell the user:
|
|
224
|
+
|
|
225
|
+
> "Copied `/rename [Project] - [Primary Outcome]` to your clipboard. Paste it to rename this session."
|
|
226
|
+
|
|
227
|
+
The primary outcome comes from the session title determined in Step 1.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Best Practices
|
|
232
|
+
|
|
233
|
+
- Each section in the session report is an outcome, not a process step ("Sources Fixed" not "We debugged source loading")
|
|
234
|
+
- Body should be self-contained -- no context needed beyond the note itself
|
|
235
|
+
- If the session was exploratory with no concrete outcome, use 🔧 or 📋 sections to describe what was investigated and what's next
|
|
236
|
+
- Keep it scannable: a reader should grasp the session in 15 seconds from headers alone
|
|
237
|
+
- Tables are powerful -- use them whenever you have structured data (queued work, test results, file inventories)
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-tidy
|
|
3
|
+
description: Audit, clean, and consolidate session logs in the Obsidian vault. Fixes format drift, resolves orphaned next-steps, updates stale statuses, and generates project rollup summaries. Use when session logs feel cluttered or before starting a new project milestone. Triggers on '/session-tidy', 'tidy sessions', 'clean up session logs', 'session audit'.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Session Tidy: Session Log Consolidation
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Audit and consolidate session logs in the Obsidian vault (`sessions/[Project]/`) by enforcing the format contract, categorizing uncategorized files into project subfolders, resolving orphaned next-steps, updating stale statuses, and generating project rollup summaries.
|
|
12
|
+
|
|
13
|
+
**Announce at start:** "Running session log consolidation."
|
|
14
|
+
|
|
15
|
+
**Context:** Standalone maintenance utility. Run periodically, after completing a project milestone, or when starting fresh on a project. Companion to `/dream` (memory consolidation) and `/session-log` (session creation).
|
|
16
|
+
|
|
17
|
+
## The Format Contract
|
|
18
|
+
|
|
19
|
+
Source: `journal:session-log` skill definition. Read that skill's SKILL.md if you need to verify the authoritative format.
|
|
20
|
+
|
|
21
|
+
**Directory structure:** `sessions/[Project]/[N]. [Title].md`
|
|
22
|
+
- Each project gets its own subfolder under `sessions/`
|
|
23
|
+
- Session files are named `[N]. [Title].md` where Title is a 2-5 word summary of the primary outcome (e.g., `3. Amazon Auth Migration.md`)
|
|
24
|
+
- Summary files are named `Summary.md` in the same project folder
|
|
25
|
+
- No parenthetical suffixes like `(Wrap-Up)`
|
|
26
|
+
- Files missing a title (e.g., `Session 1.md` or `1.md`) should be flagged for renaming -- read the content to derive a title
|
|
27
|
+
|
|
28
|
+
**Required frontmatter fields:**
|
|
29
|
+
```yaml
|
|
30
|
+
---
|
|
31
|
+
type: session-report
|
|
32
|
+
project: "[name]"
|
|
33
|
+
session: [N]
|
|
34
|
+
date: "[YYYY-MM-DD]"
|
|
35
|
+
status: "completed" | "in-progress" | "blocked"
|
|
36
|
+
blocked: true | false
|
|
37
|
+
tags: ["session", "[project-tag]"]
|
|
38
|
+
---
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Content structure:**
|
|
42
|
+
- Section headers (`###`) use one emoji + outcome-oriented title
|
|
43
|
+
- Valid emojis: ✅ (done), 🚫 (blocked), ⚠️ (note), 🔧 (in-progress), 📋 (queued)
|
|
44
|
+
- Explanatory paragraphs under each header, not just bullets
|
|
45
|
+
- Tables for 3+ rows of structured data
|
|
46
|
+
- No play-by-play or process narration
|
|
47
|
+
|
|
48
|
+
## The Process
|
|
49
|
+
|
|
50
|
+
### Phase 0: Preflight
|
|
51
|
+
|
|
52
|
+
Determine which storage backend is available. Try in this order and use the first that succeeds:
|
|
53
|
+
|
|
54
|
+
1. **Headless vault** -- run `ob --version` via Bash to verify the obsidian-headless CLI is installed. Then check `OBSIDIAN_VAULT_PATH` environment variable or `~/.claude/vault/` for a vault directory. If the CLI exists and a vault directory resolves, set `backend = "headless"`.
|
|
55
|
+
|
|
56
|
+
2. **Obsidian MCP** -- call `mcp__obsidian__list_directory` with `path="sessions"`. If it succeeds, set `backend = "obsidian"`.
|
|
57
|
+
|
|
58
|
+
3. **Local vault** -- use `~/.claude/vault/` as a local vault directory. Create it via `mkdir -p ~/.claude/vault/sessions` if it does not exist. Set `backend = "local"`.
|
|
59
|
+
|
|
60
|
+
**Headless and local capability notes:** When running without Obsidian MCP, the following operations use alternative methods:
|
|
61
|
+
- **Move/rename:** `mv` via Bash
|
|
62
|
+
- **Frontmatter update:** Read + modify YAML + Write
|
|
63
|
+
- **Search:** Bash `ls` + Grep
|
|
64
|
+
|
|
65
|
+
### Phase 1: Audit
|
|
66
|
+
|
|
67
|
+
List project subdirectories in `sessions/` via `mcp__obsidian__list_directory`. For each project folder, read its files via `mcp__obsidian__read_note`. Also check for any files sitting directly in `sessions/` (uncategorized). For each file, check:
|
|
68
|
+
|
|
69
|
+
1. **Naming convention?** Must match `[N]. [Title].md` where N is the session number and Title is a 2-5 word outcome summary. Flag bracket prefixes, date-only names, parenthetical suffixes, or legacy `Session [N].md` patterns missing a title.
|
|
70
|
+
2. **Frontmatter complete?** All required fields present: `type`, `project`, `session`, `date`, `status`, `blocked`, `tags`.
|
|
71
|
+
3. **Type correct?** Must be `session-report`. Flag other types like `rule-audit`.
|
|
72
|
+
4. **Status coherent?** `status: "completed"` with `blocked: true` is contradictory. `status: "in-progress"` or `status: "blocked"` on sessions older than 7 days is likely stale.
|
|
73
|
+
5. **Orphaned next-steps?** Scan content for sections containing "Next", "Queued", "Session N+1", "TODO", or clipboard emoji sections. Cross-reference against subsequent sessions for the same project to determine if the items were addressed.
|
|
74
|
+
6. **Categorized?** Files sitting directly in `sessions/` (not in a project subfolder) are uncategorized. Infer the project name from the filename pattern (e.g., `BudgetBridge Session 3.md` belongs in `sessions/BudgetBridge/`) or from the frontmatter `project` field. Flag for move into the correct subfolder.
|
|
75
|
+
|
|
76
|
+
### Phase 2: Propose Changes
|
|
77
|
+
|
|
78
|
+
Present a structured report:
|
|
79
|
+
|
|
80
|
+
**Format violations** -- files with wrong naming, missing/wrong frontmatter fields, wrong type
|
|
81
|
+
**Stale statuses** -- in-progress or blocked sessions older than 7 days, contradictory status+blocked combos
|
|
82
|
+
**Orphaned next-steps** -- queued items from session N with no evidence of resolution in session N+1 or later. For each item, state whether it was:
|
|
83
|
+
- **Resolved:** found evidence in a later session
|
|
84
|
+
- **Orphaned:** no later session addresses it
|
|
85
|
+
- **Unknown:** later sessions exist but don't clearly address or skip the item
|
|
86
|
+
**Uncategorized files** -- files in `sessions/` root that should be moved into a project subfolder
|
|
87
|
+
**Rollup candidates** -- projects with 3+ sessions that have no rollup/summary session
|
|
88
|
+
**Proposed actions** -- numbered list of specific changes
|
|
89
|
+
|
|
90
|
+
Do NOT execute any changes yet. Wait for user approval.
|
|
91
|
+
|
|
92
|
+
### Phase 3: Execute
|
|
93
|
+
|
|
94
|
+
After user approves (all or selected items):
|
|
95
|
+
|
|
96
|
+
1. **Rename** non-conforming files via `mcp__obsidian__move_note`.
|
|
97
|
+
2. **Fix frontmatter** via `mcp__obsidian__update_frontmatter` -- set correct type, add missing fields.
|
|
98
|
+
3. **Update stale statuses** -- change old in-progress/blocked to completed (or ask user for correct status).
|
|
99
|
+
4. **Clean orphaned next-steps** -- for confirmed orphaned items, either:
|
|
100
|
+
- Remove the section if all items are orphaned and the session is old
|
|
101
|
+
- Add a strikethrough or "(not pursued)" annotation if some items remain relevant
|
|
102
|
+
- Leave unchanged if user declines
|
|
103
|
+
5. **Generate project rollups** -- for each qualifying project, write a summary note via `mcp__obsidian__write_note`:
|
|
104
|
+
- **Path:** `sessions/[Project]/Summary.md`
|
|
105
|
+
- **Frontmatter:** `{"type": "project-summary", "project": "[name]", "sessions": [count], "date_range": "[first] to [last]", "tags": ["summary", "[project-tag]"]}`
|
|
106
|
+
- **Content:** Use this template:
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
## [Project] -- Project Summary
|
|
110
|
+
|
|
111
|
+
### Timeline
|
|
112
|
+
|
|
113
|
+
| # | Title | Date | Status |
|
|
114
|
+
|---|-------|------|--------|
|
|
115
|
+
| 1 | [title from filename] | [date] | ✅/🔧/🚫 |
|
|
116
|
+
|
|
117
|
+
### Key Outcomes
|
|
118
|
+
- **Session [N]:** [one-line summary of primary outcome]
|
|
119
|
+
|
|
120
|
+
### Current Status
|
|
121
|
+
[One paragraph: where the project stands now, what's active, what's done]
|
|
122
|
+
|
|
123
|
+
### Carried Forward
|
|
124
|
+
- [ ] [unresolved item from latest session]
|
|
125
|
+
```
|
|
126
|
+
6. **Categorize uncategorized files** -- move files from `sessions/` root into the correct project subfolder via `mcp__obsidian__move_note`. When moving, rename to match the `[N]. [Title].md` convention (e.g., `sessions/BudgetBridge Session 3.md` becomes `sessions/BudgetBridge/3. [Title derived from content].md`).
|
|
127
|
+
|
|
128
|
+
### Phase 4: Verify
|
|
129
|
+
|
|
130
|
+
After execution, re-read the vault and confirm:
|
|
131
|
+
- Every session file lives in a project subfolder under `sessions/[Project]/`
|
|
132
|
+
- Every file has valid frontmatter with all required fields
|
|
133
|
+
- Every filename matches the naming convention (`[N]. [Title].md` or `Summary.md`)
|
|
134
|
+
- No contradictory status/blocked combos
|
|
135
|
+
- All orphaned next-steps resolved or annotated
|
|
136
|
+
- Rollup summaries exist for qualifying projects
|
|
137
|
+
|
|
138
|
+
Report the results: files renamed, frontmatter fixed, statuses updated, next-steps resolved, rollups generated.
|
|
139
|
+
|
|
140
|
+
If Phase 1 finds zero issues across all checks, skip Phases 2-4 and report: "All session logs are tidy. Nothing to do."
|
|
141
|
+
|
|
142
|
+
## Output Format
|
|
143
|
+
|
|
144
|
+
Phase 2 report structure:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
## Session Tidy Report
|
|
148
|
+
|
|
149
|
+
### Format Violations (X found)
|
|
150
|
+
- [file] -- [issue]
|
|
151
|
+
|
|
152
|
+
### Stale Statuses (X found)
|
|
153
|
+
- [file] -- [status] since [date] ([age] days ago)
|
|
154
|
+
|
|
155
|
+
### Uncategorized Files (X found)
|
|
156
|
+
- [file] -- move to sessions/[Project]/[new filename]
|
|
157
|
+
|
|
158
|
+
### Orphaned Next-Steps (X found)
|
|
159
|
+
- [file] -- "[item text]" -- [resolved/orphaned/unknown]
|
|
160
|
+
|
|
161
|
+
### Rollup Candidates (X projects)
|
|
162
|
+
- [project] -- [N] sessions, [date range], no summary exists
|
|
163
|
+
|
|
164
|
+
### Proposed Actions
|
|
165
|
+
1. [action] -- [file] -- [reason]
|
|
166
|
+
2. ...
|
|
167
|
+
|
|
168
|
+
Approve all, select by number, or cancel?
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## After Completion
|
|
172
|
+
|
|
173
|
+
Report summary: files renamed, frontmatter fixes, status updates, next-steps cleaned, rollups generated.
|
|
174
|
+
|
|
175
|
+
## Best Practices
|
|
176
|
+
|
|
177
|
+
- Run after finishing a multi-session project
|
|
178
|
+
- Run before starting a new milestone on an existing project (clears stale context)
|
|
179
|
+
- Cross-reference next-steps manually when the skill flags "unknown" -- it cannot determine intent from content alone
|
|
180
|
+
- The 7-day staleness threshold is a heuristic -- adjust based on how frequently you session-log
|
|
181
|
+
- Rollup summaries are not a replacement for individual session logs -- they are a navigational aid
|