harness-for-yall 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.ko.md +182 -0
  2. package/README.md +149 -0
  3. package/bin/install.mjs +174 -0
  4. package/package.json +26 -0
  5. package/plugins/be-experts/.claude-plugin/plugin.json +7 -0
  6. package/plugins/be-experts/agents/be-architect.md +138 -0
  7. package/plugins/be-experts/agents/be-implementer.md +210 -0
  8. package/plugins/be-experts/agents/be-provider.md +343 -0
  9. package/plugins/be-experts/agents/be-resilience.md +270 -0
  10. package/plugins/be-experts/agents/be-tester.md +321 -0
  11. package/plugins/be-experts/agents/be-validator.md +208 -0
  12. package/plugins/be-experts/be.md +62 -0
  13. package/plugins/be-experts/skills/be-api/SKILL.md +62 -0
  14. package/plugins/be-experts/skills/be-llm-integration/SKILL.md +87 -0
  15. package/plugins/be-experts/skills/be-mcp-server/SKILL.md +94 -0
  16. package/plugins/be-experts/skills/be-observability/SKILL.md +143 -0
  17. package/plugins/be-experts/skills/be-pipeline/SKILL.md +123 -0
  18. package/plugins/dev-pipeline/.claude-plugin/plugin.json +7 -0
  19. package/plugins/dev-pipeline/agents/dev-backend.md +50 -0
  20. package/plugins/dev-pipeline/agents/dev-frontend.md +48 -0
  21. package/plugins/dev-pipeline/agents/dev-planner.md +64 -0
  22. package/plugins/dev-pipeline/agents/dev-qa.md +75 -0
  23. package/plugins/dev-pipeline/agents/dev-reviewer.md +71 -0
  24. package/plugins/dev-pipeline/skills/dev-feature/SKILL.md +78 -0
  25. package/plugins/explore-team/.claude-plugin/plugin.json +7 -0
  26. package/plugins/explore-team/agents/explore-evidence.md +83 -0
  27. package/plugins/explore-team/agents/explore-hypothesizer.md +74 -0
  28. package/plugins/explore-team/agents/explore-scout.md +76 -0
  29. package/plugins/explore-team/agents/explore-synthesizer.md +99 -0
  30. package/plugins/explore-team/explore.md +45 -0
  31. package/plugins/explore-team/skills/explore-hypothesis/SKILL.md +41 -0
  32. package/plugins/explore-team/skills/explore-investigate/SKILL.md +53 -0
  33. package/plugins/explore-team/skills/explore-quick/SKILL.md +45 -0
  34. package/plugins/fe-experts/.claude-plugin/plugin.json +7 -0
  35. package/plugins/fe-experts/agents/fe-architect.md +110 -0
  36. package/plugins/fe-experts/agents/fe-implementer.md +144 -0
  37. package/plugins/fe-experts/agents/fe-perf.md +167 -0
  38. package/plugins/fe-experts/agents/fe-styler.md +157 -0
  39. package/plugins/fe-experts/agents/fe-tester.md +246 -0
  40. package/plugins/fe-experts/skills/fe-component/SKILL.md +59 -0
  41. package/plugins/fe-experts/skills/fe-page/SKILL.md +57 -0
  42. package/plugins/fe-experts/skills/fe-refactor/SKILL.md +44 -0
  43. package/plugins/fe-experts/skills/fe-review/SKILL.md +36 -0
  44. package/plugins/fe-experts/skills/fe-test/SKILL.md +37 -0
  45. package/plugins/review-pipeline/.claude-plugin/plugin.json +7 -0
  46. package/plugins/review-pipeline/agents/review-judge.md +87 -0
  47. package/plugins/review-pipeline/agents/review-moderator.md +72 -0
  48. package/plugins/review-pipeline/agents/review-screener-1.md +63 -0
  49. package/plugins/review-pipeline/agents/review-screener-2.md +67 -0
  50. package/plugins/review-pipeline/agents/review-screener-3.md +76 -0
  51. package/plugins/review-pipeline/skills/review-code/SKILL.md +83 -0
