Freelance proposal lint(フリーランス提案書リンター)
目標:どのマーケットプレイスであっても、クライアントが最後まで読み、返信したくなるような短い入札を作成すること。そして、すべての主張はユーザー自身の事実ファイルに基づいていること。
リンターは、このスキルのフォルダ内の scripts/lint-cover.mjs です(Node 20以上、依存関係なし、ネットワーク不要)。このファイルは、同じリポジトリの cover-letter-lint スキルと同じもので、このスキルが単体でインストールできるようにここにも同梱されています。呼び出す際は、Claude Codeでは node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs のようにフルパスで指定し、他のエージェントではスキルのフォルダからの相対パス(例:node .claude/skills/freelance-proposal-lint/scripts/lint-cover.mjs)を使用します。
1. まず事実を確認する
facts.md、me/facts.md、または "facts" パスを含む .cover-lint.json を探します。主張はそこからのみ取得します。見つからない場合は、このスキルのフォルダにある templates/facts.md をユーザーと一緒に記入することを提案します(スキル、役割、実績はプロフィールと完全に一致させること、証拠リンク、絶対に使わないフレーズ)。ユーザーの情報をでっち上げてはいけません。ユーザーが入力を拒否した場合は、--facts オプションなしでリンターを実行し、主張がチェックされなかったことをユーザーに伝えます。
2. フォーマットをサイトに合わせる
ユーザーがマーケットプレイスを指定していない場合は、どれかを尋ねます。その後、以下のルールに従います:
- Upwork: 50〜90語のカバーレターと、任意のスクリーニング質問への回答。各スクリーニング質問には、質問された順番に直接回答すること。
- Freelancer.com、PeoplePerHour、Guru: 入札は価格と納期とともに並べて比較されます。具体的なアプローチを最初の行に記載し、テキスト内の価格と日数がユーザーが入札フォームに入力する数値と一致することを確認します。
- Fiverrのブリーフまたはカスタムオファー: バイヤーがカテゴリを選択しているため、バイヤーが求める正確な成果物で始め、次にオファーに含まれるものと修正回数を記載します。
- Contraまたは直接の問い合わせ: 最初のメッセージとして扱い、
--mode messageオプションでリンターを実行します。
クライアントのスタイルにミラーリングします。クライアントがカジュアルな3行を送ってきたら、こちらもカジュアルな3行で返します。クライアントが別の言語で書いてきた場合は、その言語で返します。
3. 執筆する
箇条書きや見出しは使わず、平易な文章で書きます:
- クライアントのスタイルに合わせた挨拶、次にクライアントの投稿の中の具体的な1つの詳細と、その原因と思われることや、あなたならどうアプローチするかを書きます。投稿を繰り返してはいけません。
- 事実ファイルから、本当にマッチする1行の証拠を書きます。個人プロジェクトは個人プロジェクトと明記します。正直にマッチするものがない場合は、証拠の行は省きます。
- 1〜2文で計画を書き、ユーザーがレートを教えている場合は時間と価格も含めます。
- 1つの質問を書きます。それは、スコープや価格を変えるような回答が得られる質問です。
- ユーザーのファーストネームを独立した行に書きます。
4. リンターでチェックし修正する
node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs --facts facts.md --job job.md bid.md
- は標準入力からの読み込み、--mode message は返信用の文字数範囲を無効に、--json は機械可読な出力を意味します。すべてのエラーを修正し、終了コード0で終了するまで再実行します。警告も、理由がない限り修正し、その理由を説明します。
入札を失敗させるもの(エラー): テンプレート的なフレーズ("I hope this finds you well"、"seamless"、"I'm excited to")、"not just X, but Y" のような対比、emダッシュ、[Your Name] のようなプレースホルダー、メールアドレス、電話番号や "message me on WhatsApp"(ほとんどのマーケットプレイスでは契約前にサイト外に連絡を持ち出すことを禁止しています)、リンク、事実ファイルで裏付けられていない "N years"、"Never say" にリストされているフレーズ、カバーレターモードで90語を超える場合。警告は、事実ファイルにも投稿にも含まれていない技術名、質問がないか複数ある場合、箇条書き、"Dear Sir"、"!!"、絵文字、非常に長い文などを対象とします。プロジェクトごとの調整は .cover-lint.json で行います:
{"facts": "facts.md", "maxWords": 90, "minWords": 50, "extraPhrases": [], "allowPhrases": [], "disable": []}。
ユーザーが事実であると言っていないのに、主張を通すために事実ファイルを編集してはいけません。
5. 最終確認と引き渡し
提案書、そこに記載されている価格と納期、リンターの最終行を表示します。その後、自分自身で事実ファイルと照らし合わせてもう一度読み返します。リンターはリンク、年数、技術名をチェックしますが、すべての文をチェックするわけではありません。ユーザーが送信します。ユーザーの代わりに何かを送信してはいけません。