Agent skill
find
Find what was said about something and when, in the Memos log, following corrections to the end of the chain.
From sarahcallmesmadds/gtm-operator · 27 skills · 0 · pushed 2026-09-02
What it does when it runs
Find what was said about something and when, in the Memos log, following corrections to the end of the chain. Use when the user asks "what did we announce about", "when did we decide", "was there a memo on", "what was said about", "did anyone send an update on", or asks a question the log might already answer. Reads only. Never edits, never creates.
Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- mcp__*__notion-fetch
- mcp__*__notion-query-data-sources
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- Write
- Bash(node:*)
- mcp__*__notion-fetch
- mcp__*__notion-query-data-sources
- Actions present in the files
- shell
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/sarahcallmesmadds/gtm-operator.git /tmp/gtm-operator git -C /tmp/gtm-operator sparse-checkout set "plugins/memos/skills/find" mkdir -p ~/.claude/skills/find cp -R "/tmp/gtm-operator/plugins/memos/skills/find/." ~/.claude/skills/find/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
Or take the whole library
This repo ships a .claude-plugin manifest, so Claude Code can install all 27 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.
/plugin marketplace add sarahcallmesmadds/gtm-operator /plugin
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
Before you install: this skill will not complete its job on a bare agent. It needs mcp__*__notion-fetch, mcp__*__notion-query-data-sources, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from sarahcallmesmadds/gtm-operator/blob/a93c6e98a742d183823691197b8d9be9edd114c6/plugins/memos/skills/find/SKILL.md, which is licensed MIT (repository). 697 words, 7 headings.
find
Answer the question, name the memos you answered from with their dates, and serve the correction rather than the corrected.
The line this skill holds: a log that serves a superseded record silently is
worse than one with no answer, because the reader has no way to know. The
Corrects relation earns its place at read time, here.
This is the skill people use most, so it has to be the least ceremonious. No confirmation gates, no previews, no forms. Ask, answer, caveat.
How this skill works
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" context
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" find <question.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" chain
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" follow <rows.json> <memo-url>
Do not compose the query by hand. It resolves the workspace's own property and option names through the config map, and a query carrying shipped names comes back with no rows on a renamed workspace, which reads exactly like nothing having been said.
Step 0. Refuse to start without config
Run context. If it refuses, print what it said and stop.
Step 1. Narrow by what the memo is, not by its words
Write what you know to a file. All optional:
{ "Type": "Release", "Domain": "Deal Execution" }
Type, Domain and Published date are the judgment, not text matching. The rows come back newest first. Text matching alone finds the memo that uses the same words, which is not the same as the one that answers the question. When you are not sure of the Type, do not filter on it: a filter that excludes the right answer is worse than a longer list, because nothing tells you it happened.
Drafts and canceled memos are excluded by default, and the result says so.
Say it when reporting: a draft was never announced and a canceled memo was
retracted. Pass includeCanceled: true when the question is about what was
retracted, which is a real question.
Step 2. Follow the corrections
Before answering from any row whose Corrected by column is not empty, get
the whole table and walk the chain:
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" chain
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" follow rows.json <the memo's url>
chain is deliberately unfiltered: a correction chain crosses types, domains
and statuses, and a chain followed through filtered rows ends wherever the
filter ran out.
follow walks to the most recent correction and says how many versions it
passed. What it reports, it never resolves:
- A branch — one memo corrected twice independently — is a real disagreement between two people. Show both corrections. Picking the newer silently is how a log starts lying.
- A cycle is shown with the memos in it, and no place to break it is chosen.
- A memo correcting several is shown with all its targets, and no path is picked.
A chain ending in a canceled memo means the most recent word was retracted. The output flags it; say it.
Step 3. Answer
- The answer, in your own words, from the memo.
- The memo it came from, by name, with its link and its published date.
- The correction caveat in the same breath: "corrected on
<date>, this is the current version, an earlier one exists", or the violationfollowreported, shown rather than resolved.
When nothing answers it, say what was searched: which Type and Domain filters were applied and that drafts and canceled memos were excluded. "Nothing found" and "nothing found in the half of the log I looked at" are different answers.
When several memos could answer it, name the best one by Type, Domain and date, and say the others exist. Do not return a wall of results.
What this skill does not do
- Does not edit and does not create. Reads only. A wrong memo is corrected
by a new memo, through
new. - Does not pick between branched corrections. It shows both and says why.
- Does not judge staleness. A memo cannot go stale: it records what was said on a date, which is why there is no audit in this plugin. The only freshness question is whether something later corrects it, and that is Step 2.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- twitter-GTM-find-Skill by Varnan-Tech · 645
- find-customer-social-proof by zapier · 336
- find-lead-account-owner by zapier · 336
- find-lookalikes by Othmane-Khadri · 301
- find-qualified-titles by getaero-io · 58
- outreach-find-email by emelia-io · 12
- outreach-find-phone by emelia-io · 12
- find-contacts by Frontal-so · 5
Need help setting it up?
This page tells you what find does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.