From career
Update the status of an existing outreach log row. Use when a contact replies, books a meeting, the meeting happens, the conversation stalls, or the opportunity closes. Records state-change date without rewriting history. The recommendation engine reads these statuses to enforce anti-loop discovery.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin careerThis skill is limited to using the following tools:
State-change updates on outreach log rows. Append-only spirit: the date columns shift, but the original `date` column (when the outreach happened) does not.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
State-change updates on outreach log rows. Append-only spirit: the date columns shift, but the original date column (when the outreach happened) does not.
$ARGUMENTS:
--row=<n> — 1-based row index in outreach.md.--company=<slug> --contact=<name> — disambiguates if multiple outreach events to same person.--latest=<company-slug> — picks the most recent outreach row for that company.--status=<sent|replied|meeting-booked|meeting-done|stalled|closed-won|closed-lost>--note=<freeform> — appended to existing notes.--next-action=<freeform> — overwrites next-action column./career:outreach status --latest=snowglobe --status=replied
/career:outreach status --latest=acme --status=meeting-booked --next-action="prep deck for Tue 2pm"
/career:outreach status --row=12 --status=closed-lost --note="passed on YOE mismatch"
${CAREER_DATA_DIR}/config.json → WORKING_FOLDER.
File: ${WORKING_FOLDER}/crm/outreach.md.
By the identifier mode used. If --latest=<slug> returns zero or multiple ambiguous rows, list candidates and ask.
Allowed transitions:
sent → replied | stalled | closed-lost
replied → meeting-booked | stalled | closed-lost
meeting-booked → meeting-done | stalled | closed-lost
meeting-done → meeting-booked | stalled | closed-won | closed-lost
stalled → replied | meeting-booked | closed-lost | closed-won
closed-won → (terminal — warn, ask confirm)
closed-lost → (terminal — warn, ask confirm)
If the requested transition is unusual (e.g. sent → closed-won directly), warn and confirm before applying.
In place. Specifically:
status column → new value.notes column → append [YYYY-MM-DD: <new-status>] <note> (if note provided), else [YYYY-MM-DD: <new-status>].next-action column → overwrite if --next-action provided.The original date column (first-touch date) is not modified. The last-touch concept lives in companies.md, not in the per-event outreach.md.
In ${WORKING_FOLDER}/crm/companies.md for the matching slug:
last-touch → today.status:
replied | meeting-booked | meeting-done → activestalled → pausedclosed-won → active (the engagement is alive)closed-lost → passedsent → engaged (no change if already)If status is meeting-booked and schedule-manager companion is installed, offer:
Add to calendar?
/schedule-manager:create-event
Don't auto-invoke; the user may want to set agenda/attendees themselves.
If status is meeting-done, offer to draft a follow-up via draft-outreach <slug> --template=warm-followup.
updated: row <n> | <company-slug> | <contact> | <old-status> → <new-status>
notes: <appended fragment>
date column is immutable.closed-won, closed-lost) require confirmation to modify.[YYYY-MM-DD: <status>] fragment in notes.--latest → list, ask.cat crm/outreach.md | head to inspect.[date: status] fragment (useful for "still stalled" check-ins).