Learn-skills.dev note-taker
Creates and manages structured notes from templates. Use when the user wants to take, add, or write meeting notes, interview notes, 1:1 notes, or any template-based notes.
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/acron0/skills/note-taker" ~/.claude/skills/neversight-learn-skills-dev-note-taker && rm -rf "$T"
data/skills-md/acron0/skills/note-taker/SKILL.md<quick_start>
- Determine note type from user request (or ask)
- Load config from
(or run first-time setup)~/.claude/preferences.json - Copy matching template to target directory as
YYYY-MM-DD-topic-slug.md - Fill in template fields (date, topic, attendees, etc.)
- Enter note-taking mode: each user message is appended to the file </quick_start>
Infer the note type from the user's request (e.g., "take meeting notes" → meeting, "interview notes for Jane" → interview).
If the type is not obvious, ask using AskUserQuestion with available template types as options. If templates haven't been discovered yet, offer common defaults: Meeting, Interview, 1:1. </step>
<step name="load-config"> **Load configuration from preferences.json**Read
~/.claude/preferences.json using the Read tool. Look for these keys:
{ "notesDir": "~/notes", "notesTemplates": "~/notes/Work/Templates", "notesMeetingDir": "~/notes/Work/Meetings", "notesInterviewDir": "~/notes/Work/Interviews", "notes1on1Dir": "~/notes/Work/1on1s" }
If
is missing: Ask the user for their base notes directory.notesDir
If
is missing: Search for common template locations within notesTemplates
notesDir:
{notesDir}/Templates{notesDir}/templates{notesDir}/Work/Templates
If found, use it. Otherwise ask the user.
If the per-type output dir is missing (e.g.,
notesMeetingDir): Explore the directory tree under notesDir for folders whose names match the note type (e.g., Meetings, meetings, 1on1s). If a likely match exists, use it. If ambiguous or not found, ask the user.
Save all discovered/provided values back to preferences.json:
python3 -c " import json, os path = os.path.expanduser('~/.claude/preferences.json') try: with open(path) as f: data = json.load(f) except (FileNotFoundError, json.JSONDecodeError): data = {} data['KEY'] = 'VALUE' with open(path, 'w') as f: json.dump(data, f, indent=2) "
Ensure all directories exist with
mkdir -p.
</step>
<step name="discover-templates">
**Discover available templates**
List
.md files in the templates directory. Each filename (without .md) is a valid note type. Map each to its output directory using the preference key convention: notes{PascalCase}Dir.
If the requested note type has no matching template, show available types and let the user choose. </step>
<step name="create-note"> **Create the note file**- If topic/title not already provided, ask the user (e.g., "Q1 Planning", "Jane Doe - Senior Engineer")
- Generate filename:
YYYY-MM-DD-topic-in-kebab-case.md - Copy the template to the target directory with the generated filename
- Fill in any template placeholders with known values:
- Date fields → today's date
- Title/Topic → provided topic
- Attendees, role, candidate → from context if available
- Read the created file back to confirm structure </step>
Tell the user note-taking mode is active and that each message will be added to the note. Then:
- Each user message is content to append to the active note file
- Use the Edit tool to append content
- Format context-aware based on the template structure:
- If the template has bullet-point sections → append as bullet points under the appropriate section
- If there are distinct sections (Discussion, Action Items, Decisions) → route content to the matching section based on keywords
- If the user prefixes with a section name → place in that section
- Default: append to the main notes/content section
- If the user says "done", "finish", "close", or "end notes" → exit note-taking mode, confirm the final file path
Be quiet during note-taking. Just append and confirm briefly (e.g., "Added." or "Added to Action Items."). Do not narrate what you are doing. </step>
</process><configuration_reference> All keys in
~/.claude/preferences.json:
| Key | Description | Example |
|---|---|---|
| Base notes directory | |
| Templates directory | |
| Output dir per note type | |
The
{Type} is PascalCase derived from the template filename:
→meeting.mdnotesMeetingDir
→interview.mdnotesInterviewDir
→1on1.mdnotes1on1Dir
→standup.md
</configuration_reference>notesStandupDir
Claude: Reads ~/.claude/preferences.json - no notes config found Claude (AskUserQuestion): Where do you keep your notes? Options: ~/notes, ~/Documents/Notes, Other User: ~/notes
Claude: Finds ~/notes/Templates with meeting.md, interview.md, 1on1.md Saves notesDir and notesTemplates to preferences.json Claude (AskUserQuestion): Where should meeting notes be saved? Options: ~/notes/Meetings, ~/notes/Work/Meetings, Other User: ~/notes/Work/Meetings
Claude: Saves notesMeetingDir, creates directory if needed Claude: What's the topic or title for this meeting? User: Q1 Planning
Claude: Copies meeting.md template to ~/notes/Work/Meetings/2026-02-12-q1-planning.md Fills in date and title Note created:
2026-02-12-q1-planning.md
Note-taking mode active. Each message will be added to the note. Say "done" when finished.
User: Discussed roadmap priorities for Q1 Claude: Added.
User: Action item: Sarah to draft the proposal by Friday Claude: Added to Action Items.
User: done Claude: Notes saved to ~/notes/Work/Meetings/2026-02-12-q1-planning.md </interaction> </example>
<example number="2"> <scenario>Returning user - interview notes (all config already saved)</scenario> <interaction> **User:** Interview notes for Jane Doe, Senior EngineerClaude: Reads preferences.json - all config present Copies interview.md template to ~/notes/Work/Interviews/2026-02-12-jane-doe-senior-engineer.md Fills in date, candidate name, role Note created:
2026-02-12-jane-doe-senior-engineer.md
Note-taking mode active.
User: Strong system design skills, explained distributed caching clearly Claude: Added.
User: Struggled with concurrency question on mutex vs semaphore Claude: Added.
User: Decision: move to next round Claude: Added to Decision.
User: done Claude: Notes saved to ~/notes/Work/Interviews/2026-02-12-jane-doe-senior-engineer.md </interaction> </example>
<example number="3"> <scenario>New template type auto-discovered</scenario> <interaction> **User:** Take standup notesClaude: Scans templates dir, finds standup.md - new type No notesStandupDir in preferences Claude (AskUserQuestion): Where should standup notes be saved? Options: ~/notes/Work/Standups, ~/notes/Standups, Other User: ~/notes/Work/Standups
Claude: Saves notesStandupDir, creates dir, copies template Note created:
2026-02-12-standup.md
Note-taking mode active.
</interaction>
</example>
</examples>
<success_criteria>
- Note type correctly identified from request or asked when ambiguous
- All config loaded from preferences.json without redundant questions on repeat use
- Template correctly copied and populated with known field values
- File named as
in the correct directoryYYYY-MM-DD-topic-slug.md - Note-taking mode: messages appended context-aware to appropriate sections
- Clean exit on "done" / "finish" / "close" / "end notes" </success_criteria>