Skip to content

feat(hooks): auto-link meetings to their related projects#61

Open
rhadiaris wants to merge 2 commits into
davekilleen:releasefrom
rhadiaris:feat/meeting-project-auto-linking
Open

feat(hooks): auto-link meetings to their related projects#61
rhadiaris wants to merge 2 commits into
davekilleen:releasefrom
rhadiaris:feat/meeting-project-auto-linking

Conversation

@rhadiaris

Copy link
Copy Markdown
Contributor

Summary

Adds a new skill-scoped hook (post-meeting-project-update.cjs) that mirrors the existing post-meeting-person-update.cjs pattern but updates project pages instead of person pages. After a meeting note is written (or piped inline), the hook scans the content against active project pages in 04-Projects/ and appends a link under each matching project's ## Meeting History section.

Before: When /process-meetings ran, person pages got updated with meeting references but project pages did not. If you met about a specific project, you had to manually link the meeting yourself — and most of the time, it just never happened. Project pages drifted out of sync with the actual work being discussed about them.

After: Project pages stay in sync automatically, with zero manual upkeep.

What's in this PR

  • New hook: .claude/hooks/post-meeting-project-update.cjs (dual-mode — file-triggered + inline CLI)
  • Skill wiring: added to /process-meetings SKILL.md frontmatter alongside post-meeting-person-update.cjs
  • Docs: new section in .claude/hooks/README.md
  • CHANGELOG: entry under [Unreleased]

How matching works

  • Each project can declare keywords: in its frontmatter (comma-separated). Preferred.
  • If keywords: is missing, the hook falls back to the project's filename converted to a full multi-word phrase (e.g., Acme_Migration.md"acme migration").
  • No single-word fallback for multi-word project names — deliberately avoids false positives on generic terms like "brief" or "pipeline" matching every meeting that mentions them in passing.
  • Closed and archived projects are skipped automatically (status: closed / status: archived).
  • Idempotent — re-running on the same meeting won't add duplicate links.

Dual mode

File mode (default, automatic):

  • Fires via PostToolUse / Write when a meeting note is saved
  • Reads the file, scans, updates matching projects
  • No skill changes needed beyond the frontmatter wiring

Inline mode (new, for skills that fetch transcripts without saving):

echo "$transcript" | node .claude/hooks/post-meeting-project-update.cjs \
    --inline --name "YYYY-MM-DD - Meeting Title"

Each linked entry carries a source: file or source: inline audit tag so the provenance is visible.

Test plan

  • File mode: write a meeting note to 00-Inbox/Meetings/, verify matching projects receive a Meeting History entry
  • Inline mode: pipe a transcript via stdin with --name, verify same behavior
  • Idempotency: re-run on same meeting (both modes), verify no duplicate links
  • Status filter: confirm closed/archived projects are skipped
  • Error handling: --inline without --name errors with usage; empty stdin errors
  • Non-meeting Write calls: hook bails immediately (no side effects on unrelated writes)

🤖 Generated with Claude Code

github-actions Bot and others added 2 commits March 28, 2026 07:23
Clean distribution from main (a3422e3).
Dev-only files removed per .distignore (72 files stripped).
… projects

Adds a new skill-scoped hook that mirrors the existing post-meeting-person-update
pattern, but for project pages. After a meeting note is written (or piped inline),
the hook scans the content against active project pages in 04-Projects/ and
appends a link under each matching project's "## Meeting History" section.

Highlights:
- Dual-mode: file-triggered via PostToolUse/Write AND inline CLI for skills
  that fetch transcripts without saving a file (echo "..." | hook --inline --name "...")
- Keyword matching: explicit "keywords:" frontmatter field per project (preferred)
  or full-name fallback from filename. No single-word fallback — prevents false
  positives on generic words.
- Skips closed/archived projects.
- Idempotent across both modes (won't double-link).
- Each entry carries a source: file/inline audit tag.

Wired into /process-meetings alongside the existing person-update hook so it
fires automatically whenever a meeting note is written.

Test plan:
- File mode: write a meeting note to 00-Inbox/Meetings/, verify matching projects
  receive a Meeting History entry
- Inline mode: pipe a transcript via stdin with --name, verify same behavior
- Idempotency: re-run on same meeting, verify no duplicate links
- Status filter: confirm closed/archived projects are skipped
@github-actions github-actions Bot force-pushed the release branch 13 times, most recently from 1a60417 to 6e4ef10 Compare June 2, 2026 12:33
@davekilleen

Copy link
Copy Markdown
Owner

Thank you so much for this — it's a thoughtful PR and I really appreciate the effort you put in (mirroring the person-link pattern is exactly the right instinct).

Auto-linking meetings to projects is something I'm actively working on right now, as part of a broader push to make the whole entity-linking layer much more effective. Rather than merge it in isolation, I'd like to fold it into that work so it all hangs together — and I'm hoping to have a release out in the coming days.

Your approach here directly feeds into how I'm thinking about it, so thank you. Please keep the contributions and suggestions coming — they make a real difference.

@github-actions github-actions Bot force-pushed the release branch 2 times, most recently from e89f2f6 to b271e92 Compare June 3, 2026 17:41
@github-actions github-actions Bot force-pushed the release branch 9 times, most recently from 750693a to c4f152e Compare July 11, 2026 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants