Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/danivellagit-remember-people
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: productivity
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/remember-people
What's inside
- Skill name
remember-people- Description
- A chief-of-staff for one-to-one meetings. Before a 1:1 it prepares a brief on the person (work + personal), keeps an append-only log of every meeting, runs the daily sweep that turns calls, mail and chats into the graph, and suggests when to see them next. The staff that remembered everything.
- License
- MIT
- Instructions
- 323 lines in SKILL.md · view on GitHub
Files (4)
- SKILL.md
- interaction.md · templates/
- media.md · templates/
- person.md · templates/
SKILL.md (first lines)
# remember-people
## What it does, in one line
It puts the right person back in front of you five minutes before you walk in: who they are,
when you last met, what was left open, two or three personal hooks to open with, what NOT to
raise, and how often you should be in touch.
The value is not storage. It is retrieval at the right moment.
Who "the owner" is comes from `config.local.yml`: `owner` is the display name, `owner_slug` the
slug of the owner's own file (`data/_me.md`, with dated self-episodes under
`data/interactions/_me/`). The owner is the point of view of the whole graph, never a node in
`people/`.
## The type system (a linked graph)
The person and the interaction are the two anchors, but they live inside a wider graph of
connective entities discovered from the stream. **The full node map, the edge table (every
forward + reverse pair), and the rules live in [`anatomy.md`](../../anatomy.md); the exact
field-and-edge contract the tooling enforces is [`LEGEND.md`](../../LEGEND.md).** Read both
before writing nodes. Short version:
| Thing | A type? | Where it lives |
| --- | --- | --- |
| **person** | yes, a node with a file | `data/people/<slug>.md` |
| **interaction** | yes, a node with a file | `data/interactions/<slug>/YYYY-MM-DD.md` (recent) or `YYYY-MM.md` (old rollup) |
| **company** | yes (anchor, optionally mirrored from a system of record) | `data/companies/<slug>.md` |
| **place / passion / city / term / group / event / bond / role** | yes, born in repo on recurrence | `data/<type>/<slug>.md` |
| **media** | yes, born in repo (one node per artifact) | `data/media/<slug>.md`: a podcast / video / interview / article / book ABOUT people that you *consumed* |
| relation (any node to any node) | no, an **edge** | forward + reverse wiki-link pair in frontmatter |
| meeting transcript / chat / mail | no, a **source** | referenced by id, never stored whole |
| manual capture (offline interaction / owner thought) | no, an owner-pushed **source** | logged on demand as an interaction, `setting: manual` (see Flow D) |
| brief | no, an **ephemeral view** | generated on demand, never saved |
The brief (Flow B) looks at the human first; the graph lets it ramify (who they know, where you
meet them, what you share) instead of reading isolated files. Keep the discipline that makes it
work: **node-on-recurrence** (a light entity becomes a file only when it recurs, two or more
mentions or days), **dedup before create** (aliases, never fork), and **every edge is a forward
+ reverse pair**: you write the forward one through `tools/graph.py`, `tools/lint.py --fix`
writes the reverse.
Templates for the three files this skill writes most: [`templates/person.md`](templates/person.md),
[`templates/interaction.md`](templates/interaction.md), [`templates/media.md`](templates/media.md).
## Memory model: three layers, like the brain
```
episodic -> data/interactions/<slug>/*.md individual meetings, immutable, append-only
semantic -> data/people/<slug>.md who they ARE: stable facts (family, character)
working -> "Current state" section on top what is hot NOW (open threads, pending follow-ups)
```
- **Episodic** is the raw archive. You never read all of it.
- **Semantic** is what you generally know about them. It does not grow with each meeting, it
gets sharper. After 20 meetings the profile is not 20x longer, it is more accurate.
- **Working** is the few live things: where you left off, what you promised, what to open with.
## Flow A: "log the 1:1 with X"
1. Take the transcript (transcription tool) or spoken / typed notes.
2. Separate: work side / what you learned about them (personal) / what you promised.
3. Append a new file to `data/interactions/<slug>/YYYY-MM-DD.md` from the template. Never
overwrite.
4. **Rollup** in the same write: promote any new stable fact into the profile (semantic),
rewrite the "Current state" section (working), close resolved follow-ups.
5. **Wire it**: run the graph pass (Flow E) on this one interaction, then the lint.
The rollup is what keeps history from piling up: the summary compresses itself a little on
every meeting. Memory is the living summary plus the logs as backup, not the sum of 20 logs.
## Flow B: "prepare the brief for X"
The brief reads three things only, never the full archive:
```
profile (semantic) + current state (working) + last 2-3 interactions (recency)
```
1. Open `data/people/<slug>.md`.
2. Glob the last 2-3 files in `data/interactions/<slug>/`.
3. If an external source is configured and X is a work contact, read it **read-only** for the
work side. If nothing is there, do not block.
4. Check the calendar: next scheduled meeting + time since last contact -> cadence.
5. Output the one-pager: who they are / last contact / what is open / 2-3 personal hooks /
what NOT to raise / when to see them next.
6. **No bare names.** Any third person named in the brief (a hook, an open thread) carries one
inline clause of who they are and where the name comes from ("Jonah Whitlock, the profile
X sent on WhatsApp last Tuesday as a hire idea"), never a naked name. The owner reads the
brief precisely because they do not remember; assume zero recall of secondary names, even
ones from yesterday.
7. **Only confirmed guidance.** A hook or a "what NOT to raise" comes from something said or
confirmed, never from the sweep's own read (see "Quotes are facts" below).
Older meetings stay in the archive, recalled only on demand ("what did we discuss in March?").
## Flow C: "daily sweep" (unattended)
Runs once a day, no human in the loop. It turns the last day of meetings, mail and chats into
episodic logs + profile rollups + edges, so Flow B always has fresh memory to read.
0. **See the state before touching anything.** `python3 tools/lint.py` (the starting shape),
`python3 tools/gaps.py today` (the unknowns this run should try to close), and
`python3 tools/owed_backfill.py` (days with traffic in a source but no interaction file).
Never give the catch-up check a hardcoded start date: a detector told to skip a region cannot
see it, and in the graph this engine was built on that hid two months and ~17,000 messages
behind a check that kept truthfully reporting "nothing owed". The backfill runs
oldest-first, one day at a time, until `owed_backfill.py` reports nothing.
1. **Window.** Look at the last ~24h (since the previous run). Pull:
- Meetings the owner attended, from the transcripts integration.
- Real human email the owner exchanged, from the mail integration. Skip automated mail:
newsletters, `no-reply@`, receipts, notifications, marketing. Only person-to-person.
- Real WhatsApp conversations the owner exchanged, from the whatsapp integration. Names
come from the owner's synced address book, so a saved contact maps straight to its slug.
**Groups are in** (`sweep.whatsapp.include_groups`): attribute each message to its sender
and feed it into that sender's node; a group itself never becomes a person node. Skip
business / verified accounts, broadcasts, OTP and automated messages. A bare number with no
saved name becomes a node only after it recurs (`sweep.whatsapp.unknown_number_min_days`).
2. **Per counterpart.** For each other human in a meeting / thread, resolve their slugFrom danivellagit/personal-knowledge-graph, MIT.
More from danivellagit/personal-knowledge-graph
- 0.561score
graph-audit
danivellagit
The weekly look at the graph from above.
SkillAFreshness: AClaude Code +9 - 0.559score
accountant
danivellagit
The owner's AI accountant and company-admin advisor agent.
SkillAFreshness: AClaude Code +9 - 0.559score
best-friend
danivellagit
The owner's best friend and daily-life assistant agent.
SkillAFreshness: AClaude Code +9 - 0.559score
fitness-coach
danivellagit
The owner's personal fitness coach agent.
SkillAFreshness: AClaude Code +9 - 0.559score
founder-assistant
danivellagit
The owner's work assistant and chief of staff agent.
SkillAFreshness: AClaude Code +9 - 0.556score
psychologist
danivellagit
A session with the owner's psychologist agent ("let's do a session", "I need to talk", "talk to the psychologist", or the persona name they gave it).
SkillAFreshness: AClaude Code +9 - 0.304score
notion-sync
danivellagit
No description from the publisher yet.
SkillAFreshness: AClaude Code +9 - 0.301score
web-builder
danivellagit
No description from the publisher yet.
SkillAFreshness: AClaude Code +9 - 0.301score
brand-designer
danivellagit
No description from the publisher yet.
SkillAFreshness: AClaude Code +9 - 0.301score
health-advisor
danivellagit
No description from the publisher yet.
SkillAFreshness: AClaude Code +9 - 0.301score
linkedin-coach
danivellagit
No description from the publisher yet.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from danivellagit
- 0.561score
graph-audit
danivellagit
The weekly look at the graph from above.
SkillAFreshness: AClaude Code +9 - 0.559score
accountant
danivellagit
The owner's AI accountant and company-admin advisor agent.
SkillAFreshness: AClaude Code +9 - 0.559score
best-friend
danivellagit
The owner's best friend and daily-life assistant agent.
SkillAFreshness: AClaude Code +9 - 0.559score
fitness-coach
danivellagit
The owner's personal fitness coach agent.
SkillAFreshness: AClaude Code +9 - 0.559score
founder-assistant
danivellagit
The owner's work assistant and chief of staff agent.
SkillAFreshness: AClaude Code +9 - 0.556score
psychologist
danivellagit
A session with the owner's psychologist agent ("let's do a session", "I need to talk", "talk to the psychologist", or the persona name they gave it).
SkillAFreshness: AClaude Code +9
Cite this page
remember-people skill. Agent Mart. https://agentmart.dev/skills/danivellagit-remember-people (last updated 2026-10-24)