Lead Signal Scout
Verwandle eine Produkt-URL in eine Shortlist, bei der jeder Eintrag auf einer Seite sitzt, die der Agent geöffnet, gelesen und datiert hat, und zu jemandem gehört, der tatsächlich kaufen könnte. Unverifizierte, veraltete und unqualifizierte Interessenten schaffen es nie auf die Shortlist.
Sechs Gates sind obligatorisch. Das Überspringen eines einzigen macht die Ausführung ungültig; sage das, anstatt die Ausgabe zu liefern.
- Aufnahme (Schritt 1) – Recherchiere nicht, bis das Briefing einen schwachen Treffer ablehnen kann.
- Verifikation (Schritt 4) – Schreibe keinen Interessenten aus, dessen Seite nicht abgerufen wurde.
- Screening (Schritt 4) – Gib eine Abfrage, die Ergebnisse geliefert hat, nicht auf, ohne eine davon zu öffnen und den Grund zu notieren.
- Aktualität (Schritt 5) – Nimm kein Signal ohne Datum oder nach dem Stichtag in die Shortlist auf.
- Qualifikation (Schritt 6) – Nimm keinen Interessenten in die Shortlist auf, der kein eigenes Problem nachweisen kann, keine Kaufmöglichkeit hat, keinen nutzbaren Kontaktweg bietet oder in einem unternehmensgeführten Modus kein identifiziertes Unternehmen hat.
- Audit (Schritt 8) – Präsentiere keine Ergebnisse, bis
validate_run.pyBESTANDEN zurückgibt.
Schreibe jedes Prosa-Feld gemäß references/writing-rules.md. Ein Bericht, der wie generiert wirkt, wird ignoriert, egal wie gründlich die Recherche dahinter war.
Workflow
1. Aufnahme
Lies references/intake.md. Erstelle das Produkt-Briefing, frage dann einmalig in einer einzigen gebündelten Nachricht nach den vier Dingen, die eine Landingpage nicht verraten kann: Geografie, Preisspanne und Kaufmechanik, Ausschlüsse sowie vorhandene Kunden- oder Erfolgsdaten. Fahre mit gekennzeichneten Annahmen fort, wenn der Benutzer nicht antwortet.
Trage icp.price_band_source als user oder assumed ein. Das ist wichtig: Eine von dir erfundene Spanne darf niemanden ausschließen. Bei assumed bewerte commercial_fit nicht unter 3 aus Preisgründen. Eine Zahl, die niemand bestätigt hat, hat kein Recht zu entscheiden, welche echten Unternehmen fallen gelassen werden.
Setze max_age_days hier. Der Standardwert ist 120. Verwende 60, wenn die Signale Stellenanzeigen oder Lieferantensuchen sind, bei denen eine vier Monate alte Anfrage fast immer besetzt ist.
2. Modus und Tiefe festlegen
Der Modus bestimmt, was optimiert wird. Die Tiefe bestimmt, wie viele. Sie sind unabhängig voneinander.
| Modus | Optimiert für | Gewichte (Schmerz / Fit / Kommerziell / Timing / Reichweite / Belege) |
|---|---|---|
discovery (Standard) | Ungelöste Schmerzen, vor Produkt-Markt-Fit | 28 / 22 / 10 / 14 / 13 / 13 |
pipeline | Wiederkehrender Lead-Fluss für ein verkaufendes Unternehmen | 22 / 20 / 20 / 14 / 12 / 12 |
design-partners | Personen, die wahrscheinlich testen und Feedback geben | 24 / 18 / 6 / 10 / 24 / 18 |
b2b | Unternehmen mit aktuellem geschäftlichem Auslöser | 14 / 20 / 26 / 18 / 11 / 11 |
community | Explizite öffentliche Anfragen und Diskussionen | 28 / 18 / 8 / 14 / 22 / 10 |
Die Modi b2b und pipeline weigern sich außerdem, einen Interessenten ohne identifiziertes Unternehmen auf die Shortlist zu setzen.
| Tiefe | Shortlist-Limit | Mindestabfragen | Mindestens geöffnete Seiten | Mindestabdeckung Bucket x Familie |
|---|---|---|---|---|
quick | 5 | 10 | 12 | 4 Buckets x 3 Familien |
standard (Standard) | 10 | 18 | 20 | 5 Buckets x 4 Familien |
deep | 20 | 35 | 35 | 7 Buckets x 6 Familien |
Abfragen messen das Tippen, Seiten messen das Lesen, und nur eines von beidem findet Kunden. Trage die Anzahl in coverage.pages_opened ein, einschließlich Seiten, die nie zu Kandidaten wurden.
Kopiere das Profil für den gewählten Modus unverändert in das Run-JSON. Der Auditor berechnet jede Punktzahl neu und schlägt fehl, wenn die deklarierten Gewichte vom Profil des Modus abweichen.
3. Suche planen und durchführen
Lies references/search-playbook.md. Schreibe den Abfrageplan vor der Suche: welche Buckets, welche Quellfamilien, welche Formulierungen in den eigenen Worten der Zielgruppe. Protokolliere jede Abfrage und ihre Ergebnismenge, einschließlich derer ohne Ergebnisse. Sammle Kandidaten-URLs; schreibe noch keine Interessenten-Datensätze.
4. Verifizieren, bevor du schreibst
Lies references/verification.md. Rufe jede Kandidaten-URL ab, dann entscheide:
signal_confirmed– Seite abgerufen, Signal darauf vorhanden, dem genannten Interessenten zuzuordnen. Nur dies darf auf die Shortlist.url_ok– abgerufen, aber das Signal ist vage, die Zuordnung ist abgeleitet, oder das Datum fehlt. Prüfebene.unverified– nicht abgerufen, tot oder hinter einer Zugangssperre. Füge zudroppedmit Begründung hinzu und stopp. Schreibe es nicht aus.
Einen vollständigen Interessenten-Datensatz zu schreiben und dann zu verwerfen, weil die Seite 404 meldet, verschwendet den Großteil eines Runs. Rufe zuerst ab, schreibe dann.
Öffne, was du aufgeben willst. Jede Abfrage, die drei oder mehr Ergebnisse geliefert hat und keine behalten hat, benötigt einen note-Eintrag im Coverage-Eintrag, geschrieben nach dem Öffnen eines dieser Ergebnisse. Der Auditor lässt einen Run scheitern, bei dem die meisten aufgegebenen Abfragen keine Notiz haben.
Dies ist der Schritt, der entscheidet, wer auf der Shortlist steht, und er ist unsichtbar, wenn du ihn nicht aufschreibst. Ein Run, der 16 Abfragen protokolliert und jede Abdeckungsschwelle erfüllt, kann dennoch 75 Ergebnisse geliefert, 10 geöffnet und seine gesamte Shortlist aus drei anzeigenartigen Abfragen bezogen haben, während eine Seite mit Wettbewerbsbewertungen und drei veröffentlichte RFPs ungelesen blieben. Die Audit-Zeile wird das als volle Abdeckung bezeichnen. Überprüfe auch den Kontaktweg; verification.md beschreibt, was aufgezeichnet werden muss.
Recherche-Grenzen: nur öffentliche berufliche und geschäftliche Informationen; keine Umgehung von Logins, Paywalls, Zugriffskontrollen, Ratenbegrenzungen oder Robot-Einschränkungen; keine Datenmakler, durchgesickerte Datensätze, private Gruppen, persönliche E-Mail-Suche oder Telefonanreicherung; niemals auf geschützte Merkmale, Gesundheit, finanzielle Not, Politik, Religion oder Sexualität schließen oder abzielen.
5. Jedes Signal datieren
Das Timing wird aus dem Alter bewertet, daher kann ein undatiertes Signal nicht auf die Shortlist. Arbeite diese Liste ab und halte bei der ersten an, die eine Antwort liefert: ein sichtbares Veröffentlichungsdatum, einen relativen Zeitstempel auf der Seite umgerechnet in signal_age_days, oder einen in der URL codierten Zeitstempel. Notiere, welches du verwendet hast, in date_basis. verification.md gibt die Methode für jede an.
Schätze niemals ein Alter. Teilweise Daten wie 2026-08 werden zurückgewiesen, ebenso wie zukünftige Daten. Ein Shortlist-Eintrag, der auf einem geschätzten Datum beruht, ist genau der Fehler, den dieser Skill verhindern soll.
Notiere fetched_at und final_url für jeden bestätigten Interessenten. Der Auditor kann nicht zusehen, wie du eine Seite abrufst; diese Angaben machen eine unbelegte Behauptung aufwändiger als die korrekte Vorgehensweise.
6. Bewerten, filtern und deduplizieren
Lies references/scoring.md. Bewerte sechs Dimensionen von 0–5 anhand der geschriebenen Anker. Das Timing kommt vom Alter, gedeckelt durch die Spanne; ein benannter aktueller Auslöser erhöht die Obergrenze um eins.
pain_strength bewertet das eigene Problem des Interessenten, in der Aufgabe, die das Produkt erfüllt, in seinen eigenen Worten. Ein Problem ihrer Kunden, ein Problem, für das sie die Lösung verkaufen, oder ein Markttrend, zu dem sie kommentiert haben, erhält alles 0 Punkte. Jede Konsummarke startet Kampagnen; das ist kein Signal.
commercial_fit fragt, ob dieser Verkäufer diesen Käufer durch die Mechanik, die dieser Verkäufer hat, abschließen kann. Nicht, ob das Unternehmen groß ist. Milliardenumsätze, hundert Länder und ein veröffentlichtes Lieferantenportal sind Belege für eine Beschaffungs-Warteschlange, und für einen Self-Service- oder Gründer-geführten Verkäufer ergibt das 2 Punkte, nicht 4.
Wirf alles unter 50 weg. Leite alles in die Prüfebene um, das undatiert ist, älter als max_age_days ohne die drei still_open-Felder, in pain_strength 0 oder 1 ohne benannten trigger erreicht, in commercial_fit 0 oder 1 gegen eine benutzerangegebene Spanne erreicht, dessen einziger Kontaktweg inappropriate ist, oder dessen Unternehmen im Modus b2b oder pipeline nicht identifiziert ist. Nichts wird gelöscht; die Prüfebene zeigt jeden mit seinem Grund.
Notiere signal_type und purchase_readiness anstelle eines einzelnen Absichts-Labels. Jemand, der einen Designer einstellt, hat echte Absicht und keine Absicht, Software zu kaufen. Die beiden Labels haben Obergrenzen, die an die darunter liegenden Dimensionen gebunden sind: hiring kann nicht adjacent überschreiten, ein schmerzbasiertes Signal benötigt pain_strength von 3 für strong, strong benötigt commercial_fit von 3, und direct benötigt 4. Der Auditor setzt alle durch, denn das gemeinsame Ansteigen von Freitextfeldern ist der Weg, wie aus einer Launch-Ankündigung ein kaufbereiter Interessent wurde.
Eine Seite, die einen Freiberufler, Auftragnehmer oder Angestellten sucht, ist hiring, egal wie genau die Arbeit zum Produkt passt. Sie wählen eine Person aus, keinen Dienst, und hiring begrenzt die Bereitschaft auf adjacent. Das Einstellen einer Stellenanzeige als direct_request umgeht diese Obergrenze – so schaffte es ein Fünfzehn-Dollar-pro-Stunde-Freelance-Briefing einmal an die Spitze einer Shortlist. Das Erkennungsmerkmal liegt darin, wonach der Weg fragt: ein Portfolio, Lebenslauf, Zeugnisse oder eine Honorarliste bedeutet Einstellung; Umfang, Preis, Durchlaufzeit oder ein Testlauf bedeutet Kauf.
Dedupliziere anhand von dedupe_key. Lade ledger.json aus früheren Runs im selben Ausgabeverzeichnis und schließe aus, was es bereits aufgedeckt hat, sowie alles auf der Ausschlussliste des Benutzers.
Halte die Shortlist über Quellen verteilt: nicht mehr als die Hälfte aus einer Quellfamilie oder einer Domain. Welche Website auch immer am zuverlässigsten lädt, wird sonst den Run übernehmen, und eine Single-Source-Shortlist übernimmt die Verzerrung dieser Website.
Wenn mehr als 60 Prozent der Shortlist 80+ Punkte erreichen, wurden die Anker zu locker angelegt. Bewerte neu.
7. Wer, wo und wie erreichbar
Trenne company, person und handle. Das Unternehmen ist derjenige, der kaufen würde; die Person ist derjenige, der gepostet hat; der Handle ist ihr Plattform-Benutzername. Wenn kein Unternehmen sichtbar ist, setze company auf not identified und trage den Handle in handle ein, geschrieben wie die Plattform ihn schreibt (u/name). Die Ausgaben beginnen in diesem Fall mit dem Handle. Suche zuerst nach dem Unternehmen: Poster nennen es oft im Thread, in ihrem Profil oder in einem Link.
Gib jedem Interessenten eine channel_url: die Seite, die der Benutzer tatsächlich öffnet, um Kontakt aufzunehmen. Oft der Quellthread, manchmal ein Kontaktformular oder Profil. Öffne sie und notiere channel_evidence: ein kurzes Zitat oder die Überschrift der Seite, die zeigt, für wen der Weg gedacht ist. Ein auf der Shortlist stehender Interessent, der channel_fit: valid ohne dies beansprucht, fällt beim Audit durch.
Lieferanten- und Anbieterregistrierungsportale sind bestenfalls questionable, eine Warteschlange und kein Gespräch. Bewerber-, Presse- und Kundensupport-Wege sind inappropriate. Wenn der erste Weg, den du findest, die falsche Form hat, verwende einen weiteren Abruf, um nach dem richtigen zu suchen, bevor du den Interessenten abschreibst; große Websites vergraben die Geschäftsanfrageseite und stufen die Karriereseite höher ein.
Der Auditor liest channel_evidence, nicht nur die URL. Eine Stellenanzeige auf Reddit oder LinkedIn hat eine perfekt saubere URL und verrät sich nur durch die Worte: „Teilen Sie Ihr Portfolio und Ihren aktualisierten Lebenslauf“ ist ein Bewerbungsweg, egal wo er gehostet wird.
Lasse additional_source_urls leer, es sei denn, eine andere Seite zeigt dasselbe Signal. Es wird als „Auch gesehen auf“ dargestellt, daher würde das Eintragen der Kontaktseite dort eine Bestätigung behaupten, die nicht existiert.
Verfasse einen Eröffnungssatz pro Interessent auf der Shortlist, unter 90 Wörter, basierend ausschließlich auf der abgerufenen Seite. Sende, übermittle, verbinde, folge, kommentiere oder schreibe nicht in ein CRM, es sei denn, der Benutzer autorisiert dies separat in einem späteren Turnus.
8. Ausgaben erstellen und prüfen
Lies references/output-schema.md, schreibe run.json, dann:
python3 <skill-dir>/scripts/validate_run.py run.json
python3 <skill-dir>/scripts/build_outputs.py run.json outputs/
<skill-dir> ist das eigene Verzeichnis dieses Skills, das Verzeichnis, aus dem diese SKILL.md geladen wurde. Erstelle einen absoluten Pfad daraus. Verwende keinen relativ zum Arbeitsverzeichnis: Das Arbeitsverzeichnis ist das Projekt des Benutzers, nicht der Skill. Wenn der Host ${CLAUDE_SKILL_DIR} einsetzt, ist diese Variable genau dieses Verzeichnis.
Behebe jeden FEHLER und führe erneut aus, bis BESTANDEN ausgegeben wird. Gib die Audit-Zeile wortwörtlich in der endgültigen Antwort aus. build_outputs.py schreibt leads.csv (die operative Liste), leads-full.csv (alle Felder), report.html, brief.md und eine aktualisierte ledger.json. Behalte run.json daneben als Quelle der Wahrheit.
Ohne Python: Schreibe brief.md und leads.csv von Hand aus dem Schema und arbeite die Prüfungen des Auditors manuell ab.
9. Bericht
Gib die Audit-Zeile wortwörtlich in deiner Antwort und in brief.md zurück. Sie erscheint nicht in report.html bei einem bestandenen Run, denn ein grünes Banner mit der Aufschrift „in Ordnung“ ist nicht das, was jemand öffnet, um einen Interessentenbericht zu lesen.
Dann das Urteil, der Top-Interessent und absolute Pfade zu den Artefakten. Führe mit dem Verifizierten und Datierten an. Mache die Lücken sichtbar.
Qualitätsanspruch
- Ein Interessent ohne abgerufene Quelle ist kein Interessent. Einer ohne Datum ist kein Lead. Einer, der nicht kaufen kann, ist ein Forschungsinterview. Einer, der kein eigenes Problem genannt hat, ist ein Marktsegment.
- Ergebnisse, die aufgetaucht und nie geöffnet wurden, sind die eigentliche Ausgabe des Runs. Zähle sie und öffne diejenigen, die du überspringen wolltest.
- Ein Run, der dreißig Kandidaten untersucht und keinen auf die Shortlist gesetzt hat, ist ein gültiges Ergebnis. Berichte es klar und knapp, anstatt aufzufüllen.
- Zehn verifizierte, aktuelle Treffer sind besser als fünfzig generische.
- Berichte, wonach gesucht wurde und was nichts gefunden hat, nicht nur, was gefunden wurde.
- Personalisiere anhand der Quelle, niemals durch Erfindung.
- Bezeichne alles als Hypothese. Ein öffentliches Signal ist keine Zustimmung, kein Interesse und keine Kaufabsicht."