From myna
Routes user input to multiple vault destinations (people, projects, journal) in one capture. Handles recognitions, observations, tasks, project updates with provenance markers.
How this skill is triggered — by the user, by Claude, or both
Slash command
/myna:capture capture: [anything] | observation about [person]: [text] | add task: [description] | create recurring task: [description] | update status of [project]capture: [anything] | observation about [person]: [text] | add task: [description] | create recurring task: [description] | update status of [project]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
If vault_path is not in context, read `~/.myna/config.yaml` first. If the file does not exist, tell the user to run `/myna:setup` and stop.
If vault_path is not in context, read ~/.myna/config.yaml first. If the file does not exist, tell the user to run /myna:setup and stop.
Routes user-entered data to the right vault destinations. One capture can produce multiple entries — one per destination. Nothing is silently dropped.
Read at session start:
_system/config/workspace.yaml — user identity, role, and timezone_system/config/projects.yaml — project names, aliases_system/config/people.yaml — person names, aliases, relationship tiersWhen the user says "capture: [text]", decompose the input into its components and route each one:
| Content type | Destination |
|---|---|
| Recognition or praise about a person | People/{person-slug}.md → Recognition section |
| Observation about a person (strength, growth area) | People/{person-slug}.md → Observations section |
| Project update, decision, blocker, risk | Projects/{project-slug}.md → Timeline section |
| Task or action item | Projects/{project-slug}.md or daily note (if no project) |
| Your own contribution | Journal/contributions-{YYYY-MM-DD}.md (Monday date) |
| Personal note unrelated to projects/people | Daily note or user specifies |
| Ambiguous destination | Review queue (ReviewQueue/review-work.md or review-people.md) |
Every relevant destination gets its own entry. If the same capture maps to three destinations, write three entries. Report each one.
Provenance markers on captures:
[User][Inferred]Trigger: "capture: [text]" — catch-all for anything
How:
ReviewQueue/review-people.md, project → ReviewQueue/review-work.md). Once the user responds — either way — remove the queue item and proceed. The queue item persists only if no response arrives.Entry formats by destination:
Project timeline (prepend to ## Timeline — newest-first):
- {content} [User] (capture, {user.name}, {YYYY-MM-DD})
Person Recognition (prepend to ## Recognition — newest-first):
- {what they did} — {context} [User] (capture, {user.name}, {YYYY-MM-DD})
Person Observation (prepend to ## Observations — newest-first):
- **{strength|growth-area|contribution}:** {observation} [User] (capture, {user.name}, {YYYY-MM-DD})
Contributions log (prepend to ## Contributions — Week of {YYYY-MM-DD} in Journal/contributions-{YYYY-MM-DD}.md — Monday date, newest-first):
- **{category}:** {description} [User] (capture, {user.name}, {YYYY-MM-DD})
Worked example:
User: "capture: Sarah did a great job handling the auth incident, and the auth migration is now unblocked"
Decompose:
People/sarah-chen.md Recognition section → [User]Projects/auth-migration.md Timeline → [User]Writes:
People/sarah-chen.md — Recognition (prepend): - Great handling of auth incident — resolved within SLA [User] (capture, {user.name}, 2026-04-05)Projects/auth-migration.md — Timeline (prepend): - Blocker resolved — migration unblocked [User] (capture, {user.name}, 2026-04-05)Output: "Wrote 2 entries: recognition for Sarah, timeline update for auth migration."
Trigger: "observation about Sarah: [text]", "feedback note for Alex: [text]"
How:
People/{person-slug}.md → Observations section.Observation entry (prepend to ## Observations — newest-first):
- **{type}:** {observation} [User] (capture, {user.name}, {YYYY-MM-DD})
Pending Feedback entry (when observation has coaching value; append to ## Pending Feedback):
- {observation} — Coaching note: {framing} [User] (capture, {YYYY-MM-DD})
Trigger: "recognition for Sarah: [text]", "log that Sarah [accomplishment]"
Different from the observation capture above: this is a recognition entry specifically (for compiling into recognition drafts later via /myna:draft).
How:
People/{person-slug}.md → ## Recognition section (newest-first).- {what they did} — {context} [User] (capture, {user.name}, {YYYY-MM-DD})Trigger: "add task: [description]", "create task: [description]", "TODO: [description]"
How:
2026-04-11)explicit or (inferred).[review-status:: pending] to the destination AND add a review queue item to ReviewQueue/review-work.md immediately, then ask the user inline to clarify the inferred fields. If the user resolves it, update the task, remove [review-status:: pending], and remove the queue item. If no response, the queue item persists as the safety net.Task format:
- [ ] {title} 📅 {YYYY-MM-DD} ⏫ [project:: {name}] [type:: {task|reply-needed}] [person:: {name}] [effort:: {estimate}] [review-status:: pending] [User] (capture, {date})
Include only fields that have values.
Type rules:
task — default for all action items, regardless of who owns them; use [person::] to indicate the ownerreply-needed — "need a reply from X"When the user specifies a project AND a person for a task (e.g., "Add task 'review PR' to Project Alpha for Sarah"), create [type:: task] with [person:: [[Sarah Chen]]] as the owner.
Person field rules:
[type:: task] with no explicit owner): always include [person:: [[{user.name}]]] using user.name from workspace.yaml[type:: task] with a named person): [person:: [[{their-name}]]][person:: [[{their-name}]]] using the name as it appears in people.yamlDestination: Project file at Projects/{project-slug}.md — prepend to ## Tasks section (newest-first raw task storage). If no project is specified, ask the user which project before writing.
Worked examples:
User: "add task: review Sarah's design doc by Friday, high priority"
Parse:
2026-04-11 (explicit)If project can't be inferred: Ask: "Which project is this for? Or would you like to create a personal project for standalone tasks like this?"
If user says "auth migration":
- [ ] Review Sarah's design doc 📅 2026-04-11 ⏫ [project:: [[Auth Migration]]] [type:: task] [person:: [[Sam Bennett]]] [User] (capture)
All fields explicit → write directly, no review queue.
User: "Add task 'review PR' to Project Alpha for Sarah"
Parse:
- [ ] Review PR [project:: [[Project Alpha]]] [type:: task] [person:: [[Sarah Chen]]] [User] (capture)
User: "hand the onboarding doc review to Sarah"
Parse:
- [ ] Onboarding doc review [project:: [[{project}]]] [type:: task] [person:: [[Sarah Chen]]] [User] (capture)
Trigger: "create recurring task: [description]", "set up weekly task: [description]"
How:
🔁 every {interval}
🔁 every week🔁 every day🔁 every 2 weeks🔁 every month🔁 every 3 monthsRecurring task format:
- [ ] {title} 🔁 every {interval} [project:: [[{name}]]] [type:: task] [person:: [[{user.name}]]] [User] (capture, {date})
Trigger: "update status of auth migration to paused", "mark platform api as complete"
How:
status: {active|paused|complete}- Status changed to {status} [User] (capture, {user.name}, {YYYY-MM-DD})Trigger: "create project file for [project]", "add project [name]"
How:
Projects/{slug}.md from template. If template exists at _system/templates/project.md, use it. Otherwise create minimal structure:Minimal project file structure (sections in order):
aliases: ["{Project Display Name}"] — enables wiki-link resolution from [[Project Display Name]]#project #{project-tag}## Overview — Description, Status (active), Key People as wiki-links using readable alias form ([[Sarah Chen]])## Timeline — newest-first chronological log; new entries prepended## Tasks — raw task storage; all skills write here; new tasks prepended (newest-first)## Open Tasks — Dataview live-view block; skills do NOT write here## Links## NotesTrigger: "create person file for [name]", "add [name] to people"
How:
People/{slug}.md:---
created: {YYYY-MM-DD}
aliases: ["{full name}"]
---
#person #{relationship-tier}
## Overview
**Name:** {full name}
**Role:** {role or unknown}
**Team:** {team or unknown}
**Relationship:** {tier}
## Communication Preferences
## Observations
## Pending Feedback
## Recognition
## Personal Notes
## Meeting History
- [[{Full Name} 1:1]] — 1:1 meetings
Entity not found (person): Ask inline: "I don't recognize '[name]' — want to add them to people.yaml and create a person file? (yes / no, just write a plain note)". At the same time, add a review queue item to ReviewQueue/review-people.md: - [ ] Unknown person '[name]' mentioned in capture — create person file or update people.yaml (capture, {date}). Once the user responds — either way — remove the queue item and proceed accordingly (create person file, or write entry to daily note as plain note). The queue item persists only if no inline response arrives (batch run, no interaction).
Entity not found (project): Ask inline: "I don't recognize '[name]' — is this a new project? (yes to create, no to just write a note)". At the same time, add a review queue item to ReviewQueue/review-work.md: - [ ] Unknown project '[name]' mentioned in capture — create project file or update projects.yaml (capture, {date}). Once the user responds — either way — remove the queue item and proceed accordingly (create project file, or write entry to daily note as plain note). The queue item persists only if no inline response arrives.
Multiple matches (person): Ask inline: "I found multiple matches for '[name]': [list candidates]. Which one?" At the same time, add a review queue item to ReviewQueue/review-people.md: - [ ] Ambiguous person '[name]' in capture — candidates: [list] (capture, {date}). Once the user picks, resolve the entity, write the entry to the correct destination, and remove the queue item. The queue item persists only if no inline response arrives (batch run, no interaction).
Deduplication: Before writing, check the target section for near-duplicate entries (same action + same entity from the same source). Skip duplicates: "This looks like it may already be logged in auth-migration.md — skipping to avoid duplicate."
Missing target file: If a project or person file doesn't exist, create it (minimal structure) before writing the entry. Mention: "Created new file for {entity}."
No identifiable entity: If capture text has no recognizable person, project, or task ("the meeting went well"), ask: "Where should I log this? (project name, person name, or personal notes)"
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub bathlasiddharth/myna --plugin myna