Create PARA notes (resource or meeting) from data gathered during conversation. Interactive workflow that classifies, proposes, and creates with content injection. Use when structured information exists in conversation context and needs capturing as a vault note.
From para-obsidiannpx claudepluginhub nathanvale/side-quest-marketplace-old --plugin para-obsidianThis skill is limited to using the following tools:
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Create PARA-compliant resource or meeting notes from information gathered during the current conversation. This is the inline companion to triage -- use it when you already have rich context (e.g., from reading meeting notes, pulling Jira tickets, researching a topic) and want to capture it as a vault note without going through the inbox pipeline.
/para-obsidian:create-project/para-obsidian:create-area/para-obsidian:triage@ paths, never duplicatePhase 0: Load Vault Context (ALWAYS FIRST)
|
Phase 1: Classify Note Type
|-- Has arguments? -> pre-fill title + infer type
|-- No arguments? -> ask what to capture
|-- Apply decision tree -> resource or meeting
|
Phase 2: Gather Details (template-specific)
|-- Resource: title, source_format, URL, resource_type, area, summary
|-- Meeting: title, meeting_type, date, attendees, area/project, summary
|
Phase 3: Gather Content
|-- Resource: Layer 1 content from conversation
|-- Meeting: notes, decisions, action items, follow-up
|
Phase 4: Present Proposal & Confirm
|
Phase 5: Execute (create + inject + commit)
|
Phase 6: Report & Next Steps
ALWAYS fetch vault context before doing anything else:
para_list_areas({ response_format: "json" })
para_list_projects({ response_format: "json" })
Store these lists for:
Even if the user provides context in $ARGUMENTS, load vault context first.
$ARGUMENTS providedPre-fill the title from $ARGUMENTS and infer the template type:
You mentioned: "$ARGUMENTS"
Based on the conversation context, I suggest creating a **[resource/meeting]** note.
Does that sound right? (resource / meeting / something else)
Ask what to capture:
What information from this conversation would you like to capture as a vault note?
I can create:
1. **Resource** -- knowledge to learn from (article, video, idea, reference)
2. **Meeting** -- notes from a discussion (attendees, decisions, action items)
Reference: @../para-classifier/references/classification-decision-tree.md
Apply these checks from conversation context:
| Signal | Template |
|---|---|
| Attendees, agenda, action items, discussion date | meeting |
| Knowledge to distill, article/video/reference content | resource |
| Both present | Ask: "Is this primarily a record of an event, or knowledge to learn from?" |
| Neither clear | Default to resource with document source_format |
Ask one question at a time. Pre-fill from conversation context wherever possible.
Gather these fields in order:
article (๐ฐ)video (๐ฌ)podcast (๐๏ธ)thread (๐งต)book (๐)course (๐)paper (๐)document (๐)image (๐ผ๏ธ)audio (๐ง)document (๐) as fallbackarticle, tutorial, reference, thread, video, ideaGather these fields in order:
1-on-1, standup, planning, retro, review, interview, stakeholder, generalYYYY-MM-DDTHH:mm:ssExtract content from conversation for Layer 1 injection.
Reference: @../analyze-web/references/layer1-formatting.md
Key rules:
Present the formatted Layer 1 content:
Here's the Layer 1 content I'll inject:
---
## Layer 1: Captured Notes
### Overview
[extracted content]
### Key Points
- **Point 1**: [detail]
- **Point 2**: [detail]
---
*Captured from conversation context. Use /distill-resource for deeper analysis.*
---
Does this look right? (yes / edit / add more)
Extract from conversation and format as structured sections:
- [ ] [[Assignee]] - Task (due: YYYY-MM-DD)Present for confirmation:
Here are the meeting sections I'll populate:
**Notes:**
- [point 1]
- [point 2]
**Decisions:**
- [decision 1]
**Action Items:**
- [ ] [[Person]] - Task (due: date)
**Follow-up:**
- [item 1]
Does this look right? (yes / edit)
Show the complete note preview before creating:
## Note Proposal
**Type:** Resource
**Title:** [emoji] [Title]
**Source format:** [format] ([emoji])
**Resource type:** [type]
**Source:** [URL or "conversation context"]
**Area:** [[Area Name]]
**Project:** [[Project Name]] (or "none")
**Author:** [name or "โ"]
**Summary:** [2-3 sentences]
**Layer 1 content:** [word count] words prepared
---
**Ready to create?** (yes / tell me what to change)
## Note Proposal
**Type:** Meeting
**Title:** [Title]
**Meeting type:** [type]
**Date:** [date]
**Attendees:** [names]
**Area:** [[Area Name]]
**Project:** [[Project Name]] (or "none")
**Summary:** [1-2 sentences]
**Sections populated:** Notes, Decisions Made, Action Items, Follow-up
---
**Ready to create?** (yes / tell me what to change)
| Response | Action |
|---|---|
yes / y / looks good | Create immediately (Phase 5) |
| Specific feedback | Adjust and re-present |
cancel / no | Abort gracefully |
Step 1: Create note
para_create({
template: "resource",
title: "[Title without emoji - template adds it]",
dest: "03 Resources",
args: {
summary: "[confirmed summary]",
source: "[URL or 'Conversation context']",
resource_type: "[confirmed type]",
source_format: "[confirmed format]",
areas: "[[Area Name]]",
projects: "[[Project Name]]" or null,
author: "[author]" or null,
distilled: "false"
},
response_format: "json"
})
Step 2: Inject Layer 1 content
para_replace_section({
file: "[created file path from step 1]",
heading: "Layer 1: Captured Notes",
content: "[formatted Layer 1 content from Phase 3]",
response_format: "json"
})
Step 3: Commit
para_commit({
message: "Add resource: [Title]",
response_format: "json"
})
Step 1: Create note with body sections
para_create({
template: "meeting",
title: "[Title]",
dest: "04 Archives/Meetings",
args: {
meeting_date: "[ISO date]",
meeting_type: "[type]",
summary: "[confirmed summary]",
attendees: "[comma-separated names]",
area: "[[Area Name]]",
project: "[[Project Name]]" or null
},
content: {
"Notes": "[formatted notes]",
"Decisions Made": "[formatted decisions]",
"Action Items": "[formatted action items]",
"Follow-up": "[formatted follow-up]"
},
response_format: "json"
})
Step 2: Commit
para_commit({
message: "Add meeting: [Title]",
response_format: "json"
})
Created: [emoji] [Title].md -> [destination folder]
Linked to: [[Area Name]]
[For resources: Layer 1 content injected ([word count] words)]
[For meetings: Sections populated: Notes, Decisions, Action Items, Follow-up]
Committed to vault.
Would you like to:
1. **Create another note** from this conversation
2. **Distill** the resource (extract key insights)
3. **Done** - note is ready
| Error | Recovery |
|---|---|
para_create fails | Show error, preserve all gathered data, offer retry |
para_replace_section fails | Note exists without Layer 1 -- inform user, they can add content manually |
para_commit fails (dirty tree) | Inform user, suggest committing existing changes first |
| No areas exist | Offer to create one first (same pattern as create-project Phase 2.3) |
| User cancels | Graceful exit, no cleanup needed |
User: [earlier in conversation, scraped an article about TypeScript generics]
User: /para-obsidian:create-from-context TypeScript generics guide
AI: Loading vault context...
Based on the article we just read, I suggest creating a **resource** note.
**Title:** "TypeScript Generics - A Practical Guide"
**Source format:** article (๐ฐ)
Does that look right? (yes / adjust)
User: yes
AI: Which area does this belong to?
1. ๐ค AI Practice
2. ๐ผ Career
3. ๐ Note Taking
User: 2
AI: [presents full proposal with Layer 1 content preview]
User: yes
AI: Created: ๐ฐ TypeScript Generics - A Practical Guide.md -> 03 Resources
Linked to: [[๐ผ Career]]
Layer 1 content injected (1,240 words)
Committed to vault.
User: [earlier, discussed sprint retro with notes about what went well/badly]
User: /para-obsidian:create-from-context
AI: What information from this conversation would you like to capture?
1. **Resource** -- knowledge to learn from
2. **Meeting** -- notes from a discussion
User: 2
AI: I suggest:
**Title:** "Sprint 42 Retrospective"
**Meeting type:** retro
Good? (yes / adjust)
User: yes
AI: When did this meeting happen?
User: today at 2pm
AI: [extracts attendees, presents sections for confirmation]
User: yes
AI: [presents full proposal]
User: yes
AI: Created: Sprint 42 Retrospective.md -> 04 Archives/Meetings
Sections populated: Notes, Decisions Made, Action Items, Follow-up
Committed to vault.