바이브 코딩이 아니라 엔지니어링 스킬: mattpocock/skills의 흐름·태스크 그래프·TDD 아키텍처 심층 해부

에이전트에게 “알아서 하라”고 맡기면 결과물은 빨리 나오지만, 설계 합의·피드백 루프·도메인 언어가 비면 엔트로피도 같이 가속된다. 오늘 GitHub Trending 일간 목록에 오른 mattpocock/skills(약 28.1만 스타, 이 글 기준 오늘 +1,774)는 GSD·BMAD·Spec-Kit처럼 프로세스를 통째로 소유하지 않는다. 대신 작고 조합 가능한 스킬로 그릴링 → 스펙 → 태스크 그래프 → TDD → 이축 코드 리뷰 → 레트로까지를 조각내 제공한다. 이 글은 실무자 관점에서 저장소 구조, 호출 축, 메인 플로, implement-spec의 병렬 워크트리, 설치·버전 게이트, 대안 대비 트레이드오프를 해부한다.

메가 프로세스 대신 조합 가능한 스킬: grill·to-spec·tickets·tdd·review·retro
메가 프로세스 대신 조합 가능한 스킬: grill·to-spec·tickets·tdd·review·retro

한눈에 보는 프로젝트 현황

항목 확인한 값 (2026-10-09 KST) 해석
저장소 mattpocock/skills (주 언어 Shell, 실제 내용은 Markdown 스킬) 실행 바이너리보다 SKILL.md와 플러그인 매니페스트가 본체
별 / 포크 281,246 / 23,568 (GitHub API) Trending 페이지 ‘오늘 +1,774’. 같은 날 claude-mem은 +670
최신 릴리스 v1.3.1 (2026-10-04 12:48 UTC → 10/4 21:48 KST) implement-spec·pr가 Engineering 버킷으로 졸업한 마이너 직후 패치
라이선스 MIT (Copyright 2026 Matt Pocock) 포크·사내 커스텀 스킬 파생이 자유롭다. 기여 게이트는 별도
패키지/플러그인 mattpocock-skills 1.3.1, Claude Code 공식 마켓플레이스 등록 플러그인 자동 업데이트 vs skills.sh 복사본(수동 편집)을 둘 중 하나만
홈 aihero.dev/skills, skills.sh 배지 문서·뉴스레터와 저장소가 한 제품처럼 묶여 있다

덧붙여 같은 날 오전 Opensource 심층 후보였던 thedotmack/claude-mem은 이미 MoricWorld에 게시된 글(슬러그 claude-mem-architecture-deep-dive-2026-10)이 있어 중복을 피하고, Trending에 실제로 남아 있는 AI 에이전트 툴링으로 이 저장소를 택했다.

설계 철학: 프로세스를 소유하지 않고, 조각을 조합한다

접근 무엇을 소유하나 실패 모드 이 저장소의 대응
GSD / BMAD / Spec-Kit류 전체 워크플로·단계·산출물 형식 프로세스 버그가 나면 어디를 고쳐야 할지 불명, 통제권 상실 의도적으로 비대상. “프로세스를 뺏지 않는다”가 README 전제
거대 단일 프롬프트 / 메가 스킬 한 파일에 모든 규칙 토큰 낭비, 수정 비용 폭증, 라우팅 불가 스킬을 작고 조합 가능하게 유지. 신규 스킬 제안은 원칙적으로 거절
mattpocock/skills 재사용 가능한 규율(그릴링, TDD, 리뷰 축 등) 사용자가 플로를 직접 짜야 함 ask-matt가 라우터. 메인 플로·온램프·스탠드얼론을 문서화

README가 강조하는 네 가지 실패는 모두 “모델이 멍청해서”가 아니라 엔지니어링 피드백이 없어서다. (1) 요구가 흐릿하면 /grill-me·/grill-with-docs, (2) 용어가 안 맞으면 도메인 모델·GLOSSARY.md·ADR, (3) 코드가 안 돌면 /tdd·/diagnosing-bugs, (4) 진흙 공이 되면 /improve-codebase-architecture·/codebase-design. 스킬 세트는 이 네 축을 일상 호출 가능한 단위로 압축한 것이다.

흐릿한 요구·용어 불일치·피드백 부재·진흙 공 — 네 실패 축과 대응하는 스킬
흐릿한 요구·용어 불일치·피드백 부재·진흙 공 — 네 실패 축과 대응하는 스킬

저장소 구조와 플러그인 매니페스트

루트는 거의 문서·설정이다. 본체는 skills/ 아래 버킷이다.

경로 역할 운영 메모
skills/engineering/ 일상 코딩 플로 (스펙·티켓·구현·리뷰·레트로) 플러그인에 포함. ask-matt 라우팅 대상
skills/productivity/ 그릴링 원시형, 핸드오프, teach, wait-what 등 코드 전용이 아닌 일반 워크플로
skills/in-progress/ 실험 중 (chief-of-staff, claude-handoff, writing-* 등) 졸업 전. 프로덕션 의존에 주의
skills/misc/ 동결·비유지 (git-guardrails, shoehorn 마이그레이션 등) 관련 이슈는 전부 닫힘
.claude-plugin/plugin.json 이름·버전·스킬 경로 배열 v1.3.1 기준 engineering+productivity 27개 경로
.out-of-scope/, SCOPE.md 기여·신규 스킬 거절 사유 기록 “관측된 실패 + 철학 적합” 이중 바
GLOSSARY.md Issue tracker / Issue / Decision ticket / Triage role 스킬 간 용어 충돌을 먼저 막는 메타 레이어

각 스킬 디렉터리는 최소 SKILL.md(YAML frontmatter + 본문)를 갖고, Codex/OpenAI 계열을 위해 agents/openai.yaml을 두는 경우가 많다. user-invoked 스킬은 frontmatter에 disable-model-invocation: true를 켜 모델이 勝手 호출하지 못하게 한다. Codex 쪽은 policy.allow_implicit_invocation: false로 같은 축을 표현한다.

---
name: implement-spec
description: "Implement the result of /to-spec and /to-tickets in code."
disable-model-invocation: true
---
# (본문: 태스크 그래프 → 워크트리 구현자 → merger → code-review)

호출 축과 idea → ship 메인 플로

ask-matt이 가리키는 idea→ship 메인 플로와 user/model 호출 축
ask-matt이 가리키는 idea→ship 메인 플로와 user/model 호출 축

ask-matt는 이 저장소의 라우팅 맵이다. 핵심 구분은 둘이다. User-invoked는 오케스트레이션(당신이 타이핑해야 함). Model-invoked는 재사용 규율(모델이 상황에 맞게 집어 들 수 있음). user-invoked가 model-invoked를 부를 수는 있어도, user-invoked끼리 서로 부르지는 않는다.

단계 스킬 산출 컨텍스트 위생
1. 합의 /grill-with-docs (또는 무저장 /grill-me) GLOSSARY.md·ADR 갱신, 설계 트리 해소 워킹 디렉터리가 있으면 문서 남기는 쪽을 기본
2. 검증 우회 /handoff ↔ /prototype 던질 수 있는 프로토타입, 학습을 원 스레드로 환승 프로토타입은 별 디렉터리/브랜치가 전제
3a. 다세션 /to-spec → /to-tickets → /implement 또는 /implement-spec 스펙, 블로킹 엣지가 있는 티켓, 통합 브랜치 그릴링~티켓까지는 한 창. 구현은 티켓마다 fresh
3b. 단세션 같은 창에서 /implement 즉시 TDD+리뷰 스마트 존(~150k) 안에서만
4. 마무리 /pr(모델), /retro(유저) 시각 요약 PR, 환경(체크·스티어링) 개선안 레트로는 세션을 비우기 전에

온램프도 명시적이다. 들어온 이슈 더미는 /triage(단, /to-tickets가 만든 티켓은 다시 트리아지하지 않음). 고집 센 버그는 /diagnosing-bugs. 한 세션에 안 담기는 안개는 /wayfinder로 결정 티켓 맵을 그린 뒤, 빌드는 /to-spec으로 합쳐 메인 플로에 합류한다. wayfinder 맵을 바로 /implement에 넣으면 연결된 결정 디테일이 날아간다고 문서가 경고한다.

grilling 프론티어와 to-tickets 태스크 그래프

