프리랜서 제안서 린트 (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 brief 또는 custom offer: 구매자가 카테고리를 선택했으므로, 정확한 결과물로 시작한 다음 제공 사항과 수정 횟수를 포함하십시오.
- Contra 또는 직접 문의: 첫 메시지로 간주하고
--mode message로 린트합니다.
클라이언트를 미러링하십시오: 세 줄의 캐주얼한 메시지에는 세 줄의 캐주얼한 답변으로, 다른 언어로 작성된 메시지에는 해당 언어로 답변합니다.
3. 작성
평문 문장으로, 글머리 기호나 제목 없이 작성:
- 클라이언트 스타일의 인사말, 그리고 클라이언트 게시물의 구체적인 세부 사항 하나와 그 원인 또는 접근 방식을 한 문장으로. 게시물을 다시 말하지 마십시오.
- 팩트 파일에서 실제로 일치하는 증거 한 줄. 개인 프로젝트는 개인 프로젝트라고 표기합니다. 정직하게 일치하는 내용이 없으면 증거를 생략합니다.
- 한두 문장으로 된 계획. 사용자가 요금을 제시했다면 시간과 가격을 포함합니다.
- 범위나 가격을 변경하는 질문 하나.
- 사용자의 이름을 한 줄에.
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" 대비 구조, 이맥스 대시, [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. 전달
입찰문, 명시된 가격 및 배송 시간, 린터의 마지막 줄을 보여줍니다. 그런 다음 팩트 파일과 대조하여 직접 한 번 더 읽으십시오: 린터는 링크, 연도 및 기술 이름을 확인하지만 모든 문장을 확인하지는 않습니다. 사용자가 직접 보내도록 하며, 절대 사용자를 대신하여 제출하지 마십시오.