From harness-session
Audits Claude Code harness maturity using 6-axis 24-item checklist and 2x3 matrix (Static/Behavioral/Growth × User/Project), running 4 sub-agents for skill portfolio, sessions, context, and automation. Outputs scorecards, action reports, HTML/MD files.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-session:check-harnessThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**6축 사이클** 로 평가한다: **구조 → 맥락 → 계획 → 실행 → 검증 → 개선**.
6축 사이클 로 평가한다: 구조 → 맥락 → 계획 → 실행 → 검증 → 개선.
체크리스트 원본: references/checklist.md (반드시 먼저 읽어 항목 정의 확인).
분석의 정의
갖춘 것(Static)과 실제로 하는 것(Behavioral)의 gap 을, User/Project 두 스코프에서 측정한다. 축 6(개선)만 시간축 — 학습이 artifact로 돌아와 축적되는지(Growth)를 본다.
산출물 2가지
출력 방식 — 대화에 풍부한 축별 렌더 + HTML/MD 파일 저장 + 자동 오픈
.harness/check-reports/check-harness-{YYYY-MM-DD}-{scope}/ 디렉토리에
report.html — 시각 리포트 (CSS 스코어 게이지, 축별 확장 패널, 자체 완결)report.md — 마크다운 미러 (diff·git·아카이브용)Bash: open {dir}/report.html 실행📁 Saved: {dir}/ · 🌐 Opened: report.html사용자 입력에 스코프가 명시됐으면 그대로:
overall / 전체 / 유저 → User만project / 프로젝트 → Project만all / 둘 다 / 지정 없음 → Both스코프가 불명확하면 AskUserQuestion:
question: "어디까지 진단할까요?"
options:
- Both (User + Project) — 전체 진단 (Recommended)
- User만 (전역 · 스킬 정리 + 전체 세션 습관)
- Project만 (현재 프로젝트 맥락·자동화·프로젝트 세션)
cwd에서 상위로 올라가며 .claude 또는 CLAUDE.md가 있는 디렉토리를 PROJECT_ROOT로. 못 찾으면 Project 스코프 비활성화.
mkdir -p /tmp/cc-cache/check-harness/
산출물 경로:
/tmp/cc-cache/check-harness/PORTFOLIO.json/tmp/cc-cache/check-harness/SESSION_USER.json/tmp/cc-cache/check-harness/SESSION_PROJECT.json/tmp/cc-cache/check-harness/CONTEXT.json/tmp/cc-cache/check-harness/AUTOMATION.json선택된 스코프에 해당하는 서브에이전트를 모두 같은 메시지에서 병렬 호출.
Agent(
subagent_type: "skill-portfolio-analyzer",
description: "Skill portfolio health scan",
prompt: """
설치된 모든 스킬/플러그인/MCP를 ~/.claude.json과 교차 분석.
enabledPlugins (user/project), mcpServers (user + project .mcp.json),
installed plugins 인벤토리, MCP 호출 사용도(최근 30일) 포함.
current_state/unused_mcp/plugin_findings 필드 포함.
/tmp/cc-cache/check-harness/PORTFOLIO.json 에 저장.
project_root={PROJECT_ROOT 있으면 전달}
dead_days=90, low_value_days=60, low_value_count=3
"""
)
Agent(
subagent_type: "session-pattern-analyzer",
description: "User-wide session pattern scan",
prompt: """
scope=overall, days=7, long_session_min=20.
~/.claude/projects/ 전체 세션의 tool_use 메타데이터만 분석. 프롬프트 텍스트 절대 읽지 않음.
/tmp/cc-cache/check-harness/SESSION_USER.json 에 저장.
"""
)
Agent(
subagent_type: "session-pattern-analyzer",
description: "Project-scope session pattern scan",
prompt: """
scope=current_project, project_dir={PROJECT_ROOT}, days=30, long_session_min=20.
해당 프로젝트 세션만 대상. tool_use 메타데이터만.
/tmp/cc-cache/check-harness/SESSION_PROJECT.json 에 저장.
"""
)
Agent(
subagent_type: "context-quality-reviewer",
description: "Project context quality review",
prompt: """
project_root={PROJECT_ROOT}
CLAUDE.md + .claude/rules/* + .gitignore + settings.json + MCP 설정 평가.
/tmp/cc-cache/check-harness/CONTEXT.json 에 저장.
"""
)
Agent(
subagent_type: "project-automation-auditor",
description: "Project automation, verification & compounding audit",
prompt: """
project_root={PROJECT_ROOT}
session_report=/tmp/cc-cache/check-harness/SESSION_PROJECT.json (있으면 참조)
test/hooks/verifier/isolation 감사 + **compounding 신호**(git log 기반 CLAUDE.md·rules·docs·skills·hooks 최근 변경) 수집.
/tmp/cc-cache/check-harness/AUTOMATION.json 에 저장.
"""
)
Both 스코프면 5개를 한 번에 띄운다 (Project-session과 automation-auditor는 의존성이 있지만 auditor가 session 없이도 돌도록 설계 — 병렬 OK).
완료 후 JSON들을 Read로 읽어 PORTFOLIO, SESSION_USER, SESSION_PROJECT, CONTEXT, AUTOMATION 으로 메모리에 보관.
24항목 각각에 대해 PASS/WEAK_PASS/FAIL/N/A를 판정하고 증거 문자열을 함께 기록.
| 축 | 소스 | 스코프 | 판정 근거 필드 |
|---|---|---|---|
| 1. 구조 | PORTFOLIO | User | summary (A1–A5) |
| 2. 맥락 | CONTEXT | Project | claude_md·rules·sensitive (C1–C6) |
| 3. 계획 | SESSION_USER | User | plan_first_ratio (B2) |
| 4. 실행 | SESSION_USER + SESSION_PROJECT | User+Project | delegation/parallel/top_ngram (B3·B5·B6) — 두 스코프 각각 계산 |
| 5. 검증 | SESSION_PROJECT + AUTOMATION | Project | completion_check + D1–D5 |
| 6. 개선 | AUTOMATION.compounding + SESSION (wrap/memory) | Both | E1·B4·E2·E3 |
B3/B5/B6는 User 값과 Project 값 둘 다 기록. 축 레벨 판정은 다음 규칙:
weak_pass_flags에 해당 필드 있음축별 레벨
User Maturity = min(축1, 축3, 축4-User부분, 축6-User부분) Project Maturity = min(축2, 축4-Project부분, 축5, 축6-Project부분)
점수 (축별, 0–100)
Harness Score
다음 레벨 진행률: 현재 레벨의 통과 항목 수 / 다음 레벨 요구 항목 수
Phase 2 판정을 입력으로 리포트 상단 핵심 요약을 먼저 만든다.
headline (1문장) — User/Project 성숙도 + "가장 큰 문제" + "가장 쉬운 시작점"
예: "User L2 / Project L1 — CLAUDE.md에 실행 명령이 빠져있고 개선 축이 얇아요. dev 명령어 3줄 추가부터 해보세요."
cycle_line (6개, 각 1줄) — 사이클 순서로 축별 한 줄 상태:
1. 구조 — {한 줄}2. 맥락 — {한 줄}3. 계획 — {한 줄}4. 실행 — {한 줄, User/Project 대비 포함 가능}5. 검증 — {한 줄}6. 개선 — {한 줄}strength (1문장) — FAIL 적고 PASS 많은 축에서 뽑은 강점.
weakness (1문장) — FAIL 집중된 축의 약점.
actions (3–7개) — 3계층 분류:
예상 효과: 필드 포함두괄식 + 사이클 서술 + 축별 풍부화: 상단은 빠르게, 아래로 내려갈수록 축별 상세.
3개 산출물을 동시에 만든다:
open 으로 실행# 🧭 Harness Maturity Report
**{YYYY-MM-DD}** · Scope: `{user|project|all}` · Project: `{name or "-"}`
---
## 🧭 Harness Score: **{NN} / 100** ({Excellent|Good|Fair|Needs Work})
👤 User Scope L{n} ▓▓▓▓▓▓▓░░░ {XX}% → L{n+1} (Score: {NN}) 📁 Project Scope L{n} ▓▓▓▓▓▓▓▓░░ {XX}% → L{n+1} (Score: {NN}) 🔁 Compounding L{n} ▓▓▓▓░░░░░░ {XX}% → L{n+1} (Score: {NN})
> User = `~/.claude/` 전역 (구조·계획·실행 User면)
> Project = 이 프로젝트 (맥락·검증·실행 Project면)
> Compounding = 하네스가 자라고 있는지 (축 6, 공통)
## 🎯 한 줄 요약
> {headline}
**잘 되고 있는 것**: {strength}
**개선하면 좋을 것**: {weakness}
---
## 🔄 사이클 한눈에 보기
> 구조 → 맥락 → 계획 → 실행 → 검증 → 개선 순서로 한 줄씩.
1. **구조** · 👤 User — {cycle_line[0]}
2. **맥락** · 📁 Project — {cycle_line[1]}
3. **계획** · 👤 User — {cycle_line[2]}
4. **실행** · 👤+📁 — {cycle_line[3]}
5. **검증** · 📁 Project — {cycle_line[4]}
6. **개선** · 👤+📁 — {cycle_line[5]}
---
## ✅ 지금 하면 좋은 것 (제안)
> 부담 없이 골라서 하세요. 각 액션에 **적용 범위(👤/📁)** 표시.
### 🟢 바로 해볼 만한 것
- [ ] {👤|📁} **{action}** — 예상 효과: {benefit}
- 제안 명령: `{copy-paste 커맨드}`
- 근거: {evidence}
### 🟡 한 번 정리하면 좋을 것
- [ ] {👤|📁} **{action}** — 예상 효과: {benefit}
- 참고: {파일 경로}
- 근거: {evidence}
### 🔴 시간 내서 다뤄볼 것
- [ ] {👤|📁} **{action}** — 예상 효과: {benefit}
- 근거: {evidence}
---
## 📊 축별 스코어카드 (6축)
| Axis | Scope | Score | Level | 다음 레벨까지 |
|------|-------|------:|:-----:|:-------------|
| 1. 구조 (Scaffolding) | 👤 User | {NN} | L{n} | {XX}% → L{n+1} |
| 2. 맥락 (Context) | 📁 Project | {NN} | L{n} | {XX}% → L{n+1} |
| 3. 계획 (Planning) | 👤 User | {NN} | L{n} | {XX}% → L{n+1} |
| 4. 실행 (Execution) | 👤+📁 | {NN} | L{n} | {XX}% → L{n+1} |
| 5. 검증 (Verification) | 📁 Project | {NN} | L{n} | {XX}% → L{n+1} |
| 6. 개선 (Compounding) | 👤+📁 | {NN} | L{n} | {XX}% → L{n+1} |
Sessions analyzed: User {Nu} / Project {Np} ({period}) · Scanned: {YYYY-MM-DD HH:MM}
---
## 🔌 현재 활성 상태 (Runtime Inventory)
> 지금 이 Claude Code 세션에서 **실제로 접근 가능한** 것들.
**📦 플러그인** ({enabled_project}/{installed} enabled in this project)
| Plugin | Version | Scope | Skills | 최근 30일 활용 |
|--------|:-------:|:-----:|------:|:--------------|
| ... | ... | 👤📁 | ... | ... |
**🔗 MCP 서버** ({total}개 · {unused}개 미사용)
| Server | Scope | Type | 최근 호출 |
|--------|:-----:|:----:|:--------:|
| ... | ... | ... | ... |
**🧩 스킬 출처**
- 유저 standalone: {N}개
- 플러그인 경유: {N}개
- 프로젝트 로컬: {N}개
---
<details>
<summary>🧭 2×3 분석 매트릭스 (Static/Behavioral/Growth × User/Project)</summary>
| | Static (갖춘 것) | Behavioral (하는 것) | Growth (축적) |
|---|---|---|---|
| 👤 User | 축 1 (Score {NN}) | 축 3 · 축 4-User (Score {NN}/{NN}) | 축 6-User (Score {NN}) |
| 📁 Project | 축 2 (Score {NN}) | 축 4-Project · 축 5 (Score {NN}/{NN}) | 축 6-Project (Score {NN}) |
**교차에서 나온 gap 요약**
- Static vs Behavioral (User): {설치됐는데 안 쓰는 스킬 N개 → B2 plan-first 낮음}
- Static vs Behavioral (Project): {hook 있는데 호출 0회 / 없는데 필요한 징후}
- Growth: {최근 30일 artifact 갱신 {N}건 → 축적 여부}
</details>
<details>
<summary>📋 상세 체크리스트 (6축 · 24항목)</summary>
### 축 1 — 구조 (👤 User × Static)
| ID | L | Item | Status | Evidence |
|----|---|------|--------|----------|
| A1 | L1 | 70%+ skills used last 30d | PASS | ... |
| ... |
### 축 2 — 맥락 (📁 Project × Static)
...
### 축 3 — 계획 (👤 User × Behavioral)
...
### 축 4 — 실행 (👤+📁 × Behavioral)
> User / Project 두 값 표기
| ID | L | Item | User | Project | Status(min) | Evidence |
|----|---|------|------|---------|-------------|----------|
| B3 | L2 | delegation_ratio ≥ 0.4 | 0.55 | 0.20 | FAIL(project) | ... |
| ... |
### 축 5 — 검증 (📁 Project)
...
### 축 6 — 개선 (👤+📁 × Growth)
| ID | L | Item | Status | Evidence |
|----|---|------|--------|----------|
| E1 | L1 | CLAUDE.md/rules/docs 30d 갱신 | PASS | CLAUDE.md updated 2026-04-02 |
| B4 | L2 | session-wrap/handoff ratio | WEAK_PASS | 0.42 |
| E2 | L2 | wrap/compound/memory 호출 ≥1 | PASS | session-wrap: 3회 |
| E3 | L3 | 최근 90일 신규 skill/hook/rule | FAIL | 0건 |
</details>
<details>
<summary>🔍 Findings 전체 목록</summary>
**High Priority**
- 💡 {...}
**Medium Priority**
- 💡 {...}
**Low Priority**
- 💡 {...}
</details>
<details>
<summary>🧩 Skill Portfolio 상세 (👤 User × Static)</summary>
전체 설치 스킬: {N}개 · 최근 30일 사용: {X}개 ({%})
| 분류 | 개수 | 설명 | 예시 |
|------|----:|------|------|
| 😴 오래 안 쓴 스킬 (90일+) | N | ... | ... |
| 👻 기록만 남은 스킬 | N | ... | ... |
| 🔁 비슷한 기능 중복 | N | ... | ... |
| 🏷️ 네임스페이스 중복 | N | ... | ... |
| ⚠️ 트리거 겹침 | N | ... | ... |
</details>
<details>
<summary>⚡ Execution 상세 (최근 세션 습관 — User vs Project)</summary>
| | 👤 User | 📁 Project |
|--------------------------|-------:|-----------:|
| plan-first ratio | {X}% | {X}% |
| delegation ratio | {X}% | {X}% |
| parallel calls | {N} | {N} |
| handoff ratio | {X}% | {X}% |
| completion check ratio | {X}% | {X}% |
| top 3-gram share | {X}% | {X}% |
**자동화 후보 (반복 패턴)**
- User: `Read → Edit → Bash(npm test)` — {N}회
- Project: `...` — {N}회
</details>
<details>
<summary>🔁 Compounding 상세 (축 6 — 하네스의 축적)</summary>
- CLAUDE.md 최근 30일 갱신: {Yes/No} ({commit evidence})
- `.claude/rules/` 최근 90일 추가: {N}개
- `skills/` 최근 90일 추가: {N}개
- `hooks/` 최근 90일 변경: {N}건
- `docs/learnings/` 존재: {Yes/No}
- 세션에서 session-wrap/compound 호출: User {N}회 / Project {N}회
**관찰**
- {예: 최근 이 프로젝트에서 새 rule이 추가된 적이 없음 → 학습이 사람 머리에만 있음}
</details>
📁 Saved: {dir}/ · 🌐 Opened: report.html
대화에 내보낼 때는 축별 섹션을 더 풍부하게 출력한다. 각 축마다:
### {N}. {축 이름} · {스코프 이모지} · {상태 요약}
Score: {NN}/100 L{n} ▓▓▓▓▓▓▓░░░ {XX}% → L{n+1}
핵심:
- ✅ {잘 된 것 1–2개, 근거 숫자 포함}
- ⚠️ {개선 포인트 1–2개, 근거 숫자 포함}
체크리스트:
| ID | L | Item | Status | Evidence |
|----|---|------|--------|----------|
| {row} |
가장 값싼 다음 한 수: {quick win + 커맨드 또는 경로}
6축 전부 동일 구조로 출력. 각 축 섹션은 5–12줄이면 충분.
references/html-template.html 읽기 (자체완결 HTML — 인라인 CSS, 스코어 게이지, 축별 카드, 접힘 패널){{GENERATED_AT}}, {{SCOPE}}, {{PROJECT_NAME}}{{HARNESS_SCORE}}, {{HARNESS_GRADE}}{{USER_SCORE}}, {{USER_LEVEL}}, {{PROJECT_SCORE}}, {{PROJECT_LEVEL}}, {{COMPOUNDING_SCORE}}, {{COMPOUNDING_LEVEL}}{{HEADLINE}}, {{STRENGTH}}, {{WEAKNESS}}{{CYCLE_ROWS}} — 6축 한 줄씩 <li>{cycle_line}</li>{{ACTIONS_GREEN}}, {{ACTIONS_YELLOW}}, {{ACTIONS_RED}} — 액션 카드 <li>{{AXIS_CARDS}} — 6축 카드 (아래 축별 구조){{INVENTORY_TABLE}} — 런타임 인벤토리 테이블{{MATRIX_TABLE}} — 2×3 매트릭스{{FINDINGS_LIST}}Bash: open {dir}/report.html 실행 — macOS 기본 브라우저로 열림.축별 카드 블록 예시(HTML 안에서 반복):
<article class="axis" data-status="{pass|weak|fail|na}">
<header>
<h3>{icon} 축 {N} — {이름}</h3>
<div class="score">
<span class="score-num">{NN}</span>
<div class="bar"><span style="width:{XX}%"></span></div>
<span class="level">L{n}</span>
</div>
</header>
<p class="headline">{요약 한 줄}</p>
<details><summary>체크리스트 · {PASS_N}/{TOTAL_N} 통과</summary>
<table>...</table>
</details>
<p class="next-move">💡 {quick win}</p>
</article>
.harness/check-reports/에 작성/tmp/cc-cache/check-harness/ JSON 5개는 후속 분석에서 재사용 가능npx claudepluginhub team-attention/harnessDiagnoses Claude Code harness health (hooks, skills, agents, rules, MCP, eval) across 8 dimensions, scores 0-24 with S-D grades, and provides improvement suggestions. Scans ~/.claude/. Triggers: harness audit, 하네스 진단.
Scores a project's agent harness across 5 subsystems, identifies the bottleneck, and outputs a prioritized improvement plan. Use to assess readiness for long-run agent sessions or when adopting an agent stack on a new codebase.
Audits Claude Code project configuration for drift and collaboration issues across six layers (CLAUDE.md, rules, skills, hooks, subagents, verifiers), tiered by project complexity.