/grilling은 인터뷰 원시형이다. 설계를 트리로 보고, 전제조건이 이미 해소된 질문만 frontier로 모아 한 라운드에 전부 묻는다. 각 질문에는 추천 답을 붙이고, “yes”가 추천 수락이 되도록 문장을 쓴다. 사실(파일시스템·도구로 알 수 있는 것)은 서브에이전트에게 맡기고 사용자에게 묻지 않는다. 결정은 사용자에게만 맡긴다. 프론티어가 비면 합의 완료.

/to-tickets는 그 합의를 tracer-bullet 수직 슬라이스로 쪼갠다. 각 티켓은 스키마·API·UI·테스트를 얇게 관통해야 하고, 단독으로 데모/검증 가능해야 하며, 한 번의 fresh 컨텍스트에 들어가야 한다. 블로킹 엣지를 선언해 그래프를 만들고, “지금 잡을 수 있는 것”이 다시 frontier가 된다. wide refactor만 예외로 expand–contract 시퀀스를 허용한다.

트래커 티켓 형태 블로킹 표현 기본 라벨
로컬 파일 .scratch/<feature>/issues/<NN>-<slug>.md 티켓당 1파일 본문 “Blocked by”에 번호/제목 ready-for-agent 상태 텍스트
GitHub / Linear 등 이슈 1개 = 티켓 1개 (블로커 먼저 생성) 네이티브 blocking 링크 또는 본문 참조 트리아지 맵의 ready-for-agent

implement-spec: 병렬 워크트리 오케스트레이션

implement-spec: 통합 브랜치와 병렬 워크트리, merger frontier, Standards‖Spec 리뷰
implement-spec: 통합 브랜치와 병렬 워크트리, merger frontier, Standards‖Spec 리뷰

v1.3.x의 하이라이트는 /implement-spec이다. 목표는 PR이 아니라 통합 브랜치에 스펙 전체다. 초안 PR은 트래커가 PR로 이슈를 닫을 때, 또는 사용자가 요청할 때만, 그리고 첫 머지 이후(커밋 없는 브랜치는 PR을 못 염)에 연다.

  1. 스펙·티켓을 읽어 태스크 그래프 파악
  2. (선택) exploration 서브에이전트가 리포 밖 노트 디렉터리에 조사 결과 저장 — 구현자가 탐색에 시간 쓰지 않게
  3. 통합 브랜치 생성
  4. 각 티켓 = 구현자 서브에이전트 = 자체 worktree/branch. 시작 전 통합 브랜치 기반 확인, tdd로 빌드, 완료 전 통합 tip을 자기 브랜치에 머지
  5. 완료 시 merger 서브에이전트가 통합 브랜치로 머지 → frontier 갱신 → 가능한 티켓을 또 띄움
  6. 전부 끝나면 통합 브랜치에 code-review 한 번, 이슈는 단일 구현자로 수정
  7. 워크트리 정리

통신은 희소하다. 스펙·티켓·리서치 노트·이전 커밋에 대한 컨텍스트 포인터를 우선하고, 이미 있는 정보를 복제하지 말라고 명시한다. 이건 멀티에이전트 토큰 폭주를 막는 운영 규칙이다 설계 결정이다.

/code-review는 이축이다. Standards(레포 코딩 표준 + Fowler 냄새 베이스라인)와 Spec(원 이슈/스펙 충실도)을 병렬 서브에이전트로 돌려 서로 오염시키지 않는다. /tdd는 red-green-refactor와 “좋은/나쁜 테스트” 가이드를 제공하고, /pr은 본문을 “변화를 드러내는 최소 시각물 + before/after 증거 + one-way/two-way door·blast radius”로 강제한다.

설치·버전·이 박스에서의 한계

경로 명령/방식 업데이트 주의
Claude Code claude plugin install mattpocock-skills@claude-plugins-official 기본 자동 공식 마켓 경로
Codex marketplace add → mattpocock-skills@mattpocock 시작 시 openai.yaml 정책 확인
GitHub Copilot marketplace + extraKnownMarketplaces autoUpdate 설정 VS Code Chat: Install Plugin From Source도 가능
skills.sh 복사 프로젝트에 편집 가능한 파일 복사 수동 플러그인과 동시 설치 시 스킬이 이중으로 생김 — README가 둘 중 하나만 하라고 함
기타 하네스 Amp, Cursor, OpenCode, Pi, Trae, Droid, Kiro 등 README에 설치 블록 제품별 공통 전제: 에이전트 스킬/플러그인 로더
# 레포당 1회: 이슈 트래커·트리아지 라벨·도메인 문서 레이아웃
# (Claude Code 등에서)
/setup-matt-pocock-skills

