# Process Meeting

> >

- **Type:** Skill
- **Install:** `agentstack add skill-timominkus-obsidian-para-gtd-ai-process-meeting`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [timominkus](https://agentstack.voostack.com/s/timominkus)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [timominkus](https://github.com/timominkus)
- **Source:** https://github.com/timominkus/obsidian-para-gtd-ai/tree/main/.claude/skills/process-meeting

## Install

```sh
agentstack add skill-timominkus-obsidian-para-gtd-ai-process-meeting
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Process Meeting Skill

Processes a meeting and supplements an existing meeting note in the vault (or creates one).
Identifies the meeting, loads available inputs (brain dump, prepared note, transcript),
enriches the note with structured content, updates hub files, syncs the daily note,
and cleans up source files.

---

## Step 0 — Identify the meeting

Before anything else, determine **which meeting** is to be processed. Search in this order:

1. **Daily note brain dump** — Read today's daily note (`01_ACTIVE/Daily Notes/YYYY-MM-DD.md`).
   Look for a meeting name mentioned in notes or any explicit reference to a meeting today.

2. **INBOX note** — Glob `00_INBOX/**/*.md` and scan for a note that looks like a
   meeting capture (title contains a date or person's name, or contains an agenda list).

3. **Existing meeting note** — Glob `03_AREAS/**/*.md` for a file dated today or recently
   that looks like a prepared meeting note (has an Agenda or Attendees field).

If multiple candidates are found, list them briefly and ask the user which one to process.
If none are found, ask the user for the meeting name / date before continuing.

Once identified, note:
- Meeting type (1:1, team meeting, external, etc.)
- Participants
- Date
- File path (this is the file that will be **supplemented**, not replaced)

**Check for meeting-specific instructions:**
After identifying the target folder, check whether a `CLAUDE.md` exists in that folder.
If found, read it and follow its instructions throughout the workflow.

---

## Step 1 — Find and read the transcript

After identifying the meeting, look for a transcript in this order:

1. **Mentioned in the prompt** — the user explicitly named a file path. Use it directly.

2. **Uploaded in this chat** — check for any recently added `.docx`, `.txt`, or `.vtt` file.

3. **Downloads folder** — search the user's Downloads folder for a `.docx`, `.txt`, or `.vtt`
   file whose name matches the meeting (by participant name, date, or topic keywords).
   Ask the user to confirm the correct file if multiple match.

4. **No transcript available** — proceed in memory-only mode (Step 2B).

Read the transcript:
- For `.txt` / `.vtt`: Read tool directly. For `.vtt`: strip header and timing lines; merge consecutive lines from the same speaker.
- For `.docx`: Extract with python-docx:
  ```bash
  python3 -c "
  import docx, sys
  doc = docx.Document(sys.argv[1])
  print('\n'.join(p.text for p in doc.paragraphs))
  " /path/to/file.docx
  ```

---

## Step 2A — Extract content (with transcript)

**Agenda structure:**
- If the meeting note already has an Agenda, use it as the skeleton. Map transcript content onto topics.
- If no agenda exists, derive topics from the transcript based on natural topic shifts.
- Mark any agenda item not covered as `*(not discussed)*`.

**Decisions** — ONLY include this section if an explicit decision was made (someone said "we decided", "we agreed to", etc.). Implicit conclusions do not count.

**Tasks** — STRICT RULE: only capture tasks where a specific person verbally commits in the transcript.

| Category | When to use |
|---|---|
| **My Tasks — Today** 🔴 | You commit to something due today or urgent |
| **My Tasks — This Week** 📅 | You commit to something for this week |
| **My Tasks — Next Week** 📅 | You commit to something for next week |
| **Waiting For** ⌛ | Someone else commits to delivering something you need |
| **Delegated** 👥 | You explicitly ask someone to own a task and they accept |
| **Agenda Items** 📌 | You say you need to raise a topic in a different meeting |

**What does NOT count:**
- Logical next steps not spoken aloud
- Topics discussed without a named owner
- Exploratory ideas or suggestions without acceptance
- Anything you have to infer rather than hear

**Notes** — detailed, factual summary per agenda item as nested bullet points.
- Write what was said/concluded, not who said it.
- Attribution in parentheses is acceptable when it adds meaningful context. Keep it rare.

---

## Step 2B — Extract content (from memory only)

Use the brain dump, INBOX note, and any content already in the prepared meeting note.
Same extraction logic as 2A — decisions only if explicit, tasks only if committed.

---

## Step 3 — Preview in chat — REQUIRED before writing anything

Present a structured preview:

```
## Preview: [Meeting Name] — YYYY-MM-DD

### Agenda
- Topic A
  - Sub-topic A1
- Topic B *(not discussed)*

### Decisions
*(none)* — or list them

### Tasks
**My Tasks — Today**
- [ ] ...

**My Tasks — This Week**
- [ ] ...

**Waiting For**
- [ ] ⌛ Name | ...

**Delegated**
- [ ] 👥 Name | ...

**Agenda Items**
- [ ] 📌 @Name | ...
```

Then say: "Does this look right? I'll then update the meeting note, hub files, and daily note."

Wait for confirmation. Apply all corrections before proceeding.

---

## Step 4 — Supplement or create the meeting note

**If a prepared meeting note was found in Step 0:** supplement it in place.
**If no prepared meeting note was found:** create a new file using the structure below.

Fill in or replace these sections:

### 4a · Notes section

Write detailed notes per agenda item as nested bullet points.
Structure: top-level agenda items → `### Heading`, sub-items → `#### Heading`.

### 4b · Tasks section

```markdown
## Tasks

### 🔴 My Tasks — Today

- [ ] 🔴 | Topic | Description | [[meeting-link]] | YYYY-MM-DD

### 📅 My Tasks — This Week

- [ ] 📅 | Topic | Description | [[meeting-link]] | YYYY-MM-DD

### 📅 My Tasks — Next Week

- [ ] 📅 | Topic | Description | [[meeting-link]] | YYYY-MM-DD

### ⏳ Waiting For

- [ ] ⌛ Name | Topic | Description | [[meeting-link]] | Due date

### 👥 Delegated

- [ ] 👥 Name | Topic | Description | [[meeting-link]] | Due date

### 📌 Agenda Items

- [ ] 📌 @Name | Topic | Source | [[meeting-link]]
```

Omit any sub-section that has no items. If no tasks at all: `*No tasks.*`

### 4c · Decisions section

Add only if decisions were explicitly made. Insert before Tasks.

---

## Step 5 — Update hub files

After supplementing the meeting note, update relevant hub files in `03_AREAS/People/`.

**What to update:**

1. **📌 Next Meeting queue** — Add topics to raise in the *next* session with this person.
   Format: `- [ ] 📌 Topic | Context | [[current-meeting-link]]`

2. **Tasks (👥 / ⌛)** — Add any delegated or waiting-for items for this person.

3. **Session link** — Add a link to the processed meeting note in the session log section.

Only update sections that are relevant. Do not restructure the hub file.

---

## Step 6 — Update the daily note

Find today's daily note in `01_ACTIVE/Daily Notes/YYYY-MM-DD.md`.
Read the Daily Note template first (`04_RESOURCES/Templates/Daily Note.md`) to match section names.

Updates:
1. Under `## Notes`: add `- Meeting processed: [[YYYY-MM-DD_Meeting-Name]]`
2. Add 2–4 bullet points with the most important takeaways
3. Your own tasks → under `### 🔴 Heute` or `### 📅 Diese Woche`
4. Waiting For → under `### ⏳ Waiting For`
5. Delegated → under `### 👥 Delegiert` (or Hub file if long-running)
6. Agenda Items → under `### 📌 Agenda Items`

Use the **Section Anchoring Rule**: anchor edits at the target section's own header plus the last existing item — never at the next section's header.

---

## Step 7 — Cleanup

After all content has been transferred and confirmed:

1. **Archive the transcript** — move it to `06_ARCHIVE/YYYY/MM_Month/Transcripts/` with a standardized name. Never delete it.

   **Archive filename format:** `YYYY-MM-DD_[Meeting-Title]_[Participants].[ext]`
   - Use the meeting date
   - Short, descriptive meeting title (2–4 words, kebab-case)
   - Participants as dash-separated list (first names only)

2. **Archive the INBOX note** — if a capture note was found in `00_INBOX/`, move it to `06_ARCHIVE/YYYY/MM_Month/Notes/`. Never delete it.

Confirm to the user: "Cleaned up: transcript archived, inbox note archived."

---

## Meeting note structure reference

When creating a meeting note from scratch:

```markdown
---
tags: [meeting-notes, YYYY-MM-DD]
up: "[[03_AREAS/Organization/Meeting-Type]]"
---

# YYYY-MM-DD — Meeting Name

**Date:** YYYY-MM-DD
**Attendees:** Name, Name, ...

---

## Agenda

- [[#Topic A|Topic A]]
- [[#Topic B|Topic B]]

---

## Decisions

*(omit if none)*

---

## Tasks

*(see Step 4b for structure)*

---

## Notes

### Topic A

- Bullet point

### Topic B

*Not discussed.*
```

**File location routing:**

| Meeting type | Folder |
|---|---|
| 1:1 with direct report | `03_AREAS/People/Team/[Name]/` |
| 1:1 with peer / colleague | `03_AREAS/People/Peers/[Name]/` |
| 1:1 with leadership | `03_AREAS/People/Leadership/[Name]/` |
| Recurring team meeting | `03_AREAS/Organization/[MeetingType]/` |
| General / external | `03_AREAS/Organization/` |

---

## Quality checks before finishing

- No invented tasks
- Decisions section only present if explicitly flagged in source material
- All internal references use `[[WikiLinks]]` — never backtick-wrapped
- File name uses ISO date prefix: `YYYY-MM-DD_`
- Notes written factually — no "X said that..." phrasing
- Hub file updated with next-meeting topics and delegated tasks
- Daily note updated with meeting link, key points, and your own tasks
- Transcript archived with standardized name
- Inbox note archived after content is transferred

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [timominkus](https://github.com/timominkus)
- **Source:** [timominkus/obsidian-para-gtd-ai](https://github.com/timominkus/obsidian-para-gtd-ai)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-timominkus-obsidian-para-gtd-ai-process-meeting
- Seller: https://agentstack.voostack.com/s/timominkus
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
