カバーレター リンター
目標:多忙なクライアントが最後まで読んで返信したくなる50〜90語のカバーレターを作成すること。すべての主張はユーザー自身の事実ファイルに基づいていなければなりません。
リンターは、このスキルフォルダ内の scripts/lint-cover.mjs です(Node 20以上、依存関係なし)。フルパスで呼び出してください:node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs(Claude Code、プラグインインストールの場合)。他のエージェントではこの変数が設定されないため、プロジェクトインストールの場合は .claude/skills/cover-letter-lint/scripts/lint-cover.mjs、グローバルインストールの場合は ~/.claude/skills/cover-letter-lint/scripts/lint-cover.mjs のようにフォルダを指定してください。
1. 事実ファイルを探す
カレントプロジェクト内で facts.md、me/facts.md、または "facts" パスを含む .cover-lint.json を探します。
- 見つかった場合:内容を読みます。主張はここからのみ引用します。
- 見つからなかった場合:このスキルフォルダの
templates/facts.mdからfacts.mdを作成することを提案し、ユーザー(スキル、役割、実績、証明リンク、絶対に言ってはいけないこと)を記入してもらいます。内容を勝手に創作してはいけません。ユーザーが拒否した場合、--factsなしでリンターを実行し、主張がチェックされなかったことを伝えます。
2. 執筆する(ユーザーが既に下書きを持っている場合はスキップ)
ユーザーが案件投稿を貼り付けた場合は、ファイルに保存します(例:job.md)。その後、箇条書きや見出しを使わず、平易な文章で以下のように書きます:
- クライアントのスタイルに合わせた挨拶の後、クライアントの投稿から具体的な詳細(バグ、スタック、締切)を一つ挙げ、その原因やあなたのアプローチを述べます。投稿をそのまま言い換えてはいけません。
- 事実ファイルから、本当に合致する証拠を一行(類似案件、役割、デモリンクなど)。個人プロジェクトは個人プロジェクトと明記します。正直に合致するものがない場合は、証拠を省きます。
- 計画を一文か二文で、ユーザーがレートを教えている場合は時間と価格を含めます。
- 質問を一つ。スコープや価格を変えるような質問を選びます。
- ユーザーの名を独立した行に。
投稿に合わせます:カジュアルな3行の投稿にはカジュアルな3行で返し、別の言語の投稿にはその言語で返します。
3. リンターを実行し修正する
node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs --facts facts.md --job job.md proposal.md
(- は標準入力から読み取ります。--mode message はクライアントへの返信モード(語数範囲チェックなし)。--json は機械可読出力。)
すべてのエラーを修正し、終了コード0になるまで再実行します。警告は、修正しない理由がある場合を除き修正し、その理由を説明します。unlisted-skill 警告の場合は、主張を削除するか、ユーザーにそのスキルを事実ファイルに追加してよいか尋ねます。主張を通すために事実ファイルを、ユーザーが真実だと認めていないのに編集してはいけません。
| ルール | レベル | 検出内容 |
|---|---|---|
| ai-phrase | エラー | 約75のテンプレートフレーズ:「I hope this finds you well」「seamless」「I'm excited to」「the key is」… |
| not-x-but-y | エラー | 「This is not just X, but Y」スタイルの対比 |
| dash | エラー | emダッシュおよびそれに類するダッシュの使用 |
| placeholder | エラー | [Your Name]、{{name}}、<client>、TODO、lorem ipsum |
| off-platform | エラー | メールアドレス、電話番号、「WhatsAppで連絡を」、マーケットプレイス外での支払い |
| unbacked-claim | エラー | 事実ファイルにないリンクや「N年の経験」 |
| never-say | エラー | 事実ファイルの「絶対に言わないこと」リストにあるフレーズ |
| word-count | エラー/警告 | 90語超過(エラー)、50語未満(警告)※カバーレターモード |
| unlisted-skill | 警告 | カバーレターに記載されているが、事実ファイルにも案件投稿にもないフレームワークやサービス |
| question | 警告 | 質問がない、または複数ある |
| list、greeting、exclamation、emoji、long-sentence、i-start | 警告 | リスト、「Dear Sir」、「!!」、絵文字、35語以上の文、「I」で始まる文が多すぎる |
プロジェクトごとの調整は .cover-lint.json で行います(すべてのキーはオプション):
{"facts": "facts.md", "maxWords": 90, "minWords": 50, "extraPhrases": [], "allowPhrases": [], "disable": []}
4. 引き渡す
レターとリンターの最終出力行を表示します。価格と選んだ質問を明記し、ユーザーが変更できるようにします。その後、自身で事実ファイルと照らし合わせてもう一度読み直します。リンターはリンク、年数、技術名をチェックしますが、すべての文をチェックするわけではありません。ユーザーが送信します。代わりに何かを投稿してはいけません。