Agent skill

Process Meetings

by davekilleen in davekilleen/Dex

Turn synced meetings into updated person pages, extracted tasks and organized notes.

MITAuto-check: notesSales & Support

Install Process Meetings

skills CLI
$ npx skills add davekilleen/Dex --skill process-meetings -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install davekilleen/Dex process-meetings --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/davekilleen/Dex.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/process-meetings .claude/skills/process-meetings && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
process-meetings
GitHub stars
493
Token cost
~6.1k tokens
SKILL.md length
2,843 words
Files
2
Skills in repo
61
Repo updated
First seen
Licence
MIT

At a glance

Turn synced meetings into updated person pages, extracted tasks and organized notes.

  • Works in 9 steps: Check Source and Sync Status → Find Waiting Meetings → 5: Consume Queued Meetings (manual mode) → …
  • The user says process my meetings
  • SKILL.md covers Execution mode, Background Execution, How It Works and Arguments, plus 5 more sections
  • Calls node; needs GRANOLA_API_KEY and GEMINI_API_KEY

What it does

Process Meetings is an agent skill from davekilleen/Dex. Turn synced meetings into updated person pages, extracted tasks and organized notes. Use when the user says 'process my meetings', 'catch up my notes', or after Granola/Otter syncs. Also use proactively when unprocessed meetings exist. Not for prepping an upcoming meeting; use meeting-prep.

Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `AGENT_INSTRUCTIONS.md`).

It sits in Sales & Support, covering Sales call preparation. The repository describes itself as: Your AI Chief of Staff — a personal operating system starter kit that adapts to your role. No coding required. The licence is MIT.

When your agent uses it

  • The user says process my meetings
  • Catch up my notes
  • After Granola/Otter syncs

Example prompts

  • “process my meetings”
  • “catch up my notes”
  • “/process-meetings”

Requirements

  • A credential in GRANOLA_API_KEY
  • A credential in GEMINI_API_KEY

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Check Source and Sync Status
  2. Find Waiting Meetings
  3. 5: Consume Queued Meetings (manual mode)
  4. Update Person Pages
  5. 5: Semantic Enrichment (if QMD available)
  6. Extract Tasks (unless --no-todos or --people-only)
  7. Auto-link People in Processed Notes
  8. Verify Entity Coverage
  9. Summary Report

What it can do on your machine

Read from SKILL.md and the folder at commit 227f78e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • GRANOLA_API_KEY
    • GEMINI_API_KEY
    • ANTHROPIC_API_KEY
    • OPENAI_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Process Meetings loads about 6.1k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 2,843 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~6.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:176
    > - An LLM API key in the vault-root `.env` (GEMINI_API_KEY, ANTHROPIC_API_KEY, or OPENAI_API_KEY) — keep that file owne

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from davekilleen/Dex at commit 227f78e, republished under its MIT licence (© davekilleen). 2,843 words, ~6,093 tokens.

Download SKILL.mdSave it as .claude/skills/process-meetings/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
process-meetings
description
Turn synced meetings into updated person pages, extracted tasks and organized notes. Use when the user says 'process my meetings', 'catch up my notes', or after Granola/Otter syncs. Also use proactively when unprocessed meetings exist. Not for prepping an upcoming meeting; use `meeting-prep`.
model_hint
balanced
<!-- Generated from `.claude/skills/process-meetings/SKILL.md` by `scripts/generate-agents-skills.py`. Do not edit. -->

Execution mode

Run inline in the current conversation by default, so this work can see what the user has already discussed, decided, or settled this session. Do not fork merely because this skill was selected. Only run in the background when the user explicitly asks for a background run or the host has already obtained a specific background-work approval for this run.

Delegated gathering (large-vault scaling)

This skill stays inline as described above: it keeps session awareness, it asks the user the questions, and it owns every interactive step. What it does NOT do inline is the bulk read-gathering, which on a mature vault (hundreds of notes, thousands of indexed messages, a live calendar and multiple integrations) can be large enough to exhaust the main conversation before the useful work starts.

So the gathering-and-processing phase is delegated to one general-purpose subagent via the Agent tool, using the self-contained prompt in this skill's AGENT_INSTRUCTIONS.md:

  1. Read .agents/skills/process-meetings/AGENT_INSTRUCTIONS.md.
  2. Substitute its placeholders ({{ARGS}}, the arguments passed to this skill).
  3. Call the Agent tool with subagent_type: "general-purpose", model: "sonnet", that prompt, and a short description. The brief is mechanical processing with its own verification steps, so it runs on the fast tier; anything that needs a judgement call comes back to this conversation.
  4. Display its summary report.

