From noticed-skills
Save one or more people into noticed. Take whatever the user types (a LinkedIn URL, a picture, a name, a handle, or a freeform dump about someone), resolve identity carefully, enrich if needed, tag silently, preview as prose, save on one confirm. Handles batches (many people in one message). Trigger on "add this person", "save [name]", "remember [name]", a pasted linkedin/github URL with context, "add a few from tonight", "put X in noticed", "add them all", or any capture intent.
How this skill is triggered — by the user, by Claude, or both
Slash command
/noticed-skills:remember-personThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Primitive for adding people to noticed. Take the user's input, resolve identity, write. Slow and deliberate on identity over fast and guessing.
Primitive for adding people to noticed. Take the user's input, resolve identity, write. Slow and deliberate on identity over fast and guessing.
For each person in the message:
Pull out identifiers + context. Names, URLs (linkedin / github / twitter), handles, plus the user's freeform words. Many people in one message → one batch.
Normalize companies first. If a company is mentioned, web search to canonicalize ("Amplo Market" → Amplemarket). Carry the canonical name into the searches.
Resolve identity, in order:
AND in q ("Austin AND Rief", not "Austin Rief") — q OR-matches all fields and explodes on common terms. Single-token names stay as-is.company returns 0, drop it and re-rely on the name-only result.Own network → web → ask. No public-scope search (capture is who is this; reachability discovery is search-network's job).
Decide per person:
Tag silently. Role, company, sector, event-as-context (e.g. myosin-dinner), location. Apply at write time. User corrects at preview. Tags merge.
Preview (structure below).
On the go-ahead, fan out writes, then read back what landed. Identity questions resolve into the same go-ahead reply.
Organized by what's actionable, not by person. Empty zones collapse (a clean batch is just the ready list + the close).
ready to save to noticed:
<a sentence or short paragraph per resolved person — what they are + what's about to happen. one line when context is thin; a few sentences when there's something to say. don't pad, never invent detail.>
need from you:
<only people needing a decision — ambiguous identity, missing linkedin, an unresolved name. pull each out so it can't be missed.>
---
<closing line naming what the reply triggers — "reply with the X answer and i'll save all three to noticed" — or just "save to noticed?" when nothing's blocking.>
[merged] / [new] / [from network] tags shown to the user.tags: row — it reads like a database row. Fold a tag into prose only if worth surfacing ("saving her as a founder in consumer ai"); otherwise apply silently.[from user] or [research, unverified], written into default_notes, never shown in chat.Flag conflicts between the user's account and research — write both, tag each.
Recap what landed, per person, unprompted — noticed writes are silent, so this is the only confirmation. Write it like a person, not a database row: who's new vs updated, the gist of the note, the link if any. Flag web-sourced facts conversationally ("his headline's from the web, worth a glance").
default_notes appends a dated block, separated from existing notes by a blank line. Always get_person to read existing notes first — never overwrite.
[mcp · skill:remember-person · YYYY-MM-DD]
<content, each line tagged [from user] or [research, unverified]>
MCP limit: structured fields (linkedin_username, headline, github) can only be set at creation via add_to_network; update_person can't write them. So a web-found headline goes in free_form.headline on a new record, or the note body (tagged [research, unverified]) on an existing one.
# already in network: read existing notes, append dated block
noticed.get_person({ person_id, include: "dossier" })
noticed.update_person({ person_id, default_notes: "<existing>\n\n[mcp · skill:remember-person · YYYY-MM-DD]\n<source-tagged context>", tags: [...] })
# new contact: mint id (with known structured fields), then set notes
noticed.add_to_network({ free_form: { name, linkedin_url?, github_login?, headline? }, tags: [...] })
noticed.update_person({ person_id: "<new id>", default_notes: "[mcp · skill:remember-person · YYYY-MM-DD]\n<source-tagged context>" })
relationship_types (overlaps with tags); log_interaction (event-debrief / follow-up); scope: "public" searches; writing before the go-ahead; surfacing provenance tags or a raw tags: row in chat; composed plan-handoff (V3 — though event-prep may hand a batch in).Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub noticedso/skills --plugin noticed-skills