package/README.ko.md ADDED
@@ -0,0 +1,182 @@
1
+ # harness-for-yall
2
+
3
+ [Claude Code](https://docs.anthropic.com/en/docs/claude-code)용 멀티에이전트 하네스: 에이전트 25개, 스킬 15개, 5개 팀.
4
+
5
+ > **[English](./README.md)**
6
+
7
+ ## 이게 뭔데?
8
+
9
+ Claude Code 에이전트를 5개 전문 팀으로 조직한 사전 설정 패키지. 각 팀은 목적에 맞는 멀티에이전트 오케스트레이션 패턴을 사용한다.
10
+
11
+ ## 팀 구성
12
+
13
+ | 플러그인 | 패턴 | 에이전트 | 스킬 | 하는 일 |
14
+ |---------|------|:-------:|:----:|--------|
15
+ | `dev-pipeline` | Pipeline | 5 | 1 | 기능 개발 전체: 기획 → FE+BE 병렬 → 리뷰 게이트 → QA |
16
+ | `review-pipeline` | Fan-out / Fan-in | 5 | 1 | 코드 리뷰: 3개 스크리너 병렬 → 모더레이터 → 판정 (SARIF 출력) |
17
+ | `fe-experts` | Expert Pool | 5 | 5 | 프론트엔드: 아키텍트 → 구현/스타일 → 성능 + 테스트 |
18
+ | `be-experts` | Pipeline + Expert Pool | 6 | 5 | 백엔드: 아키텍트 → 구현+검증 → 회복성/프로바이더 → 테스트 |
19
+ | `explore-team` | Hierarchical Delegation | 4 | 3 | 코드베이스 탐색: 스카우트(opus) → 가설 → 증거 → 종합 |
20
+
21
+ ## 설치
22
+
23
+ ### 방법 1 — npx
24
+
25
+ ```bash
26
+ # 전체 설치
27
+ npx @justn-hyeok/claude-code-harness
28
+
29
+ # 원하는 팀만 골라서
30
+ npx @justn-hyeok/claude-code-harness fe-experts be-experts
31
+
32
+ # 미리보기
33
+ npx @justn-hyeok/claude-code-harness --dry-run
34
+
35
+ # 기존 파일 덮어쓰기
36
+ npx @justn-hyeok/claude-code-harness --force
37
+ ```
38
+
39
+ `~/.claude/`에 에이전트/스킬 파일을 복사한다. 의존성 없음.
40
+
41
+ ### 방법 2 — Plugin Marketplace
42
+
43
+ Claude Code 안에서:
44
+
45
+ ```
46
+ /plugin marketplace add bssm-oss/harness-for-yall
47
+ ```
48
+
49
+ 필요한 팀 설치:
50
+
51
+ ```
52
+ /plugin install dev-pipeline@justn-harness
53
+ /plugin install review-pipeline@justn-harness
54
+ /plugin install fe-experts@justn-harness
55
+ /plugin install be-experts@justn-harness
56
+ /plugin install explore-team@justn-harness
57
+ ```
58
+
59
+ ### 방법 3 — 쉘 스크립트
60
+
61
+ ```bash
62
+ git clone https://github.com/bssm-oss/harness-for-yall.git
63
+ cd harness-for-yall
64
+ chmod +x install.sh && ./install.sh
65
+ ```
66
+
67
+ ## 아키텍처
68
+
69
+ ```
70
+ ┌─────────────┐
71
+ │ 사용자 요청 │
72
+ └──────┬──────┘
73
+
74
+ ┌────────────┼────────────┐
75
+ ▼ ▼ ▼
76
+ ┌──────────┐ ┌──────────┐ ┌──────────┐
77
+ │ 특화 팀 │ │ 범용 팀 │ │ 분석 팀 │
78
+ │ fe / be │ │ dev │ │ explore │
79
+ └────┬─────┘ └────┬─────┘ └────┬─────┘
80
+ │ │ │
81
+ ▼ ▼ ▼
82
+ ┌──────────────────────────────────────┐
83
+ │ review-pipeline │
84
+ │ 스크리너×3 → 모더레이터 → 판정관 │
85
+ └──────────────────────────────────────┘
86
+ ```
87
+
88
+ ### 라우팅 규칙
89
+
90
+ 1. **구체성 우선** — 프론트/백엔드 특화 작업이면 `dev-*` 말고 `fe-*` / `be-*` 선택
91
+ 2. **체이닝 가능** — `explore → dev → review`로 복잡한 워크플로우 연결
92
+ 3. **과잉이면 생략** — 한 줄 수정이나 단순 질문에 하네스는 불필요
93
+
94
+ ### 모델 전략
95
+
96
+ | 에이전트 | 모델 | 이유 |
97
+ |---------|------|------|
98
+ | `explore-scout` | opus | 아키텍처 분석 오케스트레이션에는 판단력이 중요 |
99
+ | 나머지 전부 | sonnet | 비용 효율 — 구현 작업은 sonnet으로 충분 |
100
+
101
+ ## 팀별 상세
102
+
103
+ ### dev-pipeline (기능 개발)
104
+
105
+ ```
106
+ 사용자 요청 → dev-planner (기획)
107
+
108
+ dev-frontend + dev-backend (병렬 구현)
109
+
110
+ dev-reviewer (리뷰 게이트)
111
+
112
+ dev-qa (테스트)
113
+ ```
114
+
115
+ **스킬:** `/dev-feature` — 기능 개발 전체 파이프라인 실행
116
+
117
+ ### review-pipeline (코드 리뷰)
118
+
119
+ ```
120
+ 코드/PR → review-screener-1 (정확성) ──┐
121
+ → review-screener-2 (보안) ──┼→ review-moderator → review-judge
122
+ → review-screener-3 (성능/스타일) ─┘ (통합) (판정)
123
+ ```
124
+
125
+ **스킬:** `/review-code` — SARIF v2.1.0 호환 리포트 출력
126
+
127
+ ### fe-experts (프론트엔드)
128
+
129
+ ```
130
+ 요청 → fe-architect (설계)
131
+ ├→ fe-implementer (구현)
132
+ ├→ fe-styler (스타일/접근성)
133
+ ├→ fe-perf (성능 리뷰)
134
+ └→ fe-tester (테스트)
135
+ ```
136
+
137
+ **스킬:** `/fe-component`, `/fe-page`, `/fe-refactor`, `/fe-review`, `/fe-test`
138
+
139
+ ### be-experts (백엔드)
140
+
141
+ ```
142
+ 요청 → be-architect (API 설계)
143
+ ├→ be-implementer + be-validator (병렬)
144
+ ├→ be-resilience (회로 차단기/재시도)
145
+ ├→ be-provider (LLM 멀티프로바이더)
146
+ └→ be-tester (계약 테스트)
147
+ ```
148
+
149
+ **스킬:** `/be-api`, `/be-mcp-server`, `/be-pipeline`, `/be-llm-integration`, `/be-observability`
150
+
151
+ ### explore-team (코드베이스 탐색)
152
+
153
+ ```
154
+ 질문 → explore-scout (opus, 정찰 + 오케스트레이션)
155
+ ├→ explore-hypothesizer (경쟁 가설 생성)
156
+ ├→ explore-evidence (증거 수집)
157
+ └→ explore-synthesizer (아키텍처 리포트)
158
+ ```
159
+
160
+ **스킬:** `/explore-investigate`, `/explore-quick`, `/explore-hypothesis`
161
+
162
+ ## 커스터마이징
163
+
164
+ 각 에이전트는 YAML frontmatter가 있는 독립 `.md` 파일. 자유롭게 수정 가능:
165
+
166
+ ```yaml
167
+ ---
168
+ name: fe-architect
169
+ description: "React/Next.js component architecture"
170
+ model: sonnet # opus로 바꾸면 업그레이드
171
+ tools:
172
+ - Read
173
+ - Glob
174
+ - Grep
175
+ ---
176
+ ```
177
+
178
+ 스킬은 `plugins/<팀>/skills/<이름>/SKILL.md` 형태. 새 스킬을 추가하려면 같은 구조로 폴더 만들면 된다.
179
+
180
+ ## 라이선스
181
+
182
+ MIT
package/README.md ADDED
@@ -0,0 +1,149 @@
1
+ # harness-for-yall
2
+
3
+ Multi-agent harness for [Claude Code](https://docs.anthropic.com/en/docs/claude-code): 25 agents, 15 skills, 5 teams.
4
+
5
+ > **[한국어 문서](./README.ko.md)**
6
+
7
+ ## What is this?
8
+
9
+ A pre-configured set of Claude Code agents organized into 5 specialized teams. Each team uses a different multi-agent orchestration pattern optimized for its purpose.
10
+
11
+ ## Teams
12
+
13
+ | Plugin | Pattern | Agents | Skills | What it does |
14
+ |--------|---------|:------:|:------:|-------------|
15
+ | `dev-pipeline` | Pipeline | 5 | 1 | Full feature dev: planner → FE+BE parallel → reviewer gate → QA |
16
+ | `review-pipeline` | Fan-out / Fan-in | 5 | 1 | Code review: 3 parallel screeners → moderator → judge (SARIF output) |
17
+ | `fe-experts` | Expert Pool | 5 | 5 | Frontend: architect → implementer / styler → perf + tester |
18
+ | `be-experts` | Pipeline + Expert Pool | 6 | 5 | Backend: architect → impl + validator → resilience / provider → tester |
19
+ | `explore-team` | Hierarchical Delegation | 4 | 3 | Codebase exploration: scout(opus) → hypothesizer → evidence → synthesizer |
20
+
21
+ ## Install
22
+
23
+ ### Option 1 — npx
24
+
25
+ ```bash
26
+ # All plugins
27
+ npx @justn-hyeok/claude-code-harness
28
+
29
+ # Pick specific teams
30
+ npx @justn-hyeok/claude-code-harness fe-experts be-experts
31
+
32
+ # Preview first
33
+ npx @justn-hyeok/claude-code-harness --dry-run
34
+
35
+ # Overwrite existing
36
+ npx @justn-hyeok/claude-code-harness --force
37
+ ```
38
+
39
+ Copies agents/skills to `~/.claude/`. Zero dependencies.
40
+
41
+ ### Option 2 — Plugin Marketplace
42
+
43
+ Inside Claude Code:
44
+
45
+ ```
46
+ /plugin marketplace add bssm-oss/harness-for-yall
47
+ ```
48
+
49
+ Then install what you need:
50
+
51
+ ```
52
+ /plugin install dev-pipeline@justn-harness
53
+ /plugin install review-pipeline@justn-harness
54
+ /plugin install fe-experts@justn-harness
55
+ /plugin install be-experts@justn-harness
56
+ /plugin install explore-team@justn-harness
57
+ ```
58
+
59
+ ### Option 3 — Shell script
60
+
61
+ ```bash
62
+ git clone https://github.com/bssm-oss/harness-for-yall.git
63
+ cd harness-for-yall
64
+ chmod +x install.sh && ./install.sh
65
+ ```
66
+
67
+ ## Architecture
68
+
69
+ ```
70
+ ┌─────────────┐
71
+ │ User Task │
72
+ └──────┬──────┘
73
+
74
+ ┌────────────┼────────────┐
75
+ ▼ ▼ ▼
76
+ ┌──────────┐ ┌──────────┐ ┌──────────┐
77
+ │ Specific │ │ Generic │ │ Analysis │
78
+ │ fe / be │ │ dev │ │ explore │
79
+ └────┬─────┘ └────┬─────┘ └────┬─────┘
80
+ │ │ │
81
+ ▼ ▼ ▼
82
+ ┌──────────────────────────────────────┐
83
+ │ review-pipeline │
84
+ │ screener×3 → moderator → judge │
85
+ └──────────────────────────────────────┘
86
+ ```
87
+
88
+ ### Routing Rules
89
+
90
+ 1. **Specificity first** — `fe-*` / `be-*` over `dev-*` when the task is clearly frontend or backend
91
+ 2. **Chainable** — `explore → dev → review` for complex workflows
92
+ 3. **Skip when overkill** — One-line fixes and simple questions don't need a harness
93
+
94
+ ### Model Strategy
95
+
96
+ | Agent | Model | Why |
97
+ |-------|-------|-----|
98
+ | `explore-scout` | opus | Orchestration quality matters for architecture analysis |
99
+ | Everything else | sonnet | Cost efficiency — sonnet handles implementation well |
100
+
101
+ ## Structure
102
+
103
+ ```
104
+ .claude-plugin/
105
+ marketplace.json # Plugin Marketplace catalog
106
+ plugins/
107
+ dev-pipeline/ # 5 agents, 1 skill
108
+ .claude-plugin/plugin.json
109
+ agents/ # dev-planner, dev-frontend, dev-backend, dev-reviewer, dev-qa
110
+ skills/dev-feature/
111
+ review-pipeline/ # 5 agents, 1 skill
112
+ agents/ # review-screener-{1,2,3}, review-moderator, review-judge
113
+ skills/review-code/
114
+ fe-experts/ # 5 agents, 5 skills
115
+ agents/ # fe-architect, fe-implementer, fe-styler, fe-perf, fe-tester
116
+ skills/ # fe-component, fe-page, fe-refactor, fe-review, fe-test
117
+ be-experts/ # 6 agents, 5 skills
118
+ agents/ # be-architect, be-implementer, be-validator, be-resilience, be-provider, be-tester
119
+ skills/ # be-api, be-mcp-server, be-pipeline, be-llm-integration, be-observability
120
+ explore-team/ # 4 agents, 3 skills
121
+ agents/ # explore-scout, explore-hypothesizer, explore-evidence, explore-synthesizer
122
+ skills/ # explore-investigate, explore-quick, explore-hypothesis
123
+ bin/install.mjs # npx CLI
124
+ package.json # npm config
125
+ install.sh # Shell installer
126
+ uninstall.sh # Shell uninstaller
127
+ ```
128
+
129
+ ## Customization
130
+
131
+ Each agent is a standalone `.md` file with YAML frontmatter. Edit freely:
132
+
133
+ ```yaml
134
+ ---
135
+ name: fe-architect
136
+ description: "React/Next.js component architecture"
137
+ model: sonnet # change to opus if you want
138
+ tools:
139
+ - Read
140
+ - Glob
141
+ - Grep
142
+ ---
143
+ ```
144
+
145
+ Skills are in `SKILL.md` format inside named folders. Add your own by creating `plugins/<team>/skills/<name>/SKILL.md`.
146
+
147
+ ## License
148
+
149
+ MIT
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { existsSync, mkdirSync, cpSync, readdirSync, statSync } from 'node:fs';
4
+ import { join, dirname, basename } from 'node:path';
5
+ import { homedir } from 'node:os';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { createInterface } from 'node:readline';
8
+
9
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
+ const PLUGINS_DIR = join(__dirname, '..', 'plugins');
11
+ const CLAUDE_HOME = join(homedir(), '.claude');
12
+
13
+ function ask(question) {
14
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
15
+ return new Promise((resolve) => {
16
+ rl.question(question, (answer) => {
17
+ rl.close();
18
+ resolve(answer.trim().toLowerCase());
19
+ });
20
+ });
21
+ }
22
+
23
+ function collectFiles(src, dest, list = []) {
24
+ if (!existsSync(src)) return list;
25
+ const entries = readdirSync(src, { withFileTypes: true });
26
+ for (const entry of entries) {
27
+ const srcPath = join(src, entry.name);
28
+ const destPath = join(dest, entry.name);
29
+ if (entry.isDirectory()) {
30
+ collectFiles(srcPath, destPath, list);
31
+ } else {
32
+ list.push({ src: srcPath, dest: destPath });
33
+ }
34
+ }
35
+ return list;
36
+ }
37
+
38
+ function printHelp() {
39
+ console.log(`
40
+ claude-code-harness — install multi-agent harness to ~/.claude/
41
+
42
+ Usage:
43
+ npx claude-code-harness [options] [plugins...]
44
+
45
+ Options:
46
+ --force, -f Overwrite existing files
47
+ --dry-run Preview without copying
48
+ --help, -h Show this help
49
+
50
+ Plugins:
51
+ dev-pipeline Feature development pipeline (5 agents, 1 skill)
52
+ review-pipeline Code review fan-out/fan-in (5 agents, 1 skill)
53
+ fe-experts Frontend expert pool (5 agents, 5 skills)
54
+ be-experts Backend expert pool (6 agents, 5 skills)
55
+ explore-team Codebase exploration (4 agents, 3 skills)
56
+
57
+ Examples:
58
+ npx claude-code-harness # Install all plugins
59
+ npx claude-code-harness fe-experts # Install only frontend
60
+ npx claude-code-harness fe-experts be-experts # Install FE + BE
61
+ npx claude-code-harness --dry-run # Preview all
62
+ `);
63
+ }
64
+
65
+ async function main() {
66
+ const args = process.argv.slice(2);
67
+ const force = args.includes('--force') || args.includes('-f');
68
+ const dryRun = args.includes('--dry-run');
69
+ const help = args.includes('--help') || args.includes('-h');
70
+
71
+ if (help) {
72
+ printHelp();
73
+ process.exit(0);
74
+ }
75
+
76
+ const flags = ['--force', '-f', '--dry-run', '--help', '-h'];
77
+ const requestedPlugins = args.filter((a) => !flags.includes(a));
78
+
79
+ const allPlugins = readdirSync(PLUGINS_DIR, { withFileTypes: true })
80
+ .filter((d) => d.isDirectory())
81
+ .map((d) => d.name);
82
+
83
+ const plugins =
84
+ requestedPlugins.length > 0
85
+ ? requestedPlugins.filter((p) => {
86
+ if (!allPlugins.includes(p)) {
87
+ console.log(` unknown plugin: ${p} (available: ${allPlugins.join(', ')})`);
88
+ return false;
89
+ }
90
+ return true;
91
+ })
92
+ : allPlugins;
93
+
94
+ if (plugins.length === 0) {
95
+ console.log(' no plugins to install.');
96
+ process.exit(1);
97
+ }
98
+
99
+ console.log('\n Claude Code Harness Installer\n');
100
+ console.log(` Target: ${CLAUDE_HOME}`);
101
+ console.log(` Plugins: ${plugins.join(', ')}`);
102
+ console.log(` Mode: ${dryRun ? 'dry-run' : force ? 'force' : 'safe (skip existing)'}\n`);
103
+
104
+ // Collect all file operations
105
+ const operations = [];
106
+
107
+ for (const plugin of plugins) {
108
+ const pluginDir = join(PLUGINS_DIR, plugin);
109
+
110
+ // agents/ -> ~/.claude/agents/
111
+ const agentsDir = join(pluginDir, 'agents');
112
+ if (existsSync(agentsDir)) {
113
+ operations.push(...collectFiles(agentsDir, join(CLAUDE_HOME, 'agents')));
114
+ }
115
+
116
+ // skills/<name>/SKILL.md -> ~/.claude/skills/<name>.md (flatten)
117
+ const skillsDir = join(pluginDir, 'skills');
118
+ if (existsSync(skillsDir)) {
119
+ const skillFolders = readdirSync(skillsDir, { withFileTypes: true }).filter((d) =>
120
+ d.isDirectory()
121
+ );
122
+ for (const folder of skillFolders) {
123
+ const skillFile = join(skillsDir, folder.name, 'SKILL.md');
124
+ if (existsSync(skillFile)) {
125
+ operations.push({
126
+ src: skillFile,
127
+ dest: join(CLAUDE_HOME, 'skills', `${folder.name}.md`),
128
+ });
129
+ }
130
+ }
131
+ }
132
+
133
+ // harness docs (*.md at plugin root, excluding .claude-plugin/)
134
+ const rootMds = readdirSync(pluginDir)
135
+ .filter((f) => f.endsWith('.md') && statSync(join(pluginDir, f)).isFile());
136
+ for (const md of rootMds) {
137
+ operations.push({
138
+ src: join(pluginDir, md),
139
+ dest: join(CLAUDE_HOME, 'harnesses', md),
140
+ });
141
+ }
142
+ }
143
+
144
+ // Execute
145
+ let copied = 0;
146
+ let skipped = 0;
147
+
148
+ for (const op of operations) {
149
+ const rel = op.dest.replace(CLAUDE_HOME + '/', '');
150
+ if (dryRun) {
151
+ console.log(` [dry-run] ${rel}`);
152
+ copied++;
153
+ continue;
154
+ }
155
+
156
+ mkdirSync(dirname(op.dest), { recursive: true });
157
+
158
+ if (existsSync(op.dest) && !force) {
159
+ console.log(` skip: ${rel}`);
160
+ skipped++;
161
+ } else {
162
+ cpSync(op.src, op.dest);
163
+ console.log(` copy: ${rel}`);
164
+ copied++;
165
+ }
166
+ }
167
+
168
+ console.log(`\n Done! ${dryRun ? 'Would copy' : 'Copied'}: ${copied}, Skipped: ${skipped}\n`);
169
+ }
170
+
171
+ main().catch((err) => {
172
+ console.error(`Error: ${err.message}`);
173
+ process.exit(1);
174
+ });
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "harness-for-yall",
3
+ "version": "1.0.0",
4
+ "description": "Multi-agent harness for Claude Code: dev pipeline, code review, frontend/backend experts, codebase exploration",
5
+ "type": "module",
6
+ "bin": {
7
+ "claude-code-harness": "bin/install.mjs"
8
+ },
9
+ "files": [
10
+ "bin/",
11
+ "plugins/"
12
+ ],
13
+ "keywords": [
14
+ "claude-code",
15
+ "harness",
16
+ "agents",
17
+ "multi-agent",
18
+ "code-review",
19
+ "pipeline"
20
+ ],
21
+ "author": "justn-hyeok",
22
+ "license": "MIT",
23
+ "engines": {
24
+ "node": ">=18"
25
+ }
26
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "be-experts",
3
+ "version": "1.0.0",
4
+ "description": "Backend expert pool for Hono/Express with LLM multi-provider support",
5
+ "author": { "name": "justn-hyeok" },
6
+ "keywords": ["backend", "api", "hono", "express", "llm", "zod"]
7
+ }
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: be-architect
3
+ description: "API design, resource modeling, route structure, middleware layering, and error strategy for Hono/Express backends"
4
+ model: sonnet
5
+ tools:
6
+ - Read
7
+ - Glob
8
+ - Grep
9
+ - mcp__sequential-thinking__sequentialthinking
10
+ ---
11
+
12
+ # Backend Architect Agent
13
+
14
+ You are an expert backend architect specializing in Node.js API design with Hono and Express, TypeScript strict mode, and multi-agent LLM orchestration systems.
15
+
16
+ ## Core Responsibilities
17
+
18
+ 1. **API Design**: RESTful resource modeling, RPC endpoint design, URL structure, HTTP method semantics
19
+ 2. **Route Structure**: Hono app hierarchy, route groups, base paths, versioning (e.g., `/api/v1/`)
20
+ 3. **Middleware Layering**: Auth → validation → rate limiting → error handling → logging
21
+ 4. **Error Strategy**: RFC 9457 Problem Details for all error responses
22
+ 5. **Task Delegation**: Route implementation tasks to specialist agents
23
+
24
+ ## Architecture Principles
25
+
26
+ - **Hono First**: Default to Hono for new projects (edge-ready, type-safe). Express only for legacy constraints
27
+ - **Zod Everywhere**: All request/response validation through Zod schemas
28
+ - **Dependency Injection**: Constructor injection or factory patterns — no global singletons
29
+ - **Layered Architecture**: Route → Handler → Service → Repository/Adapter
30
+ - **OpenAPI Auto-gen**: Every endpoint must produce OpenAPI spec (Hono's built-in or zod-openapi)
31
+
32
+ ## Project Structure Convention
33
+
34
+ ```
35
+ src/
36
+ index.ts # App entry point
37
+ app.ts # Hono/Express app factory
38
+ routes/
39
+ v1/ # API version group
40
+ users.ts # Resource routes
41
+ health.ts # Health check endpoints
42
+ handlers/ # Request handlers (thin — delegate to services)
43
+ services/ # Business logic
44
+ adapters/ # External API adapters (LLM providers, etc.)
45
+ middleware/
46
+ auth.ts # Authentication
47
+ validator.ts # Zod validation middleware
48
+ error-handler.ts # RFC 9457 error formatting
49
+ circuit-breaker.ts # Circuit breaker wrapper
50
+ logger.ts # pino request logging
51
+ schemas/ # Zod schemas (shared between validation & OpenAPI)
52
+ types/ # TypeScript types/interfaces
53
+ lib/ # Utilities, constants, config
54
+ __tests__/ # Integration tests
55
+ fixtures/ # Test fixtures
56
+ ```
57
+
58
+ ## RFC 9457 Problem Details Standard
59
+
60
+ All error responses MUST follow this format:
61
+
62
+ ```typescript
63
+ interface ProblemDetail {
64
+ type: string; // URI identifying the problem type
65
+ title: string; // Short human-readable summary
66
+ status: number; // HTTP status code
67
+ detail?: string; // Explanation specific to this occurrence
68
+ instance?: string; // URI identifying the specific occurrence
69
+ [key: string]: unknown; // Extension fields
70
+ }
71
+ ```
72
+
73
+ ## Middleware Layer Order
74
+
75
+ ```
76
+ 1. Request ID (x-request-id generation)
77
+ 2. Logger (pino request/response logging)
78
+ 3. CORS
79
+ 4. Auth (JWT/API key validation)
80
+ 5. Rate Limiting
81
+ 6. Input Validation (Zod)
82
+ 7. → Route Handler →
83
+ 8. Error Handler (RFC 9457 formatting)
84
+ ```
85
+
86
+ ## Expert Pool Pattern — Delegation Rules
87
+
88
+ You are the **router** in the Expert Pool pattern. When receiving a task:
89
+
90
+ 1. **Analyze** the requirements
91
+ 2. **Design** the API (routes, schemas, middleware, data flow)
92
+ 3. **Write spec** to `.claude/specs/be-{slug}.md`
93
+ 4. **Delegate** to specialists:
94
+
95
+ | Task Type | Delegate To | What to Include |
96
+ |-----------|-------------|-----------------|
97
+ | Route/handler implementation | `be-implementer` | Route spec, handler signatures, middleware chain |
98
+ | Schema/validation | `be-validator` | Schema definitions, OpenAPI requirements, error formats |
99
+ | Both impl + validation | `be-implementer` + `be-validator` in parallel | Full spec |
100
+ | External API calls | `be-resilience` | Which services, timeout/retry requirements |
101
+ | LLM provider integration | `be-provider` | Provider list, streaming needs, fallback strategy |
102
+
103
+ 5. After implementation, **mandatory gate**: send to `be-tester` for contract tests.
104
+
105
+ ## Delegation Template
106
+
107
+ ```markdown
108
+ ## Task: [Endpoint/Feature Name]
109
+
110
+ ### Architecture Decision
111
+ - Framework: Hono | Express
112
+ - Pattern: REST | RPC
113
+ - Auth: JWT | API Key | None
114
+ - External dependencies: [list]
115
+
116
+ ### Route Spec
117
+ - Method: GET | POST | PUT | DELETE
118
+ - Path: /api/v1/...
119
+ - Request schema: [Zod schema name]
120
+ - Response schema: [Zod schema name]
121
+ - Error cases: [list with RFC 9457 types]
122
+
123
+ ### Middleware Chain
124
+ [ordered list]
125
+
126
+ ### Files to Create/Modify
127
+ - [file path]: [description]
128
+
129
+ ### Constraints
130
+ - [specific requirements]
131
+ ```
132
+
133
+ ## When to Escalate
134
+
135
+ - If the task requires database schema changes — confirm with user
136
+ - If auth strategy is ambiguous — ask user for clarification
137
+ - If the endpoint has no clear resource model — suggest alternatives and confirm
138
+ - If circuit breaker thresholds need tuning — propose defaults and confirm