⏳ This skill is pending AI review.
Scores will appear once the review pipeline completes.
jasoseo
Use when the user is writing a Korean job application cover letter (자기소개서, 자소서) - analyzing a 문항, interviewing the user to draw out their own experiences, keeping a reusable experience bank (jasoseo/stories.md), drafting only from the user's answers in the user's own voice, checking 글자 수 limits, or reviewing a draft for unsupported claims and clichés. Triggers include /jasoseo, "자소서 써줘", "자기소개서 문항", "자소서 글자 수", "자소서 첨삭".
Choose how to use this skill
You do not need every option. Choose the path your AI client supports. The stable page stays the same; versioned files are immutable.
1. Native installer
This listing has no registered native installer command. Use the complete package or source fallback below, depending on what your client supports.
Do not guess an installer command or replace an existing version without reviewing the diff.
2. Complete package recommended
Download the ZIP when available. It includes SKILL.md plus the references, security notes and version metadata.
No complete ProSkills package is published for this listing yet.3. Prompt-only
Copy the prompt above when the agent can read the stable page or when you want to adopt the workflow without installing a skill.
Need only the instruction file?
Download SKILL.md only if your client requires a single file. The complete ZIP is safer for a full installation because it preserves the references and release context.
No path installs or executes anything by itself. Your agent still needs access to the project files. Before updating, compare the installed version and review the diff.
// RATINGS
// README
stop-slop-ko
한국어 실무문서에서 "AI가 쓴 티"를 걷어내는 Claude Code 스킬.
회의록, 보고서, 제안서, 메일, pptx/docx/xlsx를 Claude에게 맡기면 em-dash(—), 공백 가운뎃점 나열(·), ★와 이모지, ~을 통하여 같은 번역투가 섞여 나옵니다. 이 스킬은 그런 문장을 처음부터 쓰지 않게 하고, 이미 쓴 문서는 내용을 건드리지 않고 문장부호와 번역투만 고칩니다.
hardikpandya/stop-slop(영어)의 한국어판입니다. 규칙을 그대로 옮기지 않고 한국어 개조식 문서에 맞게 다시 만들었습니다.
English summary: Korean version of stop-slop. A Claude Code plugin that keeps AI tells (em-dashes, spaced middot lists, decorative emoji, translationese) out of Korean business documents, with a scanner for docx/pptx/xlsx/md. See English below.
Before / After
- 본 과제는 사내 도서 대여 앱의 검색 구조를 개선하여 사용 편의성을 제고하고 — 대여 절차를 간소화하는 것을 목표로 함.
+ 사내 도서 대여 앱의 검색 구조를 바꿔 쓰기 편하게 하고 대여 절차를 줄이는 것을 목표로 함.
- - ★ 검색 속도 개선 · 예약 기능 추가 · 반납 알림 강화
+ - 검색 속도 개선, 예약 기능 추가, 반납 알림 강화
- - 기존 화면 대비 메뉴 구성이 상이하여 사용자 안내가 필요함
+ - 메뉴 구성이 기존 화면과 달라 사용자 안내가 필요함
- - 새 검색 엔진을 통하여 3,000 권 목록을 1초 안에 조회 가능해짐 ✅
+ - 새 검색 엔진으로 3,000권 목록을 1초 안에 조회 가능
- - 대여 기록 관리에 있어서 확인 절차가 추가되어짐
+ - 대여 기록 확인 절차 추가됨
- - React 와 SQLite 를 사용함
+ - React와 SQLite를 사용함
- 이번 개선은 사내 독서 문화 활성화의 핵심이라 할 수 있다.
+ 이번 개선으로 사내 도서를 찾고 빌리기가 쉬워짐.
포함된 스캐너 slop_scan.py로 두 문서를 검사한 결과입니다. 문서 원본은 examples/에 있고, 출력에서 항목별 조치 안내 줄은 생략했습니다.
== before.md: WARN 9, INFO 1
[WARN] EMDASH @ L5: …검색 구조를 개선하여 사용 편의성을 제고하고 — 대여 절차를 간소화하는 것을 목표로 함.
[WARN] STAR @ L9: - ★ 검색 속도 개선 · 예약 기능 추가 · 반납…
[WARN] MIDDOT_SPACED2 @ L9: - ★ 검색 속도 개선 · 예약 기능 추가 · 반납 알림 강화
[INFO] TL_DAEBI_SANGI @ L10: - 기존 화면 대비 메뉴 구성이 상이하여 사용자 안내가 필요함
[WARN] EMOJI @ L11: …,000 권 목록을 1초 안에 조회 가능해짐 ✅
[WARN] TL_TONGHAYEO @ L11: - 새 검색 엔진을 통하여 3,000 권 목록을 1초 안에 조회 가능해…
[WARN] TL_ISSEO @ L12: - 대여 기록 관리에 있어서 확인 절차가 추가되어짐
[WARN] TL_DOEEOJI @ L12: - 대여 기록 관리에 있어서 확인 절차가 추가되어짐
[WARN] PARTICLE_SPACE @ L13: - React 와 SQLite 를 사용함
[WARN] TL_HALSUITDA @ L17: 이번 개선은 사내 독서 문화 활성화의 핵심이라 할 수 있다.
RESULT: FAIL (WARN 9)
== after.md: WARN 0, INFO 0
RESULT: PASS (WARN 0)
영어판 규칙을 그대로 쓰면 안 되는 이유
영어 stop-slop은 "능동태로, 짧게, 직설적으로"를 권합니다. 이걸 한국어 보고서에 그대로 적용하면 정의함이 정의한다로 바뀌고, 오히려 더 어색해집니다.
~함/~됨개조식은 슬롭이 아닙니다. 한국 공식문서의 정상 문체입니다. 정제 모드는 종결어미를 절대 바꾸지 않습니다.- 한국어 슬롭의 신호는 문장부호, 번역투, 상투구입니다. em-dash, 공백 가운뎃점 나열,
★,~에 있어서,~되어지다, 조사 앞 공백(React 와) 같은 것들입니다. - 영어판의 "3항목 나열 금지", "not X but Y 금지"는 한국어 요구사항·스펙 열거에 쓰지 않습니다. 그건 문체가 아니라 내용입니다.
- 붙임 복합어는 보존합니다.
성능·품질,원천·대상의 가운뎃점은 나열 구분자가 아닙니다.
들어 있는 것
이 저장소는 Claude Code 플러그인 마켓플레이스이고, 플러그인 세 개가 들어 있습니다. 필요한 것만 설치하면 됩니다.
| 플러그인 | 하는 일 |
|---|---|
| stop-slop-ko | 한국어 문서를 쓸 때(생성), 다듬을 때(정제), 다른 문서 톤에 맞출 때(톤 맞춤) 문체 규칙을 적용. 리포트, 에세이, 블로그 같은 서술형 글도 다룸. 스캐너와 자동 적용 훅 포함 |
| stakeholder-brief | 설계서, 분석 문서, 진행 현황을 경영진, 고객 PM, 타팀 개발자 등 정해진 청중 눈높이로 다시 구성해 HTML/DOCX/MD로 출력. 마지막 문체 정리는 stop-slop-ko에 맡김 |
| jasoseo | 자소서를 대신 지어 쓰지 않고, 인터뷰로 본인 경험을 꺼내 경험 은행에 모은 뒤 본인 말투로 초안을 씀. 글자 수 계산기 포함 |
stop-slop-ko
세 가지 모드가 있습니다.
- 생성 모드: 회의록, 보고서, 메일을 새로 쓸 때 처음부터 규칙대로 씁니다. 파일을 만든 뒤 스캐너로 검사하고 결과를
PASS/FAIL로 보고합니다. - 정제 모드: 이미 있는 문서에서 부호, 번역투, 상투구만 고칩니다. 숫자, 요구사항 번호, 기술용어, 종결어미는 그대로 둡니다.
- 톤 맞춤 모드: 동료가 쓴 다른 장이나 기존 승인 문서의 문체(종결어미, 부호, 목록기호 등 6가지 축)를 뽑아 내 글을 거기에 맞춥니다.
스캐너 slop_scan.py: docx(본문, 표, 머리글, 각주), pptx(슬라이드 순서, 표), xlsx(셀, 도형), md, txt, html을 문단 단위로 검사합니다. 파이썬 표준 라이브러리만 씁니다.
python plugins/stop-slop-ko/skills/stop-slop-ko/scripts/slop_scan.py 보고서.docx --info
- exit 0 = PASS, 1 = FAIL(WARN 있음), 2 = 입력 오류
- 상투구, 과한 명사화, 기계적인 3단 병렬은 스캐너가 못 잡습니다. 그 부분은 스킬이 읽고 판단합니다.
내가 쓴 글 다듬기: 리포트, 과제, 에세이, 블로그 글, 칼럼처럼 문단으로 이어 쓰는 글도 같은 세 모드로 다룹니다. 개조식으로 바꾸지 않고 문단 서술을 유지하며, 다듬을 때 ~다와 ~습니다 같은 종결어미는 그대로 둡니다. 서술형 글에 자주 끼는 상투구를 걷어냅니다.
| 전 | 후 |
|---|---|
| 오늘은 Docker 볼륨에 대해 알아보겠습니다. 정말 많은 분들이 헷갈려 하시는 부분입니다. | (삭제) 본론 "컨테이너를 지우면 안에 쓴 파일도 함께 사라집니다."부터 시작 |
| 기록이 남으면서 결정이 뒤집히는 일이 줄었다고 생각한다. … 이번 경험을 통해 소통의 중요성을 깨달았다. | 기록이 남으면서 결정이 뒤집히는 일이 줄었다. |
스캐너에 --prose를 붙이면 서술형 신호도 검사합니다.
python plugins/stop-slop-ko/skills/stop-slop-ko/scripts/slop_scan.py 리포트.md --prose --info
- INFO(위치만 알림): 교훈형 마무리("~의 중요성을 깨달았다"), "단순한 ~이 아닌"·"~에 그치지 않고", 명언으로 시작하는 첫 문단, 빈 강조어("정말", "매우"), 리포트·블로그 상투구
- WARN(글 전체 기준): "~라고 생각한다"(생각된다·생각이 든다·본다 포함)가 3회 이상이면서 1,000자당 1회 이상, 연결어("또한", "나아가")로 시작하는 문단이 3개 이상이면서 전체 문단의 25% 이상. 긴 글일수록 기준이 올라가서 정상적인 빈도는 걸리지 않습니다
- 사실, 수치, 출처를 지어내지 않습니다. 고칠 문장에 근거가 없으면 지우거나 묻습니다
자동 적용 훅: "회의록 만들어줘", "보고서 pptx로", "AI 티 빼줘" 같은 요청을 감지하면 스킬을 쓰라고 Claude에게 알려 줍니다. "경영진용", "공유용", "브리프"처럼 청중이 정해진 요청이면 stakeholder-brief를 먼저 쓰라고 안내합니다. "리포트 써줘", "블로그 글 다듬어줘" 같은 서술형 요청이면 서술형 문체로 안내합니다. 자소서 요청은 jasoseo가 설치돼 있으면 jasoseo에 맡기고, 없으면 서술형 글로 다룹니다. 요청에 "stop-slop 빼고"나 "원문 그대로"를 넣으면 끼어들지 않습니다.
stakeholder-brief
- 청중 4종(경영진/스폰서, 고객 PM, 저년차·타팀 개발자, 고객 개발자)별로 전문용어를 얼마나 풀지, 어디까지 부록으로 내릴지 정합니다.
- 문서 유형은 두 가지입니다. 진행과 합의를 전하는 합의형(요약 → 현황 → 합의된 결정 → 미결 → 다음 단계), 도구나 절차를 알려 주는 가이드형(한눈에 보기 → 왜 필요한가 → 설치 → 사용 예시 → 한계)입니다.
- 원문에 없는 진척률, 일정, 결정은 지어내지 않습니다. 없으면 "미정", "확인 필요"로 남깁니다.
jasoseo
자소서를 Claude에게 통째로 맡기면 누구나 쓸 수 있는 글이 나옵니다. 기업이 거르는 글이 바로 그런 글입니다. jasoseo는 반대로 갑니다.
- 인터뷰: 문항 유형(지원동기, 성장과정, 직무역량, 갈등·실패, 입사 후 포부)에 맞춰 한 번에 1~2개씩 묻습니다. "열심히 했다", "소통했다" 같은 답에는 "예를 들면요?"로 다시 묻습니다.
- 경험 은행: 답은 작업 폴더의
jasoseo/stories.md에 경험 카드로 쌓입니다. 다음 회사 자소서에서 다시 꺼내 씁니다. - 초안: 카드에 있는 사실과 본인이 한 말로만 씁니다. 카드에 없는 숫자나 역할은 만들지 않고
[확인 필요: ...]로 비워 둡니다. - 글자 수:
count.py가 공백 포함, 공백 제외, 바이트까지 셉니다. 초안은 제한의 90~100%에 맞춥니다. - 점검 리포트: 근거 없는 문장, 뻔한 문장, 문체 문제를 짚습니다.
[점검] A사 백엔드 2번
- 글자 수: 공백 포함 662/700자 (94%), 범위 안
- 근거 없는 문장: 3문단 "팀을 이끌며" (S03에 리더 역할 없음)
- 확인 필요: 1곳 (기능 추가를 원한 팀원 수)
- 뻔한 문장: "소통의 중요성을 깨달았습니다" (S03의 본인 말로 바꾸기 제안)
- 문체: 위반 없음
AI 검사기를 피하는 도구가 아닙니다. 본인 경험과 말투로 쓴 글이 면접까지 버팁니다. stop-slop-ko 없이 혼자 동작합니다.
설치
Claude Code 입력창에 한 줄씩 입력합니다.
1단계. 마켓플레이스 등록 (필수, 한 번만)
이 저장소를 플러그인 목록으로 등록합니다. 아직 아무것도 설치되지 않습니다.
/plugin marketplace add leeandev/stop-slop-ko
2단계. 필요한 플러그인 설치 (골라서)
| 이렇게 쓰려면 | 설치할 것 |
|---|---|
| 한국어 문서의 AI 티만 빼고 싶다 (대부분 이것) | stop-slop-ko만 |
| 경영진용, 고객 PM용 같은 공유 문서도 만들고 싶다 | 둘 다 |
| 자소서를 쓰려고 한다 | jasoseo (단독으로 동작) |
stop-slop-ko 설치 (기본):
/plugin install stop-slop-ko@stop-slop-ko
stakeholder-brief 설치 (공유 문서도 만들 때만 추가):
/plugin install stakeholder-brief@stop-slop-ko
jasoseo 설치 (자소서를 쓸 때):
/plugin install jasoseo@stop-slop-ko
stakeholder-brief만 따로 설치해도 동작은 하지만, 마지막 문체 정리를 stop-slop-ko에 맡기도록 만들어져 있어서 둘 다 설치하는 것을 권장합니다.
설치가 끝나면 Claude Code를 재시작합니다. /plugin을 열면 설치된 플러그인을 확인할 수 있습니다.
요구 사항
- 스캐너와 훅: Python 3.8 이상(macOS/Linux는
python3, Windows는python을 찾아 씁니다) - 자동 적용 훅은
sh로 실행됩니다. Windows는 Git Bash가 필요합니다(Git for Windows에 포함). Git Bash가 없으면 훅만 동작하지 않고, 스킬과 스캐너는 그대로 쓸 수 있습니다 - pptx 정제 레시피:
pip install python-pptx - DOCX 출력:
pip install python-docx
사용 예
주간 회의록 docx로 만들어줘. 녹취는 meeting.txt
이 제안서 3장 AI 티 빼줘
이 블로그 글 다듬어줘. 파일은 post.md
14~17장을 1~13장 톤에 맞춰줘
이 설계 문서 경영진용 1페이지 브리프로 정리해줘
/stop-slop-ko:stop-slop-ko 보고서.md
자소서 써줘. A사 백엔드 2번 문항, 공백 포함 700자
/jasoseo:jasoseo
플러그인 스킬은 플러그인:스킬 이름으로 직접 부릅니다(/stop-slop-ko:stop-slop-ko, /stakeholder-brief:stakeholder-brief). 대부분은 위처럼 평소 말투로 요청하면 알아서 쓰입니다.
English
stop-slop-ko is a Claude Code plugin marketplace with three plugins for Korean business writing.
- stop-slop-ko: removes AI tells from Korean documents. It has three modes: write (generate clean text from the start), de-slop (fix punctuation and translationese only, without touching facts or sentence endings), and tone-match (copy the style signature of a reference document). It also handles prose (reports, essays, blog posts, columns) without changing the sentence endings the author chose. It ships with
slop_scan.py, a stdlib-only scanner for docx/pptx/xlsx/md/txt/html (--proseadds length-aware checks for prose clichés), and a prompt hook that routes document requests to the skill. - stakeholder-brief: rewrites dev material (design docs, status, analyses) for one audience at a time (executi
// HOW IT'S BUILT
// FILES
7 files shipped with this skill. Inline text is the catalog copy. The upstream link is the source repository.
plugins/jasoseo/skills/jasoseo/SKILL.md4.1 KBb61689eec65eupstream ↗
--- name: jasoseo description: Use when the user is writing a Korean job application cover letter (자기소개서, 자소서) - analyzing a 문항, interviewing the user to draw out their own experiences, keeping a reusable experience bank (jasoseo/stories.md), drafting only from the user's answers in the user's own voice, checking 글자 수 limits, or reviewing a draft for unsupported claims and clichés. Triggers include /jasoseo, "자소서 써줘", "자기소개서 문항", "자소서 글자 수", "자소서 첨삭". --- # jasoseo 자소서를 대신 지어 쓰지 않는다. 질문으로 지원자 본인의 경험을 꺼내 경험 카드로 모으고, 카드에 있는 사실과 본인 말투로만 초안을 쓴다. ## 핵심 원칙 1. **사실은 카드에서만.** 카드에 없는 경험, 숫자, 역할은 만들지 않고 `[확인 필요: ...]`로 남긴다. 2. **본인 말투.** 사용자가 한 말을 원문 그대로 카드에 남기고 초안에서 살린다. 3. **글자 수는 스크립트로.** `count.py`로 잰다. 짐작으로 세지 않는다. ## 흐름 1. **입력**: 회사, 직무, 문항 원문, 글자 수 제한. 빠진 것만 묻는다. 채용공고를 주면 직무 키워드를 뽑아 둔다. 2. **문항 분석**: `references/question-bank.md`의 "문항 유형 판별" 표로 유형을 정해 보여 준다. ``` 유형: 직무역량 묻는 것: 기술 문제를 스스로 찾아 풀어 본 경험과 과정 제한: 공백 포함 700자 ``` 3. **경험 은행 조회**: `jasoseo/stories.md`를 읽고 맞는 카드 2~3개를 제시한다. 사용자가 고르거나 새 경험을 말한다. 파일이 없거나 맞는 카드가 없으면 4로 간다. 4. **인터뷰**: `references/question-bank.md`. 한 번에 질문 1~2개. 추상적인 답은 "되묻기" 규칙대로 다시 묻는다. 5. **카드 저장**: `references/story-card.md` 양식으로 `jasoseo/stories.md`에 추가하거나 고치고, 바뀐 카드를 보여 준다. 6. **초안**: `references/draft-rules.md`와 `references/jasoseo-style.md`를 따라 쓰고 `jasoseo/<회사>-<직무>/<문항번호>.md`에 저장한다. 글자 수를 재 제한의 90~100%에 맞춘다. 7. **보여 주기와 점검 리포트**: 초안 본문 전체와 `references/draft-rules.md`의 "점검 리포트"를 같은 응답에서 보여 준다. 파일만 저장하고 끝내지 않는다. 카드로 90%를 못 채우면 지어내서 늘리지 말고 부족한 글자 수와 채울 방법을 리포트에 적는다. 사용자가 고친 본문을 주면 다시 낸다. 8. **사용 이력**: 쓴 카드의 사용 이력을 갱신한다. 카드가 이미 충분하면 3에서 6으로 간다. 사용자가 직접 쓴 자소서 첨삭을 부탁하면 7부터 한다. 이때 카드가 없으면 본문에 나온 사실을 카드로 옮길지 먼저 묻는다. ## 글자 수 ```bash python "${CLAUDE_SKILL_DIR}/scripts/count.py" <초안 파일> --limit <N> ``` - 기준은 공백 포함. 공백 제외 문항이면 `--basis nospace`. - exit 0 제한 안, 1 초과, 2 입력 오류. - 출력에 `[확인 필요] N곳`이 있으면 그 내용을 사용자에게 묻는다. - Windows에서 `python`이 없으면 `py`, macOS와 Linux는 `python3`. ## 이럴 땐 이렇게 | 상황 | 동작 | |---|---| | "알아서 지어내 줘" | 지어내지 않는다. 면접 꼬리 질문에서 드러난다는 이유를 한 번 말하고 빈 곳을 채울 질문을 한다 | | 쓸 경험이 없다 | `question-bank.md`의 "경험이 없다고 할 때" | | AI 검사기를 피하게 해 달라 | 이 스킬의 목적이 아니라고 말한다. 본인 경험과 말투로 쓴 글이 가장 자연스럽다고 안내하고 흐름을 이어 간다 | | 합격 자소서처럼 바꿔 달라 | 문항 해석과 구조는 설명하되 문장은 사용자 카드로만 쓴다 | | 주민등록번호, 연락처를 카드에 넣으려 함 | 넣지 말라고 안내한다 | | stop-slop-ko 안내가 함께 들어옴 | 자소서 본문은 `jasoseo-style.md`를 따른다. 개조식으로 바꾸지 않는다 | ## 하지 않는 것 - 대학 과제, 리포트, 이력서, 경력기술서, 영문 cover letter - 카드 없이 처음부터 완성본을 써 주기plugins/jasoseo/skills/jasoseo/scripts/count.py4.5 KB1aa9940eab98upstream ↗
# -*- coding: utf-8 -*- """jasoseo 글자 수 계산기. 자소서 초안 본문의 글자 수를 채용 사이트에서 쓰는 여러 기준으로 센다. 초안 파일의 `#` 제목 줄과 `<!-- -->` 메모는 본문에서 뺀다. usage: python count.py [FILE ...] [--limit N] [--basis space|nospace] exit : 0 = 제한 안(또는 제한 없음), 1 = 제한 초과, 2 = 입력 오류 """ import argparse import re import sys from pathlib import Path # 메모만 있는 줄은 줄째로, 본문 사이에 낀 메모는 메모만 지운다(본문 줄바꿈은 남긴다). COMMENT_LINE = re.compile(r"^[ \t]*<!--.*?-->[ \t]*(?:\n|$)", re.S | re.M) COMMENT = re.compile(r"<!--.*?-->", re.S) # `#`만 있는 빈 제목도 제목이다. `\s`를 쓰면 줄바꿈을 넘어 다음 본문 줄까지 지운다. HEADING = re.compile(r"^#{1,6}(?:[ \t].*)?(?:\n|$)", re.M) GAP = re.compile(r"\[확인 필요[^\]]*\]") WS = re.compile(r"\s") LOW_PCT = 90 BASIS_LABEL = {"space": "공백 포함", "nospace": "공백 제외"} def body(text): text = text.replace("\r\n", "\n").replace("\r", "\n") text = COMMENT_LINE.sub("", text) text = COMMENT.sub("", text) text = HEADING.sub("", text) return text.strip() def euckr_bytes(text): total, bad = 0, [] for ch in text: try: total += len(ch.encode("cp949")) except UnicodeEncodeError: total += 2 bad.append(ch) return total, bad def count(text): b = body(text) euckr, bad = euckr_bytes(b) return { "space": len(b), "space_no_newline": len(b.replace("\n", "")), "nospace": len(WS.sub("", b)), "utf8": len(b.encode("utf-8")), "euckr": euckr, "non_euckr": sorted(set(bad)), "gaps": len(GAP.findall(b)), } def judge(n, limit): if n > limit: return "over" if n * 100 < limit * LOW_PCT: return "under" return "ok" def report(name, c, limit=None, basis="space"): lines = [ f"== {name}", f"공백 포함 {c['space']}자 (줄바꿈 제외 {c['space_no_newline']}자) | 공백 제외 {c['nospace']}자" f" | UTF-8 {c['utf8']}B | EUC-KR {c['euckr']}B", ] if c["non_euckr"]: lines.append(f"! EUC-KR에 없는 문자 {''.join(c['non_euckr'])}: 2바이트로 셈, 옛 채용 사이트에서는 깨질 수 있음") if c["gaps"]: lines.append(f"! [확인 필요] {c['gaps']}곳 남음") status = None if limit: n = c[basis] status = judge(n, limit) rest = limit - n left = f"남음 {rest}자" if rest >= 0 else f"초과 {-rest}자" verdict = {"ok": "범위 안", "under": f"짧음(목표 {LOW_PCT}% 이상)", "over": "초과"}[status] lines.append(f"{BASIS_LABEL[basis]} 제한 {limit}자 중 {n}자 ({n * 100 // limit}%), {left}: {verdict}") lines.append("※ 사이트마다 세는 방식이 다릅니다(줄바꿈을 2자로 세는 곳도 있음). 제출 화면의 글자 수를 마지막으로 확인하세요.") return "\n".join(lines), status def decode(data): """UTF-8(BOM 포함)로 읽고, 안 되면 Windows 메모장 ANSI(CP949)로 읽는다.""" try: return data.decode("utf-8-sig") except UnicodeDecodeError: return data.decode("cp949") def main(argv=None): if hasattr(sys.stdout, "reconfigure"): sys.stdout.reconfigure(encoding="utf-8", errors="replace") ap = argparse.ArgumentParser(description="자소서 글자 수 계산") ap.add_argument("files", nargs="*") ap.add_argument("--limit", type=int) ap.add_argument("--basis", choices=["space", "nospace"], default="space") a = ap.parse_args(argv) if a.limit is not None and a.limit <= 0: print("--limit은 1 이상이어야 합니다", file=sys.stderr) return 2 sources = [] if a.files: for f in a.files: try: sources.append((f, decode(Path(f).read_bytes()))) except (OSError, UnicodeDecodeError) as e: print(f"읽을 수 없음: {f} ({e})", file=sys.stderr) return 2 else: try: sources.append(("stdin", decode(sys.stdin.buffer.read()))) except UnicodeDecodeError as e: print(f"읽을 수 없음: stdin ({e})", file=sys.stderr) return 2 over = False for name, text in sources: out, status = report(name, count(text), a.limit, a.basis) print(out) over = over or status == "over" return 1 if over else 0 if __name__ == "__main__": sys.exit(main())plugins/jasoseo/skills/jasoseo/references/draft-rules.md3.9 KB518115abf44eupstream ↗
# 초안 규칙과 점검 리포트 ## 사실 규칙 - 초안의 사실(시기, 인원, 역할, 행동, 숫자, 결과)은 고른 카드에 있는 것만 쓴다. - 카드에 없는 사실이 문장에 필요하면 `[확인 필요: 무엇]`으로 남긴다. 그럴듯한 값으로 채우지 않는다. - 숫자를 키우거나 역할을 부풀리지 않는다. "참여"를 "주도"로, "도왔다"를 "이끌었다"로 바꾸지 않는다. - 회사 정보(사업, 제품, 인재상)는 사용자가 준 채용공고나 자료에 있는 것만 쓴다. 모르면 `[확인 필요: 회사의 ○○]`. - 사용자가 "알아서 지어내 줘", "그럴듯하게 채워 줘"라고 해도 지어내지 않는다. 자소서 내용은 면접 꼬리 질문으로 확인되고 없는 경험은 그 자리에서 드러난다는 이유를 한 번 말한다. 그다음 빈 곳을 채울 질문을 한다. ## 말투 규칙 - 카드의 원문 인용과 배운 점(본인 말)에 나온 단어를 살린다. - 사용자가 쓰지 않는 어려운 한자어나 업계 유행어를 새로 넣지 않는다. - 종결과 문장 모양은 `jasoseo-style.md`를 따른다. ## 구조 - 첫 문장은 장면이나 사실로 시작한다. 각오, 명언, 문항 되풀이로 시작하지 않는다. - 문항이 묻는 것에 첫 두세 문장 안에서 답한다. - 한 문항에 카드 하나가 기본이다. 제한이 1,000자를 넘으면 두 개까지 쓴다. - 마지막 문단은 그 경험을 지원 직무의 일과 잇는다. 교훈 한 줄로 끝내지 않는다. - `[소제목]`은 사용자가 원하거나 회사 양식이 요구할 때만 넣는다. ## 초안 파일 양식 ```markdown # A사 백엔드 2번 <!-- 문항: 직무 관련 문제를 해결한 경험 / 제한: 공백 포함 700자 / 근거: S03 --> 본문 ``` `count.py`는 `#` 제목 줄과 `<!-- -->` 메모를 빼고 본문만 센다. ## 글자 수 - 기준은 공백 포함. 문항이 공백 제외 기준이면 `--basis nospace`. - 목표는 제한의 90~100%. - 초안을 파일로 저장한 뒤 잰다. 짐작으로 세지 않는다. ```bash python "${CLAUDE_SKILL_DIR}/scripts/count.py" jasoseo/A사-백엔드/q2.md --limit 700 ``` - Windows에서 `python`이 없으면 `py`, macOS와 Linux는 `python3`. - 길면 문장을 줄인다. 짧으면 카드에 있는 내용(어려웠던 점, 한 일의 단계)에서 더한다. 짧다고 새 사실을 만들지 않는다. 카드에 더할 내용이 없으면 사용자에게 묻는다. - 카드로 90%를 못 채우고 사용자도 더 줄 내용이 없으면 짧은 초안 그대로 둔다. 같은 말을 되풀이하거나 꾸밈말로 늘리지 않는다. 점검 리포트의 글자 수 줄에 부족한 글자 수를 적고, 그 아래에 채울 방법을 적는다: 기억을 끌어낼 구체 질문 2~3개, 함께 쓸 수 있는 다른 카드, 채용 사이트가 최소 글자 수를 두는지 확인할 것. ## 점검 리포트 초안을 저장하면 같은 응답 안에서 초안 본문 전체와 이 리포트를 사용자에게 보여 준다. 파일만 만들고 끝내지 않는다. 사용자가 고친 본문을 줄 때마다 다시 낸다. ``` [점검] A사 백엔드 2번 - 글자 수: 공백 포함 662/700자 (94%), 범위 안 - 근거 없는 문장: 3문단 "팀을 이끌며" (S03에 리더 역할 없음) - 확인 필요: 1곳 (기능 추가를 원한 팀원 수) - 뻔한 문장: "소통의 중요성을 깨달았습니다" (S03의 본인 말로 바꾸기 제안) - 문체: 위반 없음 ``` - 글자 수는 `count.py` 출력을 옮긴다. - 근거 없는 문장: 초안 문장마다 사실을 카드와 대조한다. 사용자가 고친 본문에 카드에 없는 사실이 생겼으면 지우라고 하지 않고 카드에 더할지 묻는다. 본인 경험일 수 있다. - 뻔한 문장: 이름과 회사만 바꾸면 다른 지원자 글에 그대로 들어갈 문장. - 문체: `jasoseo-style.md`의 패턴 위반. - 항목이 없으면 `없음`이라고 적는다. 항목을 빼지 않는다.plugins/jasoseo/skills/jasoseo/references/jasoseo-style.md2.0 KBdc5523a0ee6aupstream ↗
# 자소서 문체 규칙 stop-slop-ko 플러그인이 없어도 이 파일만으로 적용한다. stop-slop-ko의 개조식(`~함/~됨`) 기본값은 자소서에 쓰지 않는다. ## 종결 - 기본은 `~습니다/~했습니다`. 사용자가 다른 종결(`~다`)로 쓴 본문을 주면 그것을 따른다. - 한 글 안에서 종결을 섞지 않는다. - 개조식과 명사 종결은 쓰지 않는다. ## 자소서 AI 티 패턴 | 패턴 | 예 | 고치는 방향 | |---|---|---| | 교훈형 마무리 | 이러한 경험을 통해 소통의 중요성을 배웠습니다 | 그 뒤 실제로 바뀐 행동 하나 | | "~라고 생각합니다" 남발 | 한 글에 두 번 이상 | 사실이나 행동으로 말한다 | | 회사 비전을 그대로 옮긴 포부 | 귀사의 글로벌 비전 실현에 기여하는 인재가 되겠습니다 | 첫해 맡을 일과 거기 쓸 경험 | | 형용사 세 개 나열 | 성실하고 꼼꼼하며 책임감 있는 | 하나를 골라 장면으로 보인다 | | 대구와 과장 | 단순한 과제가 아닌 도전이었습니다, 잊지 못할, 소중한 | 사실만 남긴다 | | 문항 되풀이로 시작 | 제가 귀사에 지원한 동기는 ~입니다 | 장면이나 사실로 시작한다 | | 명언, 사자성어로 시작 | "실패는 성공의 어머니"라는 말처럼 | 지운다 | | 연결어 연달아 쓰기 | 또한, 더불어, 나아가, 이를 바탕으로 | 꼭 필요한 곳 하나만 | | 번역투 | ~을 통하여, ~에 있어서, ~되어지다, ~로 인하여 | ~로, ~에서, ~되다, ~ 때문에 | | 빈 강조어 | 정말, 매우, 굉장히, 진정한 | 지운다 | ## 부호 - em-dash(`—`), 장식 이모지, `★`를 쓰지 않는다. - 따옴표는 사용자 말이나 실제 대사를 옮길 때만 쓴다. - 조사 앞에 공백을 두지 않는다(`React와`). ## 판단 기준 고친 문장이 카드의 원문 인용과 같은 사람이 쓴 것처럼 읽히는지 본다. 더 매끄러워졌어도 사용자 말투가 사라졌으면 원래 표현으로 되돌린다.plugins/jasoseo/skills/jasoseo/references/question-bank.md3.8 KB92e085b91726upstream ↗
# 문항 유형별 질문 세트 인터뷰는 한 번에 질문 1~2개. 아래 질문을 다 묻지 않는다. 카드(`story-card.md`)의 빈 칸을 채우는 데 필요한 것만 고른다. ## 문항 유형 판별 | 유형 | 문항에 자주 나오는 말 | 실제로 묻는 것 | |---|---|---| | 지원동기 | 지원한 이유, 왜 당사, 관심을 갖게 된 계기 | 이 회사와 직무를 고른 개인적 계기와 근거 | | 성장과정 | 성장 과정, 가치관, 영향을 준 경험 | 지금 일하는 태도를 만든 구체적 장면 | | 직무역량 | 직무 관련 경험, 역량, 전문성, 문제 해결 | 직무에 필요한 능력을 실제로 써 본 경험과 과정 | | 갈등·실패 | 갈등, 어려움, 실패, 극복 | 그 상황에서 내가 한 판단과 행동, 결과를 받아들인 방식 | | 입사 후 포부 | 입사 후, 목표, 포부, 기여 | 직무 이해를 바탕으로 한 첫 1~3년 계획 | | 기타 | 사회 이슈, 협업, 창의, 자유 주제 | 문항 문장이 묻는 것을 한 줄로 다시 쓴다 | 한 문항이 두 유형에 걸치면(지원동기와 입사 후 포부) 둘 다 적고, 글자 수를 어떤 비율로 나눌지 사용자에게 묻는다. ## 공통 질문 1. 언제, 어디서였나요? 몇 명이 함께했나요? 2. 그때 맡은 역할은 무엇이었나요? 3. 직접 한 일을 순서대로 말해 주세요. 4. 결과를 숫자나 눈에 보이는 변화로 말하면요? 5. 가장 어려웠던 순간과 그때 고른 선택은요? 6. 다시 한다면 무엇을 바꾸겠어요? ## 유형별 추가 질문 ### 지원동기 - 이 회사나 직무를 처음 알게 된 때는 언제인가요? - 이 회사 제품이나 서비스를 직접 써 본 적이 있나요? 그때 무엇이 눈에 들어왔나요? - 다른 회사가 아니라 여기여야 하는 이유를 하나만 고르면요? - 채용공고에서 가장 끌린 문장은 무엇인가요? ### 성장과정 - 지금 일하는 방식에 영향을 준 사람이나 장면 하나를 떠올려 보세요. - 그 일 전후로 달라진 점을 행동으로 말하면요? - 그 습관이 최근 경험에서 드러난 예가 있나요? ### 직무역량 - 문제를 처음 알아챈 계기는요? - 원인을 찾으려고 무엇을 열어 보거나 시도했나요? - 쓴 도구, 기술, 방법은요? - 처음 시도가 안 됐다면 다음에 무엇을 했나요? - 이 경험이 지원 직무의 어떤 업무와 닮았나요? ### 갈등·실패 - 의견이 갈린 지점은 정확히 무엇이었나요? 상대는 왜 그렇게 생각했나요? - 내가 먼저 한 행동은요? - 결과가 좋지 않았다면 그 뒤에 무엇을 바꿨나요? - 지금 같은 상황이 오면 첫 행동은요? ### 입사 후 포부 - 입사 첫해에 맡을 거라 생각하는 일은요? - 그 일에 바로 쓸 수 있는 내 경험이나 기술은요? - 3년 뒤 어떤 일을 맡고 싶나요? 그러려면 무엇을 더 익혀야 하나요? ## 되묻기 답에 아래 말이 나오는데 뒤에 구체적 행동이나 숫자가 없으면 "예를 들면요?"로 한 번 더 묻는다. - 열심히, 최선을, 노력, 성실히 - 소통, 협업, 리더십, 책임감, 주도적 - 많이, 크게, 성공적으로, 개선 - 배웠다, 성장했다, 깨달았다 같은 내용은 두 번까지만 되묻는다. 그래도 구체적인 답이 없으면 카드에 `(구체 사례 없음)`으로 적고 넘어간다. ## 경험이 없다고 할 때 1. 범위를 넓혀 묻는다: 수업 과제, 팀 프로젝트, 아르바이트, 동아리, 봉사, 개인 공부, 취미 프로젝트. 2. 작은 일도 된다고 알려 준다: 손님 응대 방식을 바꾼 일, 과제 일정을 다시 짠 일. 3. 그래도 없으면 이 문항은 쓸 거리가 부족하다고 솔직히 말한다. 지어내지 않는다. 다른 문항부터 하자고 제안한다.plugins/jasoseo/skills/jasoseo/references/story-card.md2.7 KBbb436efda2e0upstream ↗
# 경험 카드와 경험 은행 ## 파일 위치 - 경험 은행: 현재 작업 폴더의 `jasoseo/stories.md`. 없으면 만든다. - 초안: `jasoseo/<회사>-<직무>/<문항번호>.md` (예: `jasoseo/A사-백엔드/q2.md`) - 시작할 때 `jasoseo/stories.md`가 있으면 먼저 읽는다. 처음 만들 때 맨 위에 넣는 내용: ```markdown # 경험 은행 <!-- jasoseo 플러그인이 관리하는 파일. 직접 고쳐도 된다. 주민등록번호, 연락처, 주소는 적지 않는다. --> ``` ## 카드 양식 ```markdown ## [S03] 졸업작품 서버 장애 대응 - 시기·상황: 2025.03~06, 4인 팀 졸업작품, 시연 2주 전 서버 다운 - 내 역할: 백엔드 담당 - 한 일: 로그 분석 → DB 커넥션 누수 발견 → 풀 설정 수정 - 결과(숫자): 응답 3초 → 0.4초, 시연 정상 진행 - 어려웠던 점·선택: 기능 추가 vs 안정화 중 안정화를 주장 - 배운 점(본인 말): "고치는 것보다 원인 찾는 게 오래 걸린다는 걸 알았다" - 쓸 만한 문항: 직무역량, 갈등·실패 - 원문 인용: "새벽 3시에 로그 보다가 커넥션이 안 닫히는 걸 봤어요" - 사용 이력: A사 백엔드 2번 문항 (2026-10) ``` ## 칸 규칙 | 칸 | 규칙 | |---|---| | ID | `S01`부터 순번. 지운 번호는 다시 쓰지 않는다 | | 제목 | 경험을 한 줄로. 꾸밈말 없이 | | 시기·상황 | 연월, 규모(인원, 기간), 배경 | | 내 역할 | 내가 맡은 것. 팀 전체가 한 일과 구분한다 | | 한 일 | 내가 직접 한 행동을 순서대로 | | 결과(숫자) | 숫자나 눈에 보이는 변화. 없으면 `(숫자 없음)` | | 어려웠던 점·선택 | 갈림길과 내가 고른 쪽 | | 배운 점(본인 말) | 사용자가 한 말을 큰따옴표로 그대로 | | 쓸 만한 문항 | 문항 유형 이름 | | 원문 인용 | 사용자 발화를 고치지 않고 1~3개. 초안 말투의 재료 | | 사용 이력 | 이 카드를 쓴 회사, 문항, 연월 | 모르는 칸은 지우지 않고 `(미확인)`으로 둔다. 초안에 그 내용이 필요하면 `[확인 필요: ...]`로 남긴다. ## 관리 규칙 - 같은 경험이면 새 카드를 만들지 않고 기존 카드를 고친다. 제목과 시기가 비슷한 카드가 있으면 같은 경험인지 사용자에게 묻는다. - 사용자가 말한 내용과 다르게 요약하지 않는다. 카드를 저장하거나 고치면 바뀐 칸을 사용자에게 보여 준다. - 동료 실명이나 회사 내부 정보가 들어가면 일반 명칭(팀원 A, 고객사)으로 바꾸자고 제안한다. - 초안을 쓴 뒤 사용 이력을 갱신한다. 같은 회사의 다른 문항에 같은 카드를 또 쓰려 하면 겹친다고 알려 준다.README.mdupstream ↗
Contents are not inlined in the catalog. Open the upstream file.
Plain-text copy, no login: /skill-bundles/leeandev-stop-slop-ko-plugins-jasoseo-skills-jasoseo.md