Skill v1.0.0
currentLLM-judged scan95/100version: "1.0.0" name: signal-engine description: >- Use when the user says "buying signals", "intent data", "triggers", "what should we watch for", "signal-based outbound", "how do we know when to reach out", "route signals to plays". Builds the trigger taxonomy, sets decay windows and scores, and writes the signal-to-play routing table that turns a detected event into a specific action with an owner and an SLA. Writes workspace/program/signals.md.
Signal Engine
Define what events are worth acting on, how long they stay worth acting on, and exactly what happens when one fires.
When to use
- After tiering, as part of foundation
- "We bought intent data and nothing happened" (the most common reason to run this)
- Reply rates are fine but timing feels random
- Adding a new signal source to an existing program
Inputs
- Reads:
workspace/program/icp.md,workspace/program/charter.md,workspace/program/stack.md,docs/plays-library.md - Needs from user: which signal sources are available or affordable, who can act on a signal, and how fast
Workflow
1. Start from what the signal is evidence of
A signal is only useful if it is evidence that a specific problem just became urgent. Write that sentence for every candidate signal before adding it. If you cannot, it is a data point, not a signal.
2. Build the taxonomy
Tiered by strength, because they are not equal.
Tier A – strong, act within days
| Signal | Evidence of | Decay | |
|---|---|---|---|
| Relevant executive starts in role | A stack and vendor review is coming | 120 days | |
| Champion from a customer joins a target account | A person who already knows your value is now inside | 90 days | |
| Competitor contract expiry or public dissatisfaction | A live evaluation window | 60 days | |
| Inbound from a target account | Self-declared interest | 48 hours | |
| Public initiative naming your category | Budget is forming | 180 days |
Tier B – moderate, act within two weeks
| Signal | Evidence of | Decay | |
|---|---|---|---|
| Funding round, Series B or later | Permission to spend, pressure to show progress | 90 days | |
| Hiring surge in the target function | The capability now matters, the approach is undecided | 60 days while roles are open | |
| Acquisition or merger | Consolidation and system decisions | 180 days | |
| New office, market, or region | Expansion needs | 120 days | |
| Technology adoption or removal | Stack in motion | 90 days | |
| Regulatory deadline in their sector | A forced project | Until the deadline |
Tier C – weak alone, useful in combination Website visits, content downloads, ad engagement, third-party topic intent, review-site activity, social engagement, event attendance.
The combination rule: two Tier C signals inside 14 days on the same account is worth a Tier B response. One Tier C signal alone is worth logging, not acting on. This rule is what makes third-party intent data useful instead of noisy.
3. Set decay explicitly
Decay runs on one of two bases, and the taxonomy records which. Detection-based decay counts days since the signal was observed, which is right for almost everything. Deadline-based decay counts backward from a fixed external date, which is the only correct handling for a regulatory or contractual deadline. A compliance deadline eighteen months out is not urgent today and is extremely urgent at T-90. A detection-based window on that row either expires it the day it is found or never expires it at all, and both are wrong.
Every signal has a shelf life, written down. An executive who started 11 months ago is not a new-executive signal. Decayed signals drop out of the intent score automatically, which is what keeps account-tiering honest.
4. Build the routing table
The part that makes the difference between a signal feed and a signal engine:
| Signal | Tier gate | Play | Owner | SLA | Channel | |
|---|---|---|---|---|---|---|
| New executive | T1, T2 | New executive play | Account owner + exec sponsor | 5 business days | Exec email, then rep cadence | |
| Champion job change | Any fit >= 3 | Champion job change play | Original AE | 3 business days | Personal note | |
| Inbound from target | Any | Inbound fast-track | SDR then owner | Same day | Call then email | |
| Funding | T1, T2 | Funding play | Account owner | 10 business days | Cadence + matched ads | |
| Hiring surge | T2 | Hiring surge play | SDR | 10 business days | Cadence | |
| 2x Tier C in 14 days | T1, T2 | Warm-up touch | Account owner | 5 business days | Personal email |
Rules for the table: every row has a named owner and an SLA in days, a signal with no play attached does not get collected, and if the SLA is missed twice on a row, either fix the staffing or delete the row.
5. Set the monitoring cadence
Weekly sweep for the full list, daily for Tier A signals on T1 accounts, real-time for inbound. Match the cadence to what you can genuinely act on. A daily feed nobody reads is worse than a weekly one somebody does.
6. Feed the intent score
Signals become the intent_score column in account-tiering. Define the point values here, in one place, and let tiering read them. Points expire on the decay schedule.
7. Measure the signals themselves
Quarterly, per signal type: how many fired, how many were acted on within SLA, what the reply rate was, and how many opportunities resulted. Kill the ones that produce nothing. Most programs are collecting at least one signal that has never produced a meeting, and nobody has checked.
Output
- Writes:
workspace/program/signals.mdincluding the taxonomy, decay windows, point values, and the routing table - Prints: the routing table, the sources needed for each signal, and any signal with no owner
Rules & quality bar
- No signal without a play. Collecting a signal you will not act on costs money and creates guilt
- Every routing row has an owner and an SLA in days. Unowned rows are deleted, not left aspirational
- Decay is enforced. A signal past its window is not a signal
- Tier C never fires alone. Two in 14 days, or nothing
- Review the signal set quarterly and delete the dead ones
- No inferred intent presented as fact. Third-party intent is a probability, and it gets labeled as one
Related skills
- Feeds:
account-tiering(intent score),play-designer(which play fires),outbound-cadence(the opening line) - Reads:
icp-definition - See also:
docs/plays-library.mdfor the plays each signal routes to