The subagent inherits MCP connections, runs in its own context, and that context is freed when it completes, so only its findings reach this conversation.

Use AGENT_INSTRUCTIONS.md verbatim. Read the file and pass its content as the subagent prompt, substituting only the placeholders. Do NOT hand-write a replacement brief from what you already know about the meetings: that is how steps get silently dropped, and the omission looks complete because nothing errors. If context from this conversation is worth adding, APPEND it to the file's content; never substitute for it.

Two caveats that are load-bearing:

  • Do not count on this skill's hook for the subagent's writes. The PostToolUse hook post-meeting-person-update.cjs is declared in this SKILL.md's frontmatter, so it belongs to this skill's run and must not be assumed to cover a subagent's writes. AGENT_INSTRUCTIONS.md therefore has the subagent update person pages itself. Do not remove that instruction believing the hook covers it. It is also safe if the hook does run for those writes: both write the same "Recent Interactions" line format, and both skip a person page that already references the meeting, so the entry cannot be added twice.
  • Always fall back. If the subagent fails, times out, or returns nothing usable, say so plainly and run the processing inline from the same AGENT_INSTRUCTIONS.md. A missing subagent must never mean a missing result.

Stays inline: the background-sync status check when it needs setup guidance (--setup), the Granola pre-flight message when no API key is connected, confirming each detected soft commitment before any task is created, resolving ambiguous person matches and entity suggestions, and presenting the final summary report.

Check the report for unstamped meetings. The subagent leaves a meeting without its tasks-extracted marker whenever a task failed to create or stamp, and reports the exact failing line. Surface those lines rather than burying them: an unstamped meeting is the safe state, but it stays flagged as waiting until someone resolves it.

The report is a claim, not evidence — check it before repeating it. This subagent writes to the vault, and its summary states counts the user will act on. Its report ends with a Touched block naming every task ID it created, every note it stamped, and every page it created. Verify exactly those items, and nothing wider:

  • Each listed task ID: confirm it appears in 03-Tasks/Tasks.md with one targeted search per ID (grep, or list_tasks filtered to that ID). Do not read the whole task file.
  • Each listed stamped note: confirm the tasks-extracted marker is actually in that one file.
  • Each listed created page: confirm the file exists.

Do not re-read every meeting note or the full task list to look for claims the report did not make; the full sweep was what made this step slow, and it never found anything the Touched block did not name. If the report has no Touched block, treat every count in it as unverified and say so.

If a claim does not hold, say so plainly in the summary you present and treat that meeting as unprocessed. Never pass an unverified count to the user as fact, and never repeat "processing complete" on the strength of the report alone.

Process Meetings

Process meetings that have been synced from Granola by the background automation. Updates person pages, extracts tasks, and organizes meeting notes.

Background Execution

This skill supports background execution. When invoked:

  1. Acknowledge: "Processing [N] meetings in the background. I'll let you know when done."
  2. Process all meetings
  3. On completion, provide summary: "[N] meetings processed. [X] person pages updated. [Y] action items created."

How It Works

Meetings are synced automatically every 30 minutes by a background process. This command reads those synced files and:

  • Creates/updates person and company pages
  • Extracts action items to 03-Tasks/Tasks.md
  • Links everything together

No terminal commands are shown - the heavy lifting happens in the background.

Arguments

  • No arguments: Process all unprocessed meetings from the last 7 days
  • today: Only process today's meetings
  • "search term": Find meetings by title/attendee
  • --people-only: Only update person/company pages (skip tasks)
  • --no-todos: Create notes but don't extract tasks
  • --setup: Install/check background automation

Pre-flight: Local Source Check

Read meeting_sources in System/user-profile.yaml before assuming a recorder. The configured primary is provenance, not permission or tool access. A valid vault-relative notes_folder outranks the default landing zone. Missing or malformed config, an invalid primary, an absolute path, .., the vault root, or a symlink escape must be reported and ignored; continue with safe local notes. Never widen into an external service just because the profile names it.

