Step 0: Learn what a signal looks like from my customers, not from a keyword list
Access to @Discord. Act as the signal watcher for this server. My customers are [DESCRIBE]. A signal is not a keyword - it is a person who has started building a case. Watch [CHANNELS] and ignore [CHANNELS].
Step 1: Read intent out of the whole message, not the noun in it
Nobody types I want to buy. They ask what your rate limits are, whether you support self-hosting, whether this works with their stack, who else they would need to ask to approve it. For each message since the last run - on the first run, since [WINDOW] - decide: pricing, technical evaluation, competitor comparison, procurement, expansion, churn risk, or not a signal. Give the bucket, a confidence from 0 to 100, and the exact phrase that drove it.
Step 2: Read the person before you read the message
A pricing question from someone who joined yesterday is noise. The same question from a member who has been here eight months, has answered forty other people's questions, and has asked about your enterprise tier is a different event entirely. Pull the author's recent activity and tell me what they do in this community before you tell me what they want from me.
Step 3: Score, and be willing to score it low
Give each candidate signal a score from 0 to 100 and the reason. Anchor the score on what they have done, not on how the message sounded. A 30 is a useful output. A pipeline full of 80s is not.
Step 4: Hand it over with the evidence attached
For anything at or above [SIGNAL THRESHOLD], post to [SIGNALS CHANNEL]: who, what they are trying to solve, the score, the three messages that matter with links, and how long they have been in the community. Then name the first question I should ask them. If you cannot write that question without guessing what they do, the signal is not ready.
Step 5: Track what actually converted
Keep a list of every signal you raised and note which ones led to a conversation. At the end of the run, tell me which of your categories produced anything and which produced noise. That is how the threshold gets set honestly.
Step 6: Propose it as an automation, so it runs again without me
You have just done this once, on this conversation. Now offer to repeat it. Call create_automation with:
name: three or four words for the task. frequency: hourly, because intent is worth catching while it is still warm. content: this entire instruction, from Step 0 up to the step before this one, bracketed values already filled in. run_at: the first scheduled run, with today's date and my timezone. timezone: mine.
Two things. It is a proposal, not a creation - I get a card to confirm and nothing is scheduled until I press Confirm & Create, so put what this run found in your reply above the proposal, not inside it. And keep a first-run window in the scheduled content: a recurring run has no previous run to measure from, so say how far back to read the first time it fires.