create-harness-vibe-coding 0.1.1 → 0.1.3
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.
- package/README.md +169 -0
- package/package.json +2 -3
- package/src/generator.js +3 -4
- package/src/index.js +17 -18
- package/src/prompts.js +7 -7
- package/templates/common/CLAUDE.md +45 -43
- package/templates/common/MEMORY.md +20 -20
- package/templates/common/SETUP.md +43 -43
- package/templates/common/docs/README.md +72 -72
package/README.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://img.shields.io/npm/v/create-harness-vibe-coding?color=blue" alt="npm version">
|
|
3
|
+
<img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="node">
|
|
4
|
+
<img src="https://img.shields.io/npm/l/create-harness-vibe-coding" alt="license">
|
|
5
|
+
<img src="https://img.shields.io/github/stars/zingspark/create-harness-vibe-coding?style=social" alt="stars">
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<h1 align="center">⚡ create-harness-vibe-coding</h1>
|
|
9
|
+
<p align="center">
|
|
10
|
+
<b>4 seconds from zero to a production-grade agentic harness.</b><br>
|
|
11
|
+
<sub>CLAUDE.md → docs/ → .claude/ → tests/ — ECC-ready, Superpowers-compatible.</sub>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 🎯 One Command
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx create-harness-vibe-coding@latest my-project
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
| What You Get | Count |
|
|
23
|
+
|-------------|-------|
|
|
24
|
+
| Architecture docs (layers, data flow, state machines, port contracts) | 9 docs |
|
|
25
|
+
| Agent definitions (code-reviewer, risk-auditor, etc.) | ECC-ready skeleton |
|
|
26
|
+
| Workflow skills (TDD, backtest, data pipeline) | ECC-ready skeleton |
|
|
27
|
+
| Coding rules (universal + language-specific) | common.md included |
|
|
28
|
+
| Settings & hooks (permissions, automation) | pre-configured |
|
|
29
|
+
| **Total files provisioned** | **17 docs + configs** |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 🚀 Why This Exists
|
|
34
|
+
|
|
35
|
+
Every Claude Code project has the same cold-start problem:
|
|
36
|
+
|
|
37
|
+
| Without Harness | With `create-harness-vibe-coding` |
|
|
38
|
+
|---|---|
|
|
39
|
+
| ❌ Agents skip docs, hallucinate behavior | ✅ CLAUDE.md routes agents to exact docs by role |
|
|
40
|
+
| ❌ No TDD enforcement — agents ship untested code | ✅ agent-workflow.md enforces RED-GREEN-REFACTOR |
|
|
41
|
+
| ❌ Architecture boundaries blur over time | ✅ domain/ports.md locks layer contracts |
|
|
42
|
+
| ❌ State machines live in someone's head | ✅ state-machines.md documents every transition |
|
|
43
|
+
| ❌ Cross-session memory lost | ✅ MEMORY.md + self-learning system |
|
|
44
|
+
| ❌ 2+ hours to set up project structure | ✅ **4 seconds** |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 🧠 How It Works
|
|
49
|
+
|
|
50
|
+
```mermaid
|
|
51
|
+
graph LR
|
|
52
|
+
A[npx scaffold] --> B[CLAUDE.md + docs/ + .claude/]
|
|
53
|
+
B --> C[Start Claude Code]
|
|
54
|
+
C --> D[Claude reads SETUP.md]
|
|
55
|
+
D --> E[Pulls agents/skills/rules from ECC]
|
|
56
|
+
E --> F[Project ready — TDD loop active]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### What happens after `npx`:
|
|
60
|
+
|
|
61
|
+
1. **CLAUDE.md** — Agent reads this first. Role-based routing table sends each agent to the right docs.
|
|
62
|
+
2. **docs/architecture.md** — Clean architecture layers. Harness runs the shell; domain defines the business.
|
|
63
|
+
3. **docs/agent-workflow.md** — TDD loop, subagent roles, write set rules, conflict resolution.
|
|
64
|
+
4. **docs/data-flow.md** — Every event's normal path + failure branches — the #1 doc AI fabricates without.
|
|
65
|
+
5. **docs/state-machines.md** — Every stateful component. Transition table. Illegal transitions explicitly denied.
|
|
66
|
+
6. **.claude/settings.json** — Permissions pre-configured (allow git/npm/pytest, deny rm/sudo/curl). Hooks ready.
|
|
67
|
+
7. **SETUP.md** — Temporary guide. Claude reads it, pulls agents/skills/rules from [ECC](https://github.com/affaan-m/ECC). User deletes it after.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 📦 What's Inside
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
my-project/
|
|
75
|
+
├── CLAUDE.md ← Role-based doc navigation + memory/self-learning
|
|
76
|
+
├── AGENTS.md ← Coding agent entry
|
|
77
|
+
├── MEMORY.md ← Cross-session resource index
|
|
78
|
+
├── SETUP.md ← Temporary init guide (delete after setup)
|
|
79
|
+
├── .gitignore
|
|
80
|
+
├── docs/
|
|
81
|
+
│ ├── README.md ← Project doc entry point
|
|
82
|
+
│ ├── harness/
|
|
83
|
+
│ │ ├── architecture.md ← Layer rules, components, ADRs
|
|
84
|
+
│ │ ├── agent-workflow.md ← TDD loop, subagent roles, write sets
|
|
85
|
+
│ │ ├── data-flow.md ← Event lifecycle: normal + failure paths
|
|
86
|
+
│ │ └── state-machines.md ← State enums, transition tables, guards
|
|
87
|
+
│ ├── domain/
|
|
88
|
+
│ │ └── ports.md ← Port contracts: pre/postconditions, errors
|
|
89
|
+
│ ├── features/
|
|
90
|
+
│ │ └── _template.md ← Kiro-lite feature doc template
|
|
91
|
+
│ └── research/
|
|
92
|
+
│ ├── PRD.md ← MVP scope & acceptance template
|
|
93
|
+
│ └── scaffolds.md ← Tech research & decision record
|
|
94
|
+
├── .claude/
|
|
95
|
+
│ ├── settings.json ← Permissions + hooks
|
|
96
|
+
│ ├── agents/ ← Pull from ECC
|
|
97
|
+
│ ├── skills/ ← Pull from ECC
|
|
98
|
+
│ ├── hooks/ ← Configure as needed
|
|
99
|
+
│ └── rules/ecc/
|
|
100
|
+
│ └── common.md ← Universal coding rules (always active)
|
|
101
|
+
└── tests/ ← Your test suite goes here
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 🌐 Ecosystem Compatibility
|
|
107
|
+
|
|
108
|
+
| Platform | Status |
|
|
109
|
+
|----------|--------|
|
|
110
|
+
| [ECC](https://github.com/affaan-m/ECC) (206K+ ★) | ✅ Agents, skills, rules auto-pull |
|
|
111
|
+
| [Superpowers](https://github.com/obra/superpowers) (185K+ ★) | ✅ `/plugin install superpowers` |
|
|
112
|
+
| [awesome-claude-code-config](https://github.com/Mizoreww/awesome-claude-code-config) | ✅ Rules & self-learning configs |
|
|
113
|
+
| [claude-toolbox](https://github.com/serpro69/claude-toolbox) | ✅ Multi-language skills |
|
|
114
|
+
| Claude Code | ✅ Native settings.json + hooks |
|
|
115
|
+
| Codex / Cursor / Gemini CLI | ✅ Compatible (docs-only pattern) |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 🔧 Usage
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Interactive mode
|
|
123
|
+
npx create-harness-vibe-coding@latest
|
|
124
|
+
|
|
125
|
+
# Non-interactive (CI/CD)
|
|
126
|
+
npx create-harness-vibe-coding@latest my-app ./dist/my-app
|
|
127
|
+
|
|
128
|
+
# Always get the latest version
|
|
129
|
+
npx create-harness-vibe-coding@latest my-project
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### After scaffolding, tell Claude:
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
"Read SETUP.md. This is a Python quant project. Pull agents, skills, and rules from ECC."
|
|
136
|
+
"Read SETUP.md. This is a React TypeScript app. I need TDD workflow and code review."
|
|
137
|
+
"Read SETUP.md. This is a Go microservice. Set up matching agents and testing skills."
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 📊 Performance
|
|
143
|
+
|
|
144
|
+
| Metric | Value |
|
|
145
|
+
|--------|-------|
|
|
146
|
+
| Cold install + scaffold | < 4s |
|
|
147
|
+
| Package size | 19.9 kB |
|
|
148
|
+
| Unpacked | 49.4 kB |
|
|
149
|
+
| Dependencies | 2 (@clack/prompts, picocolors) |
|
|
150
|
+
| Node requirement | ≥ 18 |
|
|
151
|
+
| Zero runtime deps after scaffold | ✅ |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 👥 Contributing
|
|
156
|
+
|
|
157
|
+
PRs welcome. The template docs live in `templates/common/` — edit them to change what gets scaffolded.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 📄 License
|
|
162
|
+
|
|
163
|
+
MIT © [zingspark](https://github.com/zingspark)
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
<p align="center">
|
|
168
|
+
<sub>Built for the vibe-coding era. Scaffold fast, build faster.</sub>
|
|
169
|
+
</p>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-harness-vibe-coding",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Scaffold a vibe-coding agentic harness — CLAUDE.md, docs/, .claude skeleton ready for ECC agents/skills/rules",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,8 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"repository": {
|
|
25
25
|
"type": "git",
|
|
26
|
-
"url": "https://github.com/
|
|
27
|
-
"directory": "create-harness-vibe-coding"
|
|
26
|
+
"url": "https://github.com/zingspark/create-harness-vibe-coding.git"
|
|
28
27
|
},
|
|
29
28
|
"keywords": [
|
|
30
29
|
"claude-code",
|
package/src/generator.js
CHANGED
|
@@ -8,7 +8,6 @@ const TEMPLATES_DIR = path.resolve(__dirname, '..', 'templates', 'common');
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Copy a directory recursively, replacing {{vars}} in file contents.
|
|
11
|
-
* Skips dirs named '.gitkeep-placeholder'.
|
|
12
11
|
*/
|
|
13
12
|
function copyDir(src, dest, vars) {
|
|
14
13
|
fs.mkdirSync(dest, { recursive: true });
|
|
@@ -64,7 +63,7 @@ export function generate({ projectName, targetDir }) {
|
|
|
64
63
|
if (fs.existsSync(resolvedDir)) {
|
|
65
64
|
const existing = fs.readdirSync(resolvedDir).filter(f => f !== '.git');
|
|
66
65
|
if (existing.length > 0) {
|
|
67
|
-
console.log(pc.yellow(`⚠
|
|
66
|
+
console.log(pc.yellow(`⚠ Directory "${targetDir}" already exists and is not empty. Files may be overwritten.`));
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
69
|
|
|
@@ -72,14 +71,14 @@ export function generate({ projectName, targetDir }) {
|
|
|
72
71
|
|
|
73
72
|
try {
|
|
74
73
|
// 1. Copy all template files
|
|
75
|
-
console.log(pc.cyan('📋
|
|
74
|
+
console.log(pc.cyan('📋 Copying templates...'));
|
|
76
75
|
copyDir(TEMPLATES_DIR, resolvedDir, vars);
|
|
77
76
|
|
|
78
77
|
// List all created files from templates
|
|
79
78
|
created.push(...walkFiles(TEMPLATES_DIR).map(f => f.replace(/\\/g, '/')));
|
|
80
79
|
|
|
81
80
|
// 2. Create empty directories
|
|
82
|
-
console.log(pc.cyan('📁
|
|
81
|
+
console.log(pc.cyan('📁 Creating placeholder directories...'));
|
|
83
82
|
const emptyDirs = [
|
|
84
83
|
'.claude/agents',
|
|
85
84
|
'.claude/skills',
|
package/src/index.js
CHANGED
|
@@ -24,9 +24,9 @@ if (argName) {
|
|
|
24
24
|
targetDir = argDir || `./${projectName}`;
|
|
25
25
|
|
|
26
26
|
console.log(pc.dim('────────────────────────────────────────────'));
|
|
27
|
-
console.log(`
|
|
28
|
-
console.log(`
|
|
29
|
-
console.log(`
|
|
27
|
+
console.log(` Project ${pc.green(projectName)}`);
|
|
28
|
+
console.log(` Directory ${pc.green(targetDir)}`);
|
|
29
|
+
console.log(` Creates ${pc.cyan('CLAUDE.md, docs/, .claude/, SETUP.md, tests/')}`);
|
|
30
30
|
console.log(pc.dim('────────────────────────────────────────────'));
|
|
31
31
|
console.log('');
|
|
32
32
|
|
|
@@ -37,30 +37,29 @@ if (argName) {
|
|
|
37
37
|
try {
|
|
38
38
|
projectName = await askProjectName();
|
|
39
39
|
} catch {
|
|
40
|
-
// Fallback for non-TTY
|
|
41
40
|
projectName = 'my-vibe-project';
|
|
42
|
-
console.log(pc.dim(`
|
|
41
|
+
console.log(pc.dim(` Project: ${projectName} (default)`));
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
try {
|
|
46
45
|
targetDir = await askTargetDir(projectName);
|
|
47
46
|
} catch {
|
|
48
47
|
targetDir = `./${projectName}`;
|
|
49
|
-
console.log(pc.dim(`
|
|
48
|
+
console.log(pc.dim(` Directory: ${targetDir} (default)`));
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
console.log('');
|
|
53
52
|
console.log(pc.dim('────────────────────────────────────────────'));
|
|
54
|
-
console.log(`
|
|
55
|
-
console.log(`
|
|
56
|
-
console.log(`
|
|
53
|
+
console.log(` Project ${pc.green(projectName)}`);
|
|
54
|
+
console.log(` Directory ${pc.green(targetDir)}`);
|
|
55
|
+
console.log(` Creates ${pc.cyan('CLAUDE.md, docs/, .claude/, SETUP.md, tests/')}`);
|
|
57
56
|
console.log(pc.dim('────────────────────────────────────────────'));
|
|
58
57
|
console.log('');
|
|
59
58
|
|
|
60
59
|
let proceed = true;
|
|
61
60
|
try {
|
|
62
61
|
proceed = await p.confirm({
|
|
63
|
-
message: '
|
|
62
|
+
message: 'Confirm generation?',
|
|
64
63
|
initialValue: true,
|
|
65
64
|
});
|
|
66
65
|
if (p.isCancel(proceed)) proceed = false;
|
|
@@ -69,7 +68,7 @@ if (argName) {
|
|
|
69
68
|
}
|
|
70
69
|
|
|
71
70
|
if (!proceed) {
|
|
72
|
-
p.cancel('
|
|
71
|
+
p.cancel('Cancelled');
|
|
73
72
|
process.exit(0);
|
|
74
73
|
}
|
|
75
74
|
|
|
@@ -80,24 +79,24 @@ if (argName) {
|
|
|
80
79
|
|
|
81
80
|
function printResult(result, targetDir) {
|
|
82
81
|
if (result.success) {
|
|
83
|
-
console.log(pc.green(`\n✅
|
|
82
|
+
console.log(pc.green(`\n✅ Project created! ${result.created.length} files\n`));
|
|
84
83
|
|
|
85
|
-
console.log(pc.bold('
|
|
84
|
+
console.log(pc.bold('Next steps:'));
|
|
86
85
|
console.log(` ${pc.cyan(`cd ${targetDir}`)}`);
|
|
87
|
-
console.log(` ${pc.cyan('claude')} #
|
|
88
|
-
console.log(`
|
|
86
|
+
console.log(` ${pc.cyan('claude')} # Start Claude Code`);
|
|
87
|
+
console.log(` Tell Claude: "${pc.yellow('Read SETUP.md and initialize this project')}"`);
|
|
89
88
|
console.log('');
|
|
90
|
-
console.log(pc.dim(' SETUP.md
|
|
89
|
+
console.log(pc.dim(' SETUP.md is temporary. Delete it after initialization.'));
|
|
91
90
|
console.log('');
|
|
92
91
|
|
|
93
92
|
if (result.errors.length > 0) {
|
|
94
|
-
console.log(pc.red(`\n⚠ ${result.errors.length}
|
|
93
|
+
console.log(pc.red(`\n⚠ ${result.errors.length} warning(s):`));
|
|
95
94
|
for (const err of result.errors) {
|
|
96
95
|
console.log(pc.red(` - ${err}`));
|
|
97
96
|
}
|
|
98
97
|
}
|
|
99
98
|
} else {
|
|
100
|
-
console.log(pc.red('\n❌
|
|
99
|
+
console.log(pc.red('\n❌ Generation failed:'));
|
|
101
100
|
for (const err of result.errors) {
|
|
102
101
|
console.log(pc.red(` - ${err}`));
|
|
103
102
|
}
|
package/src/prompts.js
CHANGED
|
@@ -3,18 +3,18 @@ import pc from 'picocolors';
|
|
|
3
3
|
|
|
4
4
|
export async function askProjectName() {
|
|
5
5
|
const name = await p.text({
|
|
6
|
-
message: '
|
|
6
|
+
message: 'Project name?',
|
|
7
7
|
placeholder: 'my-vibe-project',
|
|
8
8
|
defaultValue: 'my-vibe-project',
|
|
9
9
|
validate(value) {
|
|
10
|
-
if (!value.trim()) return '
|
|
11
|
-
if (!/^[a-zA-Z0-9_-]+$/.test(value)) return '
|
|
10
|
+
if (!value.trim()) return 'Project name is required';
|
|
11
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(value)) return 'Only letters, numbers, hyphens, and underscores allowed';
|
|
12
12
|
return;
|
|
13
13
|
},
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
if (p.isCancel(name)) {
|
|
17
|
-
p.cancel('
|
|
17
|
+
p.cancel('Cancelled');
|
|
18
18
|
process.exit(0);
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -23,17 +23,17 @@ export async function askProjectName() {
|
|
|
23
23
|
|
|
24
24
|
export async function askTargetDir(projectName) {
|
|
25
25
|
const dir = await p.text({
|
|
26
|
-
message: '
|
|
26
|
+
message: 'Target directory?',
|
|
27
27
|
placeholder: `./${projectName}`,
|
|
28
28
|
defaultValue: `./${projectName}`,
|
|
29
29
|
validate(value) {
|
|
30
|
-
if (!value.trim()) return '
|
|
30
|
+
if (!value.trim()) return 'Directory is required';
|
|
31
31
|
return;
|
|
32
32
|
},
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
if (p.isCancel(dir)) {
|
|
36
|
-
p.cancel('
|
|
36
|
+
p.cancel('Cancelled');
|
|
37
37
|
process.exit(0);
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
# CLAUDE.md
|
|
2
2
|
|
|
3
|
-
## 📖
|
|
3
|
+
## 📖 Doc Navigation (read before every task)
|
|
4
4
|
|
|
5
|
-
`@docs/README.md`
|
|
5
|
+
`@docs/README.md` is the project fact source. Route by role:
|
|
6
6
|
|
|
7
|
-
|
|
|
8
|
-
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
7
|
+
| Your Role | Required Reading |
|
|
8
|
+
|-----------|-----------------|
|
|
9
|
+
| Writing code / implementing | `docs/harness/agent-workflow.md` → `docs/features/_template.md` |
|
|
10
|
+
| Designing architecture / new modules | `docs/harness/architecture.md` → `docs/domain/ports.md` |
|
|
11
|
+
| Reviewing code | `docs/harness/state-machines.md` → tests |
|
|
12
|
+
| Fixing bugs / debugging | `docs/harness/data-flow.md` → `docs/harness/state-machines.md` |
|
|
13
|
+
| New to the project | `docs/research/PRD.md` → `docs/harness/architecture.md` |
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
15
|
+
**Hard rules**:
|
|
16
|
+
- Before touching cross-layer boundaries, read `docs/domain/ports.md`
|
|
17
|
+
- Before adding failure paths, read `docs/harness/data-flow.md`
|
|
18
|
+
- Before modifying stateful components, read `docs/harness/state-machines.md`
|
|
19
|
+
- Unsure whether to open a feature doc? Read `docs/harness/agent-workflow.md` §1
|
|
20
|
+
- **Every new session must read `@MEMORY.md`** for accumulated context
|
|
20
21
|
|
|
21
22
|
---
|
|
22
23
|
|
|
@@ -86,52 +87,53 @@ Strong success criteria let you loop independently. Weak criteria ("make it work
|
|
|
86
87
|
|
|
87
88
|
---
|
|
88
89
|
|
|
89
|
-
## 5.
|
|
90
|
+
## 5. Memory & Self-Learning
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
When a user expresses "remember / preference / habit / correction" intent, **persist to `MEMORY.md`** for reuse across sessions.
|
|
93
|
+
**Important**: Every new session must read `@MEMORY.md`.
|
|
92
94
|
|
|
93
|
-
### 5.1
|
|
95
|
+
### 5.1 Trigger Words
|
|
94
96
|
|
|
95
|
-
|
|
97
|
+
When the user's message contains these keywords or intent, write to `MEMORY.md`:
|
|
96
98
|
|
|
97
|
-
|
|
|
99
|
+
| Trigger Phrase | Meaning | Write To |
|
|
98
100
|
|---|---|---|
|
|
99
|
-
| "
|
|
100
|
-
| "
|
|
101
|
-
| "
|
|
102
|
-
| "
|
|
101
|
+
| "remember…", "note…", "save…" | User wants to persist a fact/preference | User Mem |
|
|
102
|
+
| "don't ever…", "never…", "stop doing…" | User corrects a behavior — avoid in future | User Mem |
|
|
103
|
+
| "next time…", "always…", "from now on…" | User specifies a future default behavior | User Mem |
|
|
104
|
+
| "I prefer…", "I like…", "my workflow…" | User expresses a work habit or preference | User Mem |
|
|
103
105
|
|
|
104
|
-
|
|
106
|
+
If unclear whether a message triggers memory, ask the user before writing. Don't auto-record every conversation.
|
|
105
107
|
|
|
106
|
-
### 5.2 MEMORY.md
|
|
108
|
+
### 5.2 MEMORY.md Write Format
|
|
107
109
|
|
|
108
|
-
|
|
110
|
+
Append to `## User Mem` in `MEMORY.md`, newest first:
|
|
109
111
|
|
|
110
112
|
```markdown
|
|
111
|
-
### YYYY-MM-DD —
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
113
|
+
### YYYY-MM-DD — <short title>
|
|
114
|
+
- **Trigger**: <user's exact words>
|
|
115
|
+
- **Behavior**: <what to do / what to avoid going forward>
|
|
116
|
+
- **Why**: <user's reason, if provided>
|
|
115
117
|
```
|
|
116
118
|
|
|
117
|
-
### 5.3
|
|
119
|
+
### 5.3 Self-Learning: Tool Usage Standards
|
|
118
120
|
|
|
119
|
-
Claude Code
|
|
121
|
+
When Claude Code discovers the following patterns (without involving user privacy), auto-append to `## Tool Usage Standards` in `MEMORY.md`:
|
|
120
122
|
|
|
121
|
-
|
|
|
123
|
+
| Pattern Discovered | Record |
|
|
122
124
|
|---|---|
|
|
123
|
-
|
|
|
124
|
-
|
|
|
125
|
-
|
|
|
125
|
+
| A tool/MCP/skill fails 3+ times when called frequently, or has a better alternative | Record: scenario → failure cause → recommended alternative |
|
|
126
|
+
| A code error repeats in the same file/module (lint errors, type errors, import errors) | Record: error type → trigger condition → fix template |
|
|
127
|
+
| A skill/MCP is called in a way that deviates from best practices, causing inefficiency | Record: correct usage → usage to avoid |
|
|
126
128
|
|
|
127
|
-
|
|
129
|
+
Format:
|
|
128
130
|
|
|
129
131
|
```markdown
|
|
130
|
-
###
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
-
|
|
134
|
-
-
|
|
132
|
+
### <tool/skill name> — <brief issue>
|
|
133
|
+
- **Scenario**: <when it triggers>
|
|
134
|
+
- **Problem**: <specific symptom>
|
|
135
|
+
- **Solution**: <recommended approach>
|
|
136
|
+
- **Date**: <first recorded date>
|
|
135
137
|
```
|
|
136
138
|
|
|
137
|
-
|
|
139
|
+
If the same issue already exists, update it rather than creating a duplicate. If a new finding contradicts an old record, replace the old one and note the date.
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
# MEMORY.md — {{projectName}}
|
|
1
|
+
# MEMORY.md — {{projectName}} Project Resource Index
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> The project fact source is reached via `CLAUDE.md -> docs/README.md`. This file persists cross-session context: resource index, user preferences, tool usage standards.
|
|
4
4
|
|
|
5
|
-
## Agents
|
|
5
|
+
## Agents (Sub-agents)
|
|
6
6
|
|
|
7
|
-
>
|
|
8
|
-
>
|
|
7
|
+
> Pending initialization by Claude Code from [ECC](https://github.com/affaan-m/ECC).
|
|
8
|
+
> Init command: describe your project type and language to Claude — it will pull matching agents.
|
|
9
9
|
|
|
10
|
-
## Skills
|
|
10
|
+
## Skills (Workflows)
|
|
11
11
|
|
|
12
|
-
>
|
|
12
|
+
> Pending initialization by Claude Code from [ECC](https://github.com/affaan-m/ECC) or [awesome-claude-code-config](https://github.com/Mizoreww/awesome-claude-code-config).
|
|
13
13
|
|
|
14
|
-
## Rules
|
|
14
|
+
## Rules (Code Rules)
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Located under `.claude/rules/ecc/`, auto-loaded by the CC engine:
|
|
17
17
|
|
|
18
|
-
- [common.md](.claude/rules/ecc/common.md) —
|
|
19
|
-
-
|
|
18
|
+
- [common.md](.claude/rules/ecc/common.md) — Universal coding rules (alwaysApply: true)
|
|
19
|
+
- Language-specific rules pending Claude Code initialization (e.g. python.md, typescript.md, etc.)
|
|
20
20
|
|
|
21
|
-
## Harness
|
|
21
|
+
## Harness (Runtime)
|
|
22
22
|
|
|
23
|
-
- [
|
|
24
|
-
- [Agent
|
|
23
|
+
- [Architecture docs](docs/harness/architecture.md)
|
|
24
|
+
- [Agent workflow](docs/harness/agent-workflow.md)
|
|
25
25
|
|
|
26
26
|
## User Mem
|
|
27
27
|
|
|
28
|
-
>
|
|
29
|
-
>
|
|
28
|
+
> User preferences, habits, corrections. Written by CLAUDE.md §5 triggers, newest first.
|
|
29
|
+
> No entries yet — awaiting first "remember…" instruction.
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## Tool Usage Standards
|
|
32
32
|
|
|
33
|
-
> Claude Code
|
|
34
|
-
>
|
|
35
|
-
>
|
|
33
|
+
> Claude Code self-learning: high-frequency tool/MCP/skill pitfalls, alternatives, common error fix templates.
|
|
34
|
+
> Written by CLAUDE.md §5.3 triggers.
|
|
35
|
+
> No entries yet — awaiting first auto-discovery.
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
# SETUP.md —
|
|
1
|
+
# SETUP.md — Project Initialization Guide
|
|
2
2
|
|
|
3
|
-
> ⚠️
|
|
3
|
+
> ⚠️ **Temporary file** — Delete after initialization: `rm SETUP.md`
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## What You Just Created
|
|
8
8
|
|
|
9
|
-
`npx create-harness-vibe-coding`
|
|
9
|
+
`npx create-harness-vibe-coding` scaffolded a **vibe-coding agentic harness** skeleton:
|
|
10
10
|
|
|
11
11
|
```
|
|
12
12
|
{{projectName}}/
|
|
13
|
-
CLAUDE.md ← Agent
|
|
14
|
-
AGENTS.md ← Coding agent
|
|
15
|
-
MEMORY.md ←
|
|
16
|
-
docs/ ←
|
|
13
|
+
CLAUDE.md ← Agent behavior guidelines + memory/self-learning system
|
|
14
|
+
AGENTS.md ← Coding agent entry point
|
|
15
|
+
MEMORY.md ← Cross-session resource index
|
|
16
|
+
docs/ ← Architecture docs (layer rules, workflows, port contracts)
|
|
17
17
|
.claude/
|
|
18
|
-
settings.json ←
|
|
19
|
-
agents/ ←
|
|
20
|
-
skills/ ←
|
|
21
|
-
hooks/ ←
|
|
18
|
+
settings.json ← Permissions + Hooks config
|
|
19
|
+
agents/ ← Empty — pull ECC agents here
|
|
20
|
+
skills/ ← Empty — pull ECC skills here
|
|
21
|
+
hooks/ ← Empty — configure automation hooks here
|
|
22
22
|
rules/ecc/
|
|
23
|
-
common.md ←
|
|
24
|
-
tests/ ←
|
|
25
|
-
.gitignore ←
|
|
23
|
+
common.md ← Universal coding rules (always active)
|
|
24
|
+
tests/ ← Pending initialization
|
|
25
|
+
.gitignore ← Basic Git ignore rules
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Next Steps: Initialize with Claude Code
|
|
31
31
|
|
|
32
|
-
### Step 1 —
|
|
32
|
+
### Step 1 — Start Claude Code
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
claude
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
### Step 2 —
|
|
38
|
+
### Step 2 — Describe Your Project
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Tell Claude your project type, language, and tech stack. Claude will:
|
|
41
41
|
|
|
42
|
-
1.
|
|
43
|
-
2.
|
|
44
|
-
3.
|
|
45
|
-
4.
|
|
42
|
+
1. Pull matching **agents** from [ECC](https://github.com/affaan-m/ECC) (e.g. code-reviewer, planner, security-reviewer)
|
|
43
|
+
2. Pull matching **skills** from ECC (e.g. tdd-workflow, django-patterns, react-patterns)
|
|
44
|
+
3. Pull language-specific **rules** from ECC (e.g. python.md, typescript.md)
|
|
45
|
+
4. Configure **hooks** as needed (e.g. PostToolUse auto-lint, PreToolUse security gate)
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
**Example prompts**:
|
|
48
48
|
|
|
49
49
|
```
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
You: This is a Python quant trading project. Initialize agents, skills, and rules from ECC.
|
|
51
|
+
You: This is a React + TypeScript frontend project. I need the TDD workflow.
|
|
52
|
+
You: This is a Go microservice project. Set up code review and testing skills.
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
### Step 3 —
|
|
55
|
+
### Step 3 — Optional: Install Superpowers
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
#
|
|
58
|
+
# Inside Claude Code
|
|
59
59
|
/plugin install superpowers@claude-plugins-official
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
Superpowers
|
|
62
|
+
Superpowers provides: brainstorming → writing-plans → TDD → code-review loop.
|
|
63
63
|
|
|
64
|
-
### Step 4 —
|
|
64
|
+
### Step 4 — Clean Up
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
67
|
rm SETUP.md
|
|
@@ -69,23 +69,23 @@ rm SETUP.md
|
|
|
69
69
|
|
|
70
70
|
---
|
|
71
71
|
|
|
72
|
-
##
|
|
72
|
+
## Reference Resources
|
|
73
73
|
|
|
74
|
-
|
|
|
75
|
-
|
|
76
|
-
| ECC | https://github.com/affaan-m/ECC |
|
|
77
|
-
| awesome-claude-code-config | https://github.com/Mizoreww/awesome-claude-code-config |
|
|
78
|
-
| Superpowers | https://github.com/obra/superpowers |
|
|
79
|
-
| claude-toolbox | https://github.com/serpro69/claude-toolbox |
|
|
74
|
+
| Resource | URL | Purpose |
|
|
75
|
+
|----------|-----|---------|
|
|
76
|
+
| ECC | https://github.com/affaan-m/ECC | Main agents/skills/rules repo |
|
|
77
|
+
| awesome-claude-code-config | https://github.com/Mizoreww/awesome-claude-code-config | Multi-language rules + self-learning config |
|
|
78
|
+
| Superpowers | https://github.com/obra/superpowers | Engineering discipline plugin |
|
|
79
|
+
| claude-toolbox | https://github.com/serpro69/claude-toolbox | Multi-language skills toolkit |
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
|
83
|
-
##
|
|
83
|
+
## Customization
|
|
84
84
|
|
|
85
|
-
- **CLAUDE.md** —
|
|
86
|
-
- **.claude/settings.json** —
|
|
87
|
-
- **.claude/rules/ecc/** —
|
|
85
|
+
- **CLAUDE.md** — Edit behavior guidelines per project needs
|
|
86
|
+
- **.claude/settings.json** — Adjust permissions and hooks as needed
|
|
87
|
+
- **.claude/rules/ecc/** — Language rules auto-added by Claude Code
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
91
|
-
>
|
|
91
|
+
> Generated by `create-harness-vibe-coding`. MIT License.
|
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
# {{projectName}} —
|
|
1
|
+
# {{projectName}} — Docs Entry Point
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> **Purpose**: A shared project map for humans and coding agents. `AGENTS.md` tells agents to read `CLAUDE.md` first, then enter the project fact source from here.
|
|
4
4
|
>
|
|
5
|
-
>
|
|
5
|
+
> **Principle**: Short entry + topic-specific docs. Don't cram everything into `CLAUDE.md` or `AGENTS.md`.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 0-1
|
|
9
|
+
## 0-1 Required Project Flow
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
When starting from scratch, produce docs in this order. Don't move to the next phase without a minimum viable conclusion from the previous one.
|
|
12
12
|
|
|
13
|
-
|
|
|
13
|
+
| Order | Artifact | Must Answer | Completion Standard |
|
|
14
14
|
| --- | --- | --- | --- |
|
|
15
|
-
| 1 | [research/scaffolds.md](research/scaffolds.md) |
|
|
16
|
-
| 2 | [research/PRD.md](research/PRD.md) |
|
|
17
|
-
| 3 | [harness/architecture.md](harness/architecture.md) |
|
|
18
|
-
| 4 | [domain/ports.md](domain/ports.md) |
|
|
19
|
-
| 5 | [harness/data-flow.md](harness/data-flow.md) |
|
|
20
|
-
| 6 | [harness/state-machines.md](harness/state-machines.md) |
|
|
21
|
-
| 7 | [harness/agent-workflow.md](harness/agent-workflow.md) |
|
|
22
|
-
| 8 | tests + implementation |
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
##
|
|
31
|
-
|
|
32
|
-
|
|
|
15
|
+
| 1 | [research/scaffolds.md](research/scaffolds.md) | What do others do? Which templates, frameworks, constraints? Why adopt/reject? | At least 3 references; each with Purpose / Strength / Weakness / Decision |
|
|
16
|
+
| 2 | [research/PRD.md](research/PRD.md) | What does this MVP solve? What is explicitly NOT in scope? How to verify? | One page; MVP, Non-goals, verifiable acceptance criteria |
|
|
17
|
+
| 3 | [harness/architecture.md](harness/architecture.md) | How many layers? Component boundaries? What can/can't harness do? | Layer dependencies, core components, non-negotiable constraints, key decisions |
|
|
18
|
+
| 4 | [domain/ports.md](domain/ports.md) | What contracts between layers? Error and idempotency semantics? | Each port: preconditions, postconditions, error semantics, known implementations |
|
|
19
|
+
| 5 | [harness/data-flow.md](harness/data-flow.md) | Normal path and failure paths? What does the caller see? | At least 1 core flow; each failure point has system behavior and recovery |
|
|
20
|
+
| 6 | [harness/state-machines.md](harness/state-machines.md) | Which components have state? Which transitions are legal/illegal? | Each stateful component: state enum, transition table, illegal transitions |
|
|
21
|
+
| 7 | [harness/agent-workflow.md](harness/agent-workflow.md) | How do agents divide work, TDD, verify, and close? | Feature doc template, subagent roles, write set, completion criteria |
|
|
22
|
+
| 8 | tests + implementation | Is the design proven by code? | Minimal vertical slice runs; tests cover core success/failure paths |
|
|
23
|
+
|
|
24
|
+
**Hard gates**:
|
|
25
|
+
- If a doc still has `{{...}}` placeholders, don't claim the architecture is finalized.
|
|
26
|
+
- **Minimum docs to start coding**: `research/PRD.md` + `harness/architecture.md` + at least 1 filled port contract. Once there, start a minimal vertical slice, but record risks from missing `data-flow.md` / `state-machines.md` in the feature doc or tests.
|
|
27
|
+
- If architecture boundaries change, sync docs and tests.
|
|
28
|
+
- If implementation spans more than one short session, open a feature doc from [features/_template.md](features/_template.md) first.
|
|
29
|
+
|
|
30
|
+
## Doc Completion Standards
|
|
31
|
+
|
|
32
|
+
| Doc | Minimum Standard | Can Defer |
|
|
33
33
|
| --- | --- | --- |
|
|
34
|
-
| `research/scaffolds.md` |
|
|
35
|
-
| `research/PRD.md` | Why
|
|
36
|
-
| `harness/architecture.md` |
|
|
37
|
-
| `domain/ports.md` |
|
|
38
|
-
| `harness/data-flow.md` |
|
|
39
|
-
| `harness/state-machines.md` |
|
|
40
|
-
| `harness/agent-workflow.md` |
|
|
41
|
-
| `features/*.md` | Requirements / Design / Tasks / Verification
|
|
34
|
+
| `research/scaffolds.md` | At least 3 references; each with Purpose / Strength / Weakness / Decision; final decision recorded | Rejected options can be backfilled |
|
|
35
|
+
| `research/PRD.md` | Why, MVP, Non-goals, decision priorities, acceptance criteria are not placeholders | Non-functional targets can start as MVP-level goals |
|
|
36
|
+
| `harness/architecture.md` | Layer dependencies, core components, at least 1 ADR, non-negotiable constraints | Runner variants can say "none yet" when only one runner exists |
|
|
37
|
+
| `domain/ports.md` | At least 1 port with preconditions, postconditions, error semantics, idempotency, known impls | Additional ports can be added incrementally with features |
|
|
38
|
+
| `harness/data-flow.md` | At least 1 core flow with normal + failure paths | Secondary flows can come later |
|
|
39
|
+
| `harness/state-machines.md` | Every stateful component has state enum and transition table | Stateless components don't need entries |
|
|
40
|
+
| `harness/agent-workflow.md` | Feature doc, write set, verification, closure criteria are clear | Subagent roles can expand as needed |
|
|
41
|
+
| `features/*.md` | Requirements / Design / Tasks / Verification closed loop | Minor fixes can take the fast lane with a reason |
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
## Harness
|
|
45
|
+
## Harness Boundary
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
The current template uses `interfaces -> harness -> application -> domain` with `infrastructure` adapters. The `domain` is any business domain: data analysis, document processing, code repair, ops automation — all can hang off the same harness.
|
|
48
48
|
|
|
49
|
-
|
|
|
49
|
+
| Layer | Responsible For | NOT Responsible For |
|
|
50
50
|
| --- | --- | --- |
|
|
51
|
-
| `interfaces/` | CLI / API / UI
|
|
52
|
-
| `harness/` |
|
|
53
|
-
| `application/` |
|
|
54
|
-
| `domain/` |
|
|
55
|
-
| `infrastructure/` |
|
|
51
|
+
| `interfaces/` | CLI / API / UI entry points | Business rules, data source details |
|
|
52
|
+
| `harness/` | Runtime shell, scheduling, safety gates, audit, observability, failure control | Domain business rules, domain decisions, adapter implementation details |
|
|
53
|
+
| `application/` | Use-case orchestration, composing domain ports into business actions | Specific external service implementations |
|
|
54
|
+
| `domain/` | Business objects, business invariants, port protocols | Importing harness / infrastructure / interfaces |
|
|
55
|
+
| `infrastructure/` | Filesystem, database, external API, model service port implementations | Defining business contracts |
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
How to decide: if it "protects, records, schedules, recovers the system during runtime" → harness. If it "decides whether a business action should happen and what it means" → application/domain.
|
|
58
58
|
|
|
59
59
|
---
|
|
60
60
|
|
|
61
|
-
##
|
|
61
|
+
## Doc Map
|
|
62
62
|
|
|
63
63
|
```text
|
|
64
64
|
docs/
|
|
65
|
-
├── README.md ←
|
|
65
|
+
├── README.md ← You are here
|
|
66
66
|
├── features/
|
|
67
|
-
│ └── _template.md ←
|
|
67
|
+
│ └── _template.md ← Single-feature implementation doc template (Kiro-lite)
|
|
68
68
|
├── harness/
|
|
69
|
-
│ ├── agent-workflow.md ←
|
|
70
|
-
│ ├── architecture.md ←
|
|
71
|
-
│ ├── data-flow.md ←
|
|
72
|
-
│ └── state-machines.md ←
|
|
69
|
+
│ ├── agent-workflow.md ← Agent roles, TDD, closure, write set rules
|
|
70
|
+
│ ├── architecture.md ← Component map, layer rules, key design decisions
|
|
71
|
+
│ ├── data-flow.md ← End-to-end event flow: normal + error paths
|
|
72
|
+
│ └── state-machines.md ← Stateful component transition diagrams and tables
|
|
73
73
|
├── domain/
|
|
74
|
-
│ └── ports.md ←
|
|
74
|
+
│ └── ports.md ← Cross-layer interface contracts: pre/post, error semantics
|
|
75
75
|
└── research/
|
|
76
|
-
├── PRD.md ←
|
|
77
|
-
└── scaffolds.md ←
|
|
76
|
+
├── PRD.md ← One-page MVP scope and acceptance template
|
|
77
|
+
└── scaffolds.md ← Research conclusions, reference templates, tech rationale
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
|
82
|
-
##
|
|
82
|
+
## Reading Order
|
|
83
83
|
|
|
84
|
-
|
|
|
84
|
+
| Role | Read First | Then |
|
|
85
85
|
| --- | --- | --- |
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
86
|
+
| New developer | [research/PRD.md](research/PRD.md) | [harness/architecture.md](harness/architecture.md) |
|
|
87
|
+
| Implementer | [harness/agent-workflow.md](harness/agent-workflow.md) | [features/_template.md](features/_template.md) |
|
|
88
|
+
| Reviewer | [harness/state-machines.md](harness/state-machines.md) | tests |
|
|
89
|
+
| Architecture maintainer | [research/scaffolds.md](research/scaffolds.md) | [harness/architecture.md](harness/architecture.md) |
|
|
90
90
|
|
|
91
91
|
---
|
|
92
92
|
|
|
93
|
-
##
|
|
93
|
+
## Maintenance Rules
|
|
94
94
|
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
95
|
+
- Code change affects architecture → update `harness/architecture.md`.
|
|
96
|
+
- New cross-layer interface → update `domain/ports.md`.
|
|
97
|
+
- New flow or failure path → update `harness/data-flow.md`.
|
|
98
|
+
- New stateful component → update `harness/state-machines.md`.
|
|
99
|
+
- New external dependency, template, or framework choice → update `research/scaffolds.md`.
|
|
100
|
+
- Non-trivial feature → copy `features/_template.md`, follow `harness/agent-workflow.md`.
|
|
101
|
+
- Docs rules repeatedly ignored by agents → don't lengthen entry files; turn rules into tests, lint, or more specific templates.
|
|
102
102
|
|
|
103
103
|
---
|
|
104
104
|
|
|
105
|
-
##
|
|
105
|
+
## External References
|
|
106
106
|
|
|
107
|
-
- OpenAI, Harness Engineering:
|
|
108
|
-
- Anthropic, Claude Code Best Practices: `CLAUDE.md`
|
|
109
|
-
- OpenAI, PLANS.md / ExecPlans:
|
|
110
|
-
- GitHub Spec Kit / Kiro Specs:
|
|
111
|
-
- Anthropic, Building Effective Agents: agent
|
|
112
|
-
- arc42 / C4 / ADR / ARCHITECTURE.md:
|
|
107
|
+
- OpenAI, Harness Engineering: short `AGENTS.md` as directory, `docs/` as fact source; architecture boundaries enforced by tests/lint.
|
|
108
|
+
- Anthropic, Claude Code Best Practices: `CLAUDE.md` kept short and maintainable; use `@docs/...` to pull in project docs.
|
|
109
|
+
- OpenAI, PLANS.md / ExecPlans: complex tasks use self-contained, verifiable, recoverable execution plans.
|
|
110
|
+
- GitHub Spec Kit / Kiro Specs: borrow requirements -> design -> tasks -> verification structure.
|
|
111
|
+
- Anthropic, Building Effective Agents: agent loops need environment feedback, clear stop conditions, and human checkpoints.
|
|
112
|
+
- arc42 / C4 / ADR / ARCHITECTURE.md: provide architecture chapters, static structure views, decision records, and lightweight code maps respectively.
|