For primary: granola, Granola sync uses the official public API. If GRANOLA_API_KEY is absent, offer /granola-setup and continue with local notes. Other primaries do not inherit a direct reader from this setting.


Process

Step 1: Check Source and Sync Status

Resolve meeting_sources.notes_folder using the rules above: only a valid vault-relative folder is accepted; missing or malformed config, an absolute path, .., the vault root, or a symlink escape falls back safely. The configured primary does not grant access to an external service. Then check whether Granola background sync has left its optional state file:

bash
# Check for state file (indicates sync has run). The runtime copy survives
# an update; older installs may still have the shipped-folder copy.
ls System/.dex/processed-meetings.json \
  || ls .scripts/meeting-intel/processed-meetings.json

If the state file exists: Granola background sync has run. Continue to Step 2.

If it does not exist and Granola is the configured source: offer setup, but continue with local notes. The missing file is not a gate for an exported-folder, Zoom, Teams, manual note, or provider-neutral local source.

For Granola setup guidance:

"Background meeting sync isn't set up yet. This runs automatically every 30 minutes so /process-meetings doesn't need terminal commands.

To set up (one-time, takes 30 seconds):

bash
cd .scripts/meeting-intel && ./install-automation.sh

Or run /process-meetings --setup and I'll do it for you.

Requirements:

  • A Granola Business plan, with your Granola API key connected via /granola-setup
  • An LLM API key in the vault-root .env (GEMINI_API_KEY, ANTHROPIC_API_KEY, or OPENAI_API_KEY) — keep that file owner-only (chmod 600 .env)"

If user runs --setup:

bash
cd .scripts/meeting-intel && ./install-automation.sh
Step 2: Find Waiting Meetings

Read the processed meetings state when it exists:

javascript
const state = JSON.parse(fs.readFileSync('System/.dex/processed-meetings.json'));

Search the valid configured folder first, then 00-Inbox/Meetings/. If neither contains a candidate, use bounded provider-neutral Markdown discovery in the vault by date plus title, attendee, or meeting frontmatter. Exclude Dex internals, dependencies, binaries, and archives outside the requested window; never treat arbitrary Markdown as a meeting. For the default folder:

bash
find 00-Inbox/Meetings -name "*.md" -mtime -7 | head -50

This includes synced notes in day directories and flat *.md notes in the folder root. A manual note with no capture id is valid; process and stamp it with the same tasks-extracted marker as any other meeting note. The queue/ subfolder is handled in Step 2.5.

For each meeting file, skip notes containing <!-- dex:skip-processing -->:

  1. Preserve the actual vault-relative source path. Read participants, company, date, and any non-empty scalar key ending in _id. Prefer the key matching a string source; if that key is absent, report the mismatch and use the note path. When source is absent, use an id only when exactly one non-empty scalar candidate is present. granola_id and wispr_id are examples, not a closed list. Empty or non-scalar values do not count; multiple ids fall back to note-path identity. The path identity is the normalized vault-relative Markdown path, with / separators and the .md extension retained; never reduce it to a basename
  2. Check if person/company pages need updating
  3. Check if tasks need extracting (look for unchecked items in "For Me" section)

Report findings:

"Found X waiting meetings from the last 7 days. Y need person page updates, Z have unextracted tasks."

Match capture identity to Calendar

For a synced note with an aware ISO capture_started_at, call calendar_get_events_with_attendees for that date after applying CLAUDE.md's Calendar response confidence contract, then call the Work MCP match_capture_to_calendar tool with the capture title, start time, attendees, and the Calendar response's events array as calendar_events (not the whole response object). Use a matched result's identity only (title, normalized start, attendees); if the safe title differs, carry it into the note. Leave an unmatched or ambiguous capture unchanged, and continue unchanged when Calendar is unavailable. The matcher owns the hard five-minute limit, timezone parsing, tie order, poor-title rule, and ambiguity decision—never redo or stretch them. Never copy join URLs, dial-ins, access codes, location, notes, descriptions, conferencing fields, or any other invite payload.

Step 2.5: Consume Queued Meetings (manual mode)

If 00-Inbox/Meetings/queue/*.json files exist, consume each queued meeting before continuing:

  1. Read the complete JSON: id, title, createdAt, participants, attendees, company, notes, and transcript.
  2. Check whether a meeting note with that JSON object's id as its granola_id already exists. If it does, delete the queue JSON and continue to the next one.
  3. Otherwise, create the meeting note under 00-Inbox/Meetings/{date}/ (with {date} and time derived from createdAt) in the standard format, including frontmatter for date, time, type: meeting-note, source: granola, title, participants, attendees, company, and granola_id from the JSON id. Include the queued notes and transcript in the note body.
  4. Delete the queue JSON only after its note has been written successfully.

The new note then flows through the normal processing steps. Never delete a queue file before its meeting note is written.

Show full SKILL.md (1,206 more words)Show less
Step 3: Update Person Pages

For each participant in synced meetings:

  1. Load user profile for email domain:

    Read System/user-profile.yaml → get email_domain
  2. Classify as Internal/External:

    • If participant email domain matches user's domain → Internal
    • Otherwise → External
  3. Look up the person with the Work MCP lookup_person tool.

    • If lookup returns ambiguous: true, do not create a page. Surface the possible matches to the user.
    • If a match exists, update that existing page.
  4. If no match exists, call the Work MCP create_person tool:

    • Pass name, role when known, emails from the meeting's attendees block, and location from that attendee's location field.
    • Pass the meeting company and a short source note when available.
<!-- What the create_person tool creates (reference only; do not hand-write this template). -->
markdown
---
type: person
name: "{Name}"
role: null
company: "{company from meeting}"
company_page: null
emails: ["{lowercased email, if available}"]
aliases: []
location: {internal|external}
last_interaction: {meeting date}
i_owe_date: null
waiting_on_date: null
---
# {Name}

## Notes

*Auto-created from meeting on {date}*

## Recent Interactions

<!-- dex:auto:recent-interactions -->
- [{Meeting Title}](00-Inbox/Meetings/{date}/{slug}.md) — {date}
<!-- /dex:auto -->

## Key Context
 ```

5. **If page exists, add meeting to Recent Interactions:**
- Read existing page
- Add new meeting link under "## Recent Interactions"
- Keep max 20 entries (remove oldest if needed)
- Update "Last Interaction" in frontmatter
- If the meeting created a dated follow-up the user owes, set `i_owe_date`. If it is a date they are waiting on someone else, set `waiting_on_date`. Never write `next_action_date`, and never treat a waiting date as overdue.

### Step 4: Update Company Pages

For each unique external company domain:

1. **Check if company page exists:** `05-Areas/Companies/{Company}.md`

2. **If doesn't exist, create it:**
```markdown
---
type: company
name: "{Company Name}"
domains: ["{lowercased domain}"]
website: "{website, if known}"
status: "Prospect"
---
# {Company Name}

## Key Contacts

<!-- dex:auto:key-contacts -->
- [[05-Areas/People/External/{Person}|{Person}]]
<!-- /dex:auto -->

## Meeting History

<!-- dex:auto:meeting-history -->
- [{Meeting Title}](00-Inbox/Meetings/{date}/{slug}.md) — {date}
<!-- /dex:auto -->

## Notes

*Auto-created from meeting on {date}*
  1. If exists, update:
    • Add any new contacts to "Key Contacts"
    • Add meeting to "Meeting History"
Step 4.5: Semantic Enrichment (if QMD available)

Check if semantic search is available by looking for qmd in PATH.

If available, enhance meeting processing with meaning-based intelligence:

  1. Detect implicit commitments: For each meeting's discussion notes, search semantically:

    qmd query "we should circle back on..." --limit 3
    qmd query "let me think about..." --limit 3

    Catch soft commitments that regex action-item extraction misses.

    • Examples: "we should probably revisit the pricing model" → implicit action item
    • "I need to noodle on the migration approach" → implicit commitment
    • "Let's reconnect after the board meeting" → implicit follow-up
  2. Link meetings to projects: For the meeting topic, search:

    qmd query "meeting topic/title" --limit 3

    against 04-Projects/ to auto-link the meeting to relevant projects that keyword matching would miss.

  3. Enrich person context: For each new person encountered, search:

    qmd query "person name + company" --limit 3

    Find if they've been mentioned in other meetings/notes, even if they weren't a direct participant.

Deterministic soft-commitment pass (always runs): Independently of QMD availability, run the detect_soft_commitments Work-MCP tool over each meeting's discussion notes. Add matches to the action-items list marked "(soft commitment — confirm before creating)" so Step 5 confirms, creates, and reads back every task ID. QMD is the semantic complement; NEVER auto-create. The detector matches English and French phrasing only. If the tool returns unsupported_locale: true, say that once — do not invent matches for other languages.

Integration:

  • Add implicit commitments to the action items list with a note: "(detected — not explicitly stated)"
  • Add project links to meeting frontmatter
  • Merge person context into newly-created person pages
  • If QMD unavailable, skip silently — regex extraction still works
Step 5: Extract Tasks (unless --no-todos or --people-only)

For each meeting with unextracted tasks:

  1. Find action items in the "## Action Items > ### For Me" section

  2. For each unchecked item (- [ ]):

    • Extract task description
    • Read pillar from meeting frontmatter, then resolve it to the unique pillar ID in System/pillars.yaml by matching either id or display name
    • Preserve the exact source checkbox line text for stamp_source_line
    • Let create_task generate the task ID and stamp it back onto that line
  3. Decide whether the item is a task at all. A tracked task is a promise the user has to keep, not a note that something came up. Create a task only when the item passes at least one of these tests:

    • It has a when: a date, day or timeframe ("by Friday", "before the QBR", "next week")
    • It has a who: something the user owes a named person or team ("send Sarah the deck", "answer Acme's security questions")
    • It is urgent or blocking: flagged urgent, or another decision or meeting waits on it

    Items that pass none of these ("think about pricing", "look into the new vendor", "consider a follow-up") stay in the meeting note exactly as they are: no task, no rewording, checkbox kept. List them in the summary under "Left in the note" so the user can promote one with a word. The tasks-extracted marker still goes on the note once the tracked items are verified; the note itself remains the record of everything else.

  4. Create task using Work MCP:

    create_task(
      title: "Task description",
      priority: "P2",  // default, P1 if "urgent" mentioned
      pillar: "{resolved pillar ID}",
      people: ["{participant page paths}"],
      source: "{meeting path}",
      stamp_source_line: "{exact source checkbox line text}"
    )

    people values must resolve to existing person page paths. Prefer the paths returned by Step 3's lookup_person/create_person flow; if only a bare participant name is available, pass that name unchanged and let create_task resolve it. Never construct or guess a person page path.

  5. Verify every result before marking the meeting extracted:

    • Require success: true for every create_task call.
    • Require either stamp.stamped: true, or reason: "already_anchored" with the exact source line's existing anchor equal to the returned task.task_id.
    • If entity resolution or stamping is unresolved, surface the exact failed line and leave the meeting unmarked for reconciliation. Do not blindly retry a task that was created but not stamped.

    A user can add <!-- dex:skip-processing --> to any meeting note to permanently exclude it from processing and from the session-start sweep. Skip such notes entirely: do not extract tasks or add a completion stamp.

    Only after every action item is verified, add this comment to the meeting note:

    markdown
    <!-- tasks-extracted: 2026-02-03T10:30:00Z -->

    Also stamp meetings with nothing to extract. If a meeting note has no action items (or you just added AI analysis to a basic note and found none), add the same tasks-extracted comment once processing is complete. The session-start check treats that marker, or a ^task- anchor on every remaining For Me item, as the durable sign the meeting is done.

After finishing edits to each processed meeting note, run this once for every processed note:

bash
node .scripts/auto-link-people.cjs "<note-file>"

Use node .scripts/auto-link-people.cjs --dry-run "<note-file>" to preview what would be linked without changing the file.

Step 7: Verify Entity Coverage

Run node .scripts/meeting-intel/verify-entities.cjs and show its one-line summary. If ENTITY_SUGGESTIONS_FILE contains suggested people, list them and ask: "Want me to create these pages? (creates via create_person; dismiss or never also fine)"

  • Accepted: call create_person, set the suggestion to accepted, and set the contact state to created with its page path.
  • Dismissed: set the suggestion to dismissed.
  • Never: set the suggestion to suppressed.
Step 8: Summary Report
## Meeting Processing Complete ✅

**Synced meetings found:** X (last 7 days)
**Background sync status:** Running (last sync: 10 min ago)

### Updates Made

**Person pages:**
- Created: 3 new (Alice Chen, Bob Smith, Carol Wang)
- Updated: 5 existing

**Company pages:**
- Created: 1 new (Acme Corp)
- Updated: 2 existing

**Tasks extracted:** 3 items added to 03-Tasks/Tasks.md
**Left in the note (not tracked):** 4 items with no date, owner or urgency —
say "track it" to promote any of them
- Product Review: "Think about the pricing page copy"
- Strategy Call: "Look into the new analytics vendor"

### Recent Meetings

| Date | Meeting | Company | Participants |
|------|---------|---------|--------------|
| Feb 3 | Product Review | Acme | Alice, Bob |
| Feb 2 | Strategy Call | BigCo | Carol |

---
*Background sync runs every 30 min. Check status: `.scripts/meeting-intel/install-automation.sh --status`*

Error Handling

For MCP responses, follow CLAUDE.md's feature_status rendering convention before applying these fallbacks.

If no meetings found:

"No meetings synced in the last 7 days. Make sure:

  1. Your Granola API key is connected (run /granola-setup if not)
  2. Background sync is set up (run /process-meetings --setup)
  3. Check logs: .scripts/logs/meeting-intel.stdout.log"

If background sync isn't running:

"Background sync appears to be stopped. To restart:

bash
cd .scripts/meeting-intel && ./install-automation.sh
```"

Examples

/process-meetings

"Found 8 synced meetings. Updating 12 person pages, extracting 5 tasks..."

/process-meetings today

"Found 2 meetings from today. Processing..."

/process-meetings --setup

"Installing background automation..." [runs install script]

/process-meetings --people-only

"Updating person and company pages only (skipping task extraction)..."


Track Usage (Silent)

Call the mark_feature_used tool on the dex-analytics MCP server with process-meetings. This ticks the feature's box in System/usage_log.md, which is what /dex-level-up reads to recommend features that have not been tried. It writes locally and sends nothing, so it runs whether or not analytics is enabled.

Analytics (Silent):

Call track_event with event_name meeting_processed and properties:

  • meetings_count: number of meetings processed
  • people_created: number of new person pages created
  • todos_extracted: number of tasks extracted

This only fires if the user has opted into analytics. No action needed if it returns "analytics_disabled".

© davekilleen, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/process-meetings of davekilleen/Dex.

  • SKILL.md
  • AGENT_INSTRUCTIONS.md

Open the folder on GitHubat commit 227f78e

Compare with similar skills

Process Meetings next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Process Meetings compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Process Meetings this skilldavekilleen/Dex493—~6.1kAutomated safety check: NotesMIT
Luopan Company Researchzhangxiaoqiang1991/luopan389—~998Automated safety check: PassMIT
Company Researchstophobia/deerflow2.0-enhanced821—~845Automated safety check: PassMIT
Meeting Prep BriefBrianRWagner/ai-marketing-claude-code-skills440—~922Automated safety check: PassNone
SdtStopDisTrain/sdt-skills309—~535Automated safety check: PassMIT
Account Researchextruct-ai/gtm-skills109—~1.6kAutomated safety check: PassNone

Similar skills

  • Luopan Company Research

    zhangxiaoqiang1991/luopan

    罗盘的公司研究子模式。研究具体上市或非上市公司的财务增长、商业模式、 竞争生态位、治理与组织信号,并分别生成投资初筛和求职初筛。

    389 GitHub stars~998 tokensUpdated 2 mo ago
    Sales & SupportAuto-check passed
  • Company Research

    stophobia/deerflow2.0-enhanced

    综合企业背景调研技能,用于尽职调查、合作伙伴评估、投资分析、市场研究等场景。支持公司工商信息、财务数据、法律风险、舆情分析、竞品对比等多维度调研,自动生成Markdown和HTML格式的专业调研报告。触发条件:用户提及"企业调研"、"公司背景"、"尽职调查"、"合作伙伴评估"、"投资分析"、"市场研究"等关键词。

    821 GitHub stars~845 tokensUpdated 6 mo ago
    Sales & SupportAuto-check passed
  • Meeting Prep Brief

    BrianRWagner/ai-marketing-claude-code-skills

    Builds a pre-meeting brief from your Obsidian vault: participant research, past notes, open commitments, a prioritized agenda and sharp questions.

    440 GitHub stars~922 tokensUpdated 6 mo ago
    Sales & SupportAuto-check passed
  • Sdt

    StopDisTrain/sdt-skills

    SDT 内容生产工具箱的总入口:根据当前任务选择最合适的 sdt- 模块,既能完成标题、开头等单一步骤,也能组织从账号研究到发布的完整流程。用户不知道该用哪个 SDT Skill,或希望一站式完成内容生产时使用。

    309 GitHub stars~535 tokensUpdated 1 mo ago
    Sales & SupportAuto-check passed
  • Account Research

    extruct-ai/gtm-skills

    Deep-research a single target account into a decision-ready dossier: the entity tree, the buying units and decision-makers, live signals (open/closed roles, leadership moves, news, tech stack), and…

    109 GitHub stars~1.6k tokensUpdated 11 days ago
    Sales & SupportAuto-check passed
  • Call Prep

    breakstageaxe61/genspark-claw

    Prepare an AI phone call end-to-end — research the callee, set a concrete objective and fallback, draft a natural call script with branching, and produce a post-call summary template.

    159 GitHub stars~986 tokensUpdated 13 days ago
    Sales & SupportAuto-check passed

More from davekilleen/Dex

All 61 skills in this repo
  • Dspy Ruby

    davekilleen/Dex

    This skill should be used when working with DSPy.rb, a Ruby framework for building type-safe, composable LLM applications.

    493 GitHub starsUsed in 1 repo~3.9k tokens
    Auto-check passed
  • Diff Adopt Profile

    davekilleen/Dex

    Adopt a full published Heydex profile by handle ('set me up like @davekilleen').

    493 GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Diff Generate

    davekilleen/Dex

    Package one workflow — how you use Dex for a specific job — into a shareable DexDiff methodology doc.

    493 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Creating Agent Skills

    davekilleen/Dex

    Expert guidance for creating, writing, and refining Claude Code Skills.

    493 GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed
  • Feedback

    davekilleen/Dex

    Report a Dex bug to the Dex team with zero homework — Dex investigates locally, builds a privacy-safe report, shows it to you (or auto-sends if you've chosen that), and tracks the ticket until it's…

    493 GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Dhh Rails Style

    davekilleen/Dex

    This skill should be used when writing Ruby and Rails code in DHH's distinctive 37signals style.

    493 GitHub starsUsed in 1 repo~1.7k tokens
    Auto-check passed

Categories

Questions about Process Meetings

What does Process Meetings do?

Turn synced meetings into updated person pages, extracted tasks and organized notes. Process Meetings is an agent skill from davekilleen/Dex. Turn synced meetings into updated person pages, extracted tasks and organized notes.

When should I use Process Meetings?

Process Meetings fits situations like: the user says process my meetings; catch up my notes; after Granola/Otter syncs.

How do I install Process Meetings in Claude Code?

Run `npx skills add davekilleen/Dex --skill process-meetings -a claude-code`. Or copy the skill folder (.agents/skills/process-meetings in davekilleen/Dex) into .claude/skills/process-meetings in your project. Claude Code loads it when a task matches its description.

How do I install Process Meetings in Codex?

Run `npx skills add davekilleen/Dex --skill process-meetings -a codex`. Or copy the skill folder (.agents/skills/process-meetings in davekilleen/Dex) into .agents/skills/process-meetings in your project. Codex loads it when a task matches its description.

Can I use Process Meetings in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add davekilleen/Dex --skill process-meetings -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/process-meetings, .gemini/skills/process-meetings, .github/skills/process-meetings and .opencode/skills/process-meetings in your project.

What does Process Meetings need to run?

Going by SKILL.md and its folder, Process Meetings needs the command-line tools its instructions call (node) and credentials named GRANOLA_API_KEY, GEMINI_API_KEY, ANTHROPIC_API_KEY and OPENAI_API_KEY. Our summary lists: A credential in GRANOLA_API_KEY; A credential in GEMINI_API_KEY.

Does Process Meetings access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Process Meetings safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Process Meetings use?

Process Meetings is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Process Meetings use?

About 6.1k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Process Meetings?

Skills that share tags, products or a category with Process Meetings: Luopan Company Research (zhangxiaoqiang1991/luopan, 389 stars), Company Research (stophobia/deerflow2.0-enhanced, 821 stars), Meeting Prep Brief (BrianRWagner/ai-marketing-claude-code-skills, 440 stars) and Sdt (StopDisTrain/sdt-skills, 309 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Process Meetings?

davekilleen (a GitHub user) maintains it in davekilleen/Dex, which has 493 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on October 8, 2026.

Source: davekilleen/Dex on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.