Freelance-Angebots-Prüfung (Proposal Lint)
Ziel: Ein kurzes Angebot, das der Kunde bis zum Ende liest und beantwortet – egal auf welchem Marktplatz die Stelle ausgeschrieben ist – und bei dem jede Behauptung durch die persönliche Fakten-Datei des Nutzers gestützt wird.
Der Linter ist scripts/lint-cover.mjs im Ordner dieses Skills (Node 20+, keine Abhängigkeiten, kein Netzwerkzugriff). Es ist dieselbe Datei wie im cover-letter-lint-Skill dieses Repos, wird aber hier mitgeliefert, damit das Skill eigenständig installierbar ist. Rufe es mit seinem vollständigen Pfad auf: node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs in Claude Code, oder mit dem entsprechenden Skill-Ordner in anderen Agenten, z. B. node .claude/skills/freelance-proposal-lint/scripts/lint-cover.mjs.
1. Zuerst die Fakten
Suche nach facts.md, me/facts.md oder einer .cover-lint.json mit einem "facts"-Pfad. Behauptungen dürfen nur von dort stammen. Nichts gefunden: Biete an, gemeinsam mit dem Nutzer templates/facts.md aus dem Skill-Ordner auszufüllen (Fähigkeiten, Rollen, Erfolge genau wie im Profil, Beleg-Links, nie zu verwendende Phrasen). Erfinde nichts davon. Lehnt der Nutzer ab, führe den Linter ohne --facts aus und teile ihm mit, dass Behauptungen nicht geprüft wurden.
2. Format an die Plattform anpassen
Frage nach dem Marktplatz, falls der Nutzer ihn nicht genannt hat. Dann:
- Upwork: Ein Anschreiben mit 50-90 Wörtern plus etwaige Screening-Fragen. Beantworte jede Screening-Frage direkt in der gestellten Reihenfolge.
- Freelancer.com, PeoplePerHour, Guru: Angebote werden nebeneinander mit Preis und Lieferzeit verglichen. Setze den konkreten Ansatz in die erste Zeile und stelle sicher, dass die Preise und Tage im Text mit den Zahlen übereinstimmen, die der Nutzer im Angebotsformular einträgt.
- Fiverr Brief oder kundenspezifisches Angebot: Der Käufer hat eine Kategorie gewählt. Beginne daher mit dem genauen von ihm gewünschten Liefergegenstand, dann dem Angebotsinhalt und der Anzahl der Überarbeitungen.
- Contra oder eine direkte Anfrage: Behandle es als erste Nachricht; prüfe mit
--mode message.
Spiegle den Kunden wider: Drei lockere Zeilen bekommen drei lockere Zeilen zurück, eine andere Sprache erhält dieselbe Sprache.
3. Schreiben
Klare Sätze, keine Aufzählungen oder Überschriften:
- Eine Begrüßung im Stil des Kunden, dann ein konkretes Detail AUS DESSEN BEITRAG und was es wahrscheinlich verursacht oder wie du es angehen würdest. Wiederhole den Beitrag nicht.
- Ein Belegsatz aus der Fakten-Datei, der wirklich passt. Ein persönliches Projekt wird als persönliches Projekt bezeichnet. Keine ehrliche Übereinstimmung: Lass den Beleg weg.
- Der Plan in ein oder zwei Sätzen, mit Stunden und einem Preis, falls der Nutzer einen Stundensatz genannt hat.
- Eine Frage – diejenige, deren Antwort den Umfang oder den Preis ändert.
- Der Vorname des Nutzers in einer eigenen Zeile.
4. Prüfen und korrigieren
node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs --facts facts.md --job job.md bid.md
- liest von der Standardeingabe, --mode message entfernt den Wortbereich für Antworten, --json liefert maschinenlesbare Ausgabe. Behebe jeden Fehler und führe den Linter erneut aus, bis er mit Exit-Code 0 beendet wird. Behebe auch Warnungen, es sei denn, es gibt einen Grund dagegen – und nenne den Grund.
Was ein Angebot scheitern lässt (Fehler): Vorlagenphrasen ("Ich hoffe, diese Nachricht erreicht Sie gut", "nahtlos", "Ich freue mich sehr"), "nicht nur X, sondern Y"-Gegensätze, Em-Dashes, Platzhalter wie [Ihr Name], E-Mails, Telefonnummern oder "schreiben Sie mir auf WhatsApp" (die meisten Marktplätze verbieten es, den Kontakt vor Vertragsabschluss von der Plattform zu verlagern), Links sowie "N Jahre", die die Fakten-Datei nicht belegt, Phrasen unter "Niemals sagen" und mehr als 90 Wörter im Anschreiben-Modus. Warnungen betreffen Technologienamen, die weder in den Fakten noch im Beitrag vorkommen, eine fehlende oder zweite Frage, Aufzählungen, "Sehr geehrte Damen und Herren", "!!", Emojis und sehr lange Sätze. Projektspezifische Anpassungen erfolgen in .cover-lint.json:
{"facts": "facts.md", "maxWords": 90, "minWords": 50, "extraPhrases": [], "allowPhrases": [], "disable": []}.
Ändere niemals die Fakten-Datei, um eine Behauptung durchgehen zu lassen, ohne dass der Nutzer bestätigt, dass sie wahr ist.
5. Übergeben
Zeige das Angebot, den darin genannten Preis und die Lieferzeit sowie die letzte Zeile des Linter-Ergebnisses. Lies es dann selbst noch einmal gegen die Fakten-Datei: Der Linter prüft Links, Jahre und Technologienamen, nicht jeden Satz. Der Nutzer sendet es ab; sende niemals etwas in seinem Namen.