# 상황 라우팅
/ask-matt

# 다세션 빌드 골격
/grill-with-docs
/to-spec
/to-tickets
/implement-spec

이 글을 쓴 Linux 박스에서는 GitHub API·raw 파일·플러그인 JSON·주요 SKILL.md를 검증했다. Claude Code/Codex UI에 플러그인을 실제로 설치해 세션을 돌리지는 않았다(대화형 IDE·구독 로그인 부재). 따라서 “설치 명령이 문서에 있다”는 수준까지가 박스 검증 범위고, worktree 병렬 구현·트리아지 라벨 매핑은 문서·릴리스 노트 기준이다. 원 후보 claude-mem과 달리 Node 런타임 버전 게이트는 없다. 의존성은 사실상 마크다운과 호스트 에이전트다.

대안 대비 트레이드오프

비교 대상 강점 이 저장소가 이기는 지점 질 수 있는 지점
GSD / BMAD / Spec-Kit 처음부터 끝까지 한 레시피 조각 수정·포크·스킬 단위 교체 용이 초보 팀이 “무엇을 언제”를 스스로 고르기 어려움
anthropics/knowledge-work-plugins 역할별(영업·재무·PM) MCP 커넥터 번들 소프트웨어 엔지니어링 규율·티켓 그래프에 특화 비엔지니어링 지식노동·엔터프라이즈 커넥터
cathrynlavery/diagram-design 다이어그램 산출물 품질 빌드·리뷰·레트로 전 주기 시각 산출물 전문성
자체 CLAUDE.md / AGENTS.md만 레포 특화, 가벼움 검증된 플로·호출 축·기여 게이트가 이미 정리됨 팀 고유 프로세스에 맞추려면 결국 포크/skills.sh 편집

기여 게이트와 운영 함정

SCOPE.md의 바는 단순하다. (1) 실제 세션에서 관측된 실패를 서술할 것, (2) .out-of-scope/와 철학에 맞을 것. 가설적 “있으면 좋겠다”는 닫힌다. 신규 스킬 제안·기여는 명시적으로 거절된다. 이유는 유지비다. 스킬 하나마다 ask-matt 맵·문서 페이지·플러그인 매니페스트를 같이 맞춰야 한다. 기존 스킬로 조합 가능하면 새 스킬을 만들지 말라고 한다. 사내 전용 플로는 포크나 skills.sh 복사본에 두라는 메시지다.

실무에서 자주 걸릴 함정만 짚으면 다음과 같다.

  • 플러그인 + skills.sh 이중 설치 → 같은 스킬이 두 번 로드된다.
  • setup을 건너뜀 → engineering 스킬이 이슈 트래커를 못 찾아 setup을 요구한다.
  • to-tickets 산출을 다시 triage → 이미 agent-ready인데 상태가 꼬인다.
  • wayfinder 맵을 바로 implement → 결정 그래프가 빌드 단위로 붕괴되지 않은 채 들어간다.
  • 스마트 존을 넘긴 채 그릴링~티켓을 한 창에 유지 → 문서가 권하는 건 phase boundary에서 compact이지, 열화된 창에서 밀어붙이는 것이 아니다.
  • misc/in-progress 의존 → 동결·실험 버킷이다.

정리

mattpocock/skills는 “에이전트에게 더 긴 시스템 프롬프트를 준다”는 접근이 아니다. 호출 권한(user vs model), 컨텍스트 위생(언제 clear/handoff/subagent/compact할지), 작업 분해(수직 슬라이스 + 블로킹 그래프), 피드백(TDD·이축 리뷰·레트로로 환경 개선)을 스킬 단위 인터페이스로 고정한다. v1.3.1의 implement-spec은 그 그래프를 병렬 워크트리로 실행하는 오케스트레이터다. 프로세스를 통째로 사고 싶지 않은 팀, 이미 이슈 트래커와 테스트 문화가 있는 팀에 맞고, “버튼 하나로 전 주기”를 원하는 팀에는 의도적으로 비어 있다. 그 빈자리가 이 저장소의 제품 경계다.