# 제약 기반 개발 (constraint-driven-development)

> 프로젝트 품질 기준을 CONSTRAINTS.md 계약으로 적고, diff에서 몰래 낮아진 기준을 찾아냅니다.

- 카테고리: [코드 규약](https://www.myskills.tools/ko/categories/code-standards/)
- 출처: 커뮤니티 · Addy Osmani
- 저장소: https://github.com/addyosmani/agent-skills/tree/main/skills/constraint-driven-development (commit ba3d99e)
- SKILL.md: https://github.com/addyosmani/agent-skills/blob/main/skills/constraint-driven-development/SKILL.md
- 설치 명령: `npx skills add addyosmani/agent-skills --skill constraint-driven-development`
- 라이선스: MIT
- 호환 도구: Claude Code, Codex, Cursor, Copilot, Gemini CLI
- 권한: read-repo ✓, write-files ✓, shell ✓, network ✓
- 상태: 스캔 통과
- 규칙 스캔으로 모든 위험을 찾을 수는 없습니다. 설치 전에 이 스킬의 SKILL.md를 읽고 권한을 확인하세요.
- ⚠ 인터뷰에는 사용자가 있어야 하며, CI나 무인 실행에서는 기본 규칙만 적용합니다. gitleaks에는 --redact가 필수입니다.

## 핵심 규칙

변경을 통과시키려고 CONSTRAINTS.md의 기준을 약화해서는 안 됩니다.

## 실행 단계

1. **먼저 탐지하고 질문** — 기존 테스트, lint, CI 설정을 먼저 읽고, 읽을 수 있는 것은 묻지 않습니다.
2. **기본값이 있는 4가지 질문** — 제약할 항목, 실패 시 차단 또는 경고, 목표 수치 등을 하나씩 묻고 질문마다 기본값을 제시합니다.
3. **기록하고 도구 설치** — CONSTRAINTS.md를 쓰고 AGENTS.md와 CLAUDE.md에 한 줄을 추가하며, 항목별로 맞는 검사 도구를 연결합니다.
4. **기준 자체를 지키기** — diff에서 임계값 하향, 테스트 건너뛰기·삭제, 새 @ts-ignore/eslint-disable, 미완성 스텁을 확인합니다.

## 권한 설명 (SKILL.md 기준)

| 기능 | 필요 여부 | 설명 |
|---|---|---|
| 파일 쓰기 | 필요 | CONSTRAINTS.md, 검사 스크립트, 도구 설정을 쓰고 AGENTS.md와 CLAUDE.md에 한 줄씩 추가합니다. |
| 명령 실행 | 일부 필요 | 선택한 항목의 검사 도구(gitleaks, osv-scanner, Semgrep, Lighthouse, axe 등)를 설치·실행하며, 무거운 검사는 diff 범위로 제한합니다. |
| 네트워크 송신 | 일부 필요 | 검사 도구 설치와 취약점 데이터베이스 같은 외부 데이터 조회에 사용합니다. |

## SKILL.md 프런트매터(YAML)

```yaml
---
name: constraint-driven-development
description: Establishes a project's quality bar as a written contract and stops agents quietly lowering it. Interviews the user on which dimensions matter, supplies sane default thresholds when they have no number in mind, records everything in CONSTRAINTS.md, and watches the diff for a weakened bar — new @ts-ignore or eslint-disable suppressions, skipped or deleted tests, assertions stripped out, unimplemented stubs, thresholds edited down. Use when no quality bar is written down, when the user says "set up constraints" or "define our standards", when the user wants dimensions they care about — accessibility, web performance, coverage — set up as enforced constraints, when an agent keeps silencing checks or skipping tests to get to green, when you need a coverage or performance threshold and don't know what number to pick, or when an agent writes more code than anyone will read.
---
```

홈: https://www.myskills.tools/ko/ · URL: https://www.myskills.tools/ko/skills/constraint-driven-development/
