Systems Lab

Agent skill

find

Find what was said about something and when, in the Memos log, following corrections to the end of the chain.

activeNeeds a keyDeclared tools697 words

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

Ask about find

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
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.

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

  1. The answer, in your own words, from the memo.
  2. The memo it came from, by name, with its link and its published date.
  3. The correction caveat in the same breath: "corrected on <date>, this is the current version, an earlier one exists", or the violation follow reported, 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.

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.