Community라이팅 & 에디팅github.com

atokin4/freelance-proposal-lint

프리랜서 제안서, 입찰, 또는 첫 고객 응답을 작성하거나 검토하여 마치 사람이 쓴 것처럼 보이게 하고, 플랫폼 내에서 연락을 유지하며, 사용자가 입증할 수 있는 내용만 주장하도록 돕습니다.

freelance-proposal-lint란 무엇인가요?

이 스킬은 프리랜서가 Upwork, Fiverr, Freelancer.com, PeoplePerHour, Contra, Guru 등 다양한 마켓플레이스에서 제출하는 제안서, 입찰, 또는 첫 고객 응답을 작성하고 검토하는 프로세스를 자동화합니다. Node.js 기반의 린터(`lint-cover.mjs`)를 사용하여 AI가 작성한 듯한 문구, 이맥스 대시, 이메일, 전화번호, 단어 수, 마지막 질문, 그리고 사용자의 팩트 파일에서 누락된 주장 등을 검사합니다. 이 스킬은 사용자가 입찰 또는 제안서 작성을 요청하거나, 내용을 줄이거나 확인해 달라고 하거나, '이게 AI가 쓴 것처럼 들리나요?'라고 물을 때 활용할 수 있습니다. 특히, 사용자의 경험과 기술을 담은 `facts.md` 파일을 기반으로 모든 주장을 검증하므로, 신뢰할 수 있는 제안서 작성이 가능합니다. 각 마켓플레이스의 특성에 맞춰 형식을 조정하고, 클라이언트의 스타일을 반영한 자연스러운 문장을 생성하며, 최종적으로 린터가 모든 오류를 수정할 때까지 반복 검사합니다. 이 스킬은 Claude Code, Cursor, Codex 등 다양한 AI 에이전트에서 사용할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/atokim4/cover-letter-lint/tree/HEAD/skills/freelance-proposal-lint

Installed? Explore more 라이팅 & 에디팅 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

프리랜서 제안서 린트 (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. 작성

평문 문장으로, 글머리 기호나 제목 없이 작성:

  1. 클라이언트 스타일의 인사말, 그리고 클라이언트 게시물의 구체적인 세부 사항 하나와 그 원인 또는 접근 방식을 한 문장으로. 게시물을 다시 말하지 마십시오.
  2. 팩트 파일에서 실제로 일치하는 증거 한 줄. 개인 프로젝트는 개인 프로젝트라고 표기합니다. 정직하게 일치하는 내용이 없으면 증거를 생략합니다.
  3. 한두 문장으로 된 계획. 사용자가 요금을 제시했다면 시간과 가격을 포함합니다.
  4. 범위나 가격을 변경하는 질문 하나.
  5. 사용자의 이름을 한 줄에.

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. 전달

입찰문, 명시된 가격 및 배송 시간, 린터의 마지막 줄을 보여줍니다. 그런 다음 팩트 파일과 대조하여 직접 한 번 더 읽으십시오: 린터는 링크, 연도 및 기술 이름을 확인하지만 모든 문장을 확인하지는 않습니다. 사용자가 직접 보내도록 하며, 절대 사용자를 대신하여 제출하지 마십시오.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