From pm-os
Append a dated interaction (email, reply, call, demo, meeting) to an existing lead in data/leads/. Updates last_contact, optionally bumps status and next_action, and keeps data/leads/index.md in sync.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pm-os:log-interactionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill appends a single event to an existing lead's `## Interactions`
This skill appends a single event to an existing lead's ## Interactions
section and updates the lead's frontmatter (last_contact, and
optionally status / next_action / next_action_date). It also
re-syncs the row in data/leads/index.md.
When to use vs. the alternatives:
/log-interaction for per-lead events: sent email, got reply,
booked demo, prospect went silent, price objection raised./log-lead to create a new prospect file./log-signal for aggregate observations across many leads
("three prospects asked about pricing this week").data/leads/index.md and fuzzy-match against
the user's phrasing (company name or contact first/last name).
If 1 match: use it. If >1 match: ask the user to pick. If 0
matches: ask — and redirect to /log-lead if this is actually
a new prospect.## Interactions section (so we know last_contact and
can avoid duplicate entries on the same date/channel).Each interaction is one H3 section inside ## Interactions, newest
first. See .claude/context/data-schemas.md for the full format.
email, call, linkedin, demo,
meeting, research, other.sent, replied, no-reply, booked,
cancelled, added, other.After capturing the interaction, ask (one focused question, not all at once — only prompt if the interaction suggests a change):
replied, suggest bumping
Contacted → Responded. If booked, suggest Responded → Demo.
If cancelled or no-reply on the 3rd+ attempt, suggest
→ Lost. Don't auto-change; confirm with the user.next_action (short sentence) and next_action_date (YYYY-MM-DD
or null).Construct the H3 block:
### {YYYY-MM-DD} — {Headline}
<!-- channel:{channel} outcome:{outcome} -->
{Body, if any.}
Insert it at the top of the ## Interactions section (newest
first), immediately after the ## Interactions heading and its
<!-- Newest first... --> comment.
Update frontmatter in place:
last_contact: {event date} (only if the event date is newer
than the current value).status: {new status} if the user confirmed a bump.next_action: "{...}" and next_action_date: {YYYY-MM-DD or null}
if the user provided them.Update the matching row in data/leads/index.md:
Status, Last Contact, and Next Action
columns with the new values.Won or Lost, do not archive yet —
just update the index. /memory-review handles file moves to
data/leads/archive/.Confirm what was logged:
## Interaction Logged
**Lead:** {company} — {contact name}
**Event:** {headline} ({channel}, outcome: {outcome})
**Date:** {event date}
**Status:** {old} → {new} (or just "{status}" if unchanged)
**Last Contact:** {date}
**Next Action:** {next_action or "—"} ({next_action_date or "no date"})
**Written to:** data/leads/{slug}.md (top of Interactions)
**Index updated:** data/leads/index.md
Suggest 1–3 contextual next steps:
outcome = replied and status just moved to Responded:
→ "Want to run /design-experiment to structure a discovery call,
or draft an answer with the context in this lead file?"outcome = booked (demo scheduled):
→ "Add a prep task to /tasks for the day before the demo?"outcome = no-reply on the 2nd+ follow-up:
→ "Want to mark this lead Lost and note the reason in ## Notes?"## Notes
this month:
→ "That's a recurring objection. Worth capturing as a signal via
/log-signal (type: User Feedback)?"/log-signal./log-lead
instead of creating the file from this skill.npx claudepluginhub jesperhagg/pm-operating-system --plugin pm-osProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.