nitm-ai-dev-toolkit 3.0.19 → 3.0.21
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/package.json +1 -1
- package/src/monorepo/.claude/prompt-snippets/bootstrap-patch.md +130 -130
- package/src/monorepo/.claude/prompt-snippets/bootstrap-upgrade.md +61 -56
- package/src/monorepo/.claude/prompt-snippets/bootstrap.md +31 -31
- package/src/monorepo/.opencode/opencode.jsonc +21 -0
- package/src/monorepo/.opencode/plugins/ponytail.mjs +63 -49
- package/src/monorepo/AGENTS.md +35 -35
- package/src/monorepo/CLAUDE.md +1 -1
- package/src/repo/.claude/prompt-snippets/bootstrap-patch.md +133 -133
- package/src/repo/.claude/prompt-snippets/bootstrap-upgrade.md +70 -65
- package/src/repo/.claude/prompt-snippets/bootstrap.md +40 -40
- package/src/repo/.opencode/opencode.jsonc +21 -0
- package/src/repo/.opencode/plugins/ponytail.mjs +63 -49
- package/src/repo/AGENTS.md +35 -35
- package/src/repo/CLAUDE.md +1 -1
- package/src/monorepo/.opencode/opencode.json +0 -9
- package/src/repo/.opencode/opencode.json +0 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nitm-ai-dev-toolkit",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.21",
|
|
4
4
|
"description": "Scaffold AI agent config (Cursor, GitHub Copilot, Claude Code, OpenCode) into any repo, then hand off to your AI agent to finish setup.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"nitm-ai-dev-toolkit": "bin/cli.js"
|
|
@@ -17,18 +17,18 @@ You are helping to patch AI instructions in this project by comparing against th
|
|
|
17
17
|
|
|
18
18
|
## Process
|
|
19
19
|
|
|
20
|
-
1.
|
|
20
|
+
1. **Fetch Latest Templates**:
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Clone or fetch the latest ai-assisted-dev-toolkit templates:
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
```bash
|
|
25
|
+
TOOLKIT_TEMP=$(mktemp -d)
|
|
26
|
+
git clone --depth 1 https://github.com/ninjasitm/ai-assisted-dev-toolkit.git "$TOOLKIT_TEMP"
|
|
27
|
+
```
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
Determine the correct source path based on project structure:
|
|
30
|
+
- **Single repo**: Use `$TOOLKIT_TEMP/src/repo/`
|
|
31
|
+
- **Monorepo**: Use `$TOOLKIT_TEMP/src/monorepo/`
|
|
32
32
|
|
|
33
33
|
Detection heuristic:
|
|
34
34
|
- If `apps/` and `packages/` directories exist at root → monorepo
|
|
@@ -46,132 +46,132 @@ You are helping to patch AI instructions in this project by comparing against th
|
|
|
46
46
|
- **Same version**: No structural changes expected
|
|
47
47
|
- **Newer version**: Check for structural changes (new directories, renamed files, format changes)
|
|
48
48
|
|
|
49
|
-
2.
|
|
49
|
+
2. **Inventory Current State**:
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
Scan the project's AI configuration directories:
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
| **AGENTS.md**
|
|
66
|
-
| **CLAUDE.md**
|
|
67
|
-
| **Claude Rules Snippets**
|
|
68
|
-
| **Claude Prompt Snippets** | `.claude/prompt-snippets/*.md`
|
|
69
|
-
| **Claude Agent Snippets**
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
3.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
4.
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
6. **Cleanup**:
|
|
53
|
+
| Category | Project Paths | Template Source Paths |
|
|
54
|
+
| -------------------------- | ---------------------------------------- | --------------------------------------------------- |
|
|
55
|
+
| **Cursor Rules** | `.cursor/rules/*.mdc` | `src/{type}/.cursor/rules/*.mdc` |
|
|
56
|
+
| **Cursor Cmds** | `.cursor/commands/*.md` | `src/{type}/.cursor/commands/*.md` |
|
|
57
|
+
| **Cursor Agents** | `.cursor/agents/*.agent.md` | `src/{type}/.cursor/agents/*.agent.md` |
|
|
58
|
+
| **GH Prompts** | `.github/prompts/*.prompt.md` | `src/{type}/.github/prompts/*.prompt.md` |
|
|
59
|
+
| **GH Instrs** | `.github/instructions/*.instructions.md` | `src/{type}/.github/instructions/*.instructions.md` |
|
|
60
|
+
| **GH Agents** | `.github/agents/*.agent.md` | `src/{type}/.github/agents/*.agent.md` |
|
|
61
|
+
| **Claude Rules** | `.claude/rules/*.md` | `src/{type}/.claude/rules/*.md` |
|
|
62
|
+
| **Claude Cmds** | `.claude/commands/*.md` | `src/{type}/.claude/commands/*.md` |
|
|
63
|
+
| **Claude Agents** | `.claude/agents/*.agent.md` | `src/{type}/.claude/agents/*.agent.md` |
|
|
64
|
+
| **Skills** | `.agents/skills/*/SKILL.md` | `src/{type}/.agents/skills/*/SKILL.md` |
|
|
65
|
+
| **AGENTS.md** | `AGENTS.md` | `src/{type}/AGENTS.md` |
|
|
66
|
+
| **CLAUDE.md** | `CLAUDE.md` | `src/{type}/CLAUDE.md` |
|
|
67
|
+
| **Claude Rules Snippets** | `.claude/rules-snippets/*.md` | `src/{type}/.claude/rules-snippets/*.md` |
|
|
68
|
+
| **Claude Prompt Snippets** | `.claude/prompt-snippets/*.md` | `src/{type}/.claude/prompt-snippets/*.md` |
|
|
69
|
+
| **Claude Agent Snippets** | `.claude/agents-snippets/*.md` | `src/{type}/.claude/agents-snippets/*.md` |
|
|
70
|
+
| **OpenCode Config** | `.opencode/opencode.jsonc` | `src/{type}/.opencode/opencode.jsonc` |
|
|
71
|
+
| **OpenCode Commands** | `.opencode/commands/*.md` | `src/{type}/.opencode/commands/*.md` |
|
|
72
|
+
| **OpenCode Rules** | `.opencode/rules/*.md` | `src/{type}/.opencode/rules/*.md` |
|
|
73
|
+
| **OpenCode Agents** | `.opencode/agents/*.md` | `src/{type}/.opencode/agents/*.md` |
|
|
74
|
+
| **OpenCode Plugins** | `.opencode/plugins/*.mjs` | `src/{type}/.opencode/plugins/*.mjs` |
|
|
75
|
+
| **Hooks** | `hooks/*.{js,sh,ps1}` | `src/{type}/hooks/*.{js,sh,ps1}` |
|
|
76
|
+
| **Agent Rules** | `.agents/rules/*.md` | `src/{type}/.agents/rules/*.md` |
|
|
77
|
+
| **Toolkit Version** | `.toolkit-version` | `.toolkit-version` (root of toolkit) |
|
|
78
|
+
|
|
79
|
+
**⚠️ OpenCode `opencode.jsonc` Schema Validation:**
|
|
80
|
+
|
|
81
|
+
When patching `.opencode/opencode.jsonc`, **only add or modify supported top-level keys**. The schema is defined at `https://opencode.ai/config.json`. Do NOT add unsupported keys.
|
|
82
|
+
|
|
83
|
+
**Supported top-level keys:** `$schema`, `instructions`, `skills`, `agent`, `default_agent`, `model`, `small_model`, `provider`, `mcp`, `tools`, `permission`, `lsp`, `formatter`, `server`, `shell`, `command`, `plugin`, `watcher`, `snapshot`, `share`, `autoupdate`, `compaction`, `attachment`, `logLevel`, `disabled_providers`, `enabled_providers`, `tool_output`, `enterprise`, `experimental`
|
|
84
|
+
|
|
85
|
+
**Do NOT add** keys like `rules`, `agents`, `commands`, `prompts` as top-level keys — OpenCode uses the `.opencode/` directory structure and `instructions` array instead.
|
|
86
|
+
|
|
87
|
+
> **Watch out:** the ponytail template uses the `plugin` key (singular). If you see `plugins` (plural) in your `opencode.jsonc`, that's a typo and the plugin won't load.
|
|
88
|
+
|
|
89
|
+
3. **Diff Analysis** (parallelizable — dispatch one subagent per category):
|
|
90
|
+
|
|
91
|
+
For each category, compare template files against project files:
|
|
92
|
+
|
|
93
|
+
a. **Classify each file**:
|
|
94
|
+
- **🆕 New**: Exists in template but not in project → candidate for addition
|
|
95
|
+
- **📝 Updated**: Exists in both but template has newer content → candidate for merge
|
|
96
|
+
- **✅ Current**: Exists in both and content matches → no action needed
|
|
97
|
+
- **🔧 Customized**: Exists in both, project version has non-placeholder customizations → careful merge
|
|
98
|
+
- **⚠️ Missing in Template**: Exists in project but not in template → project-specific, keep as-is
|
|
99
|
+
|
|
100
|
+
b. **For updated files, generate a structured diff**:
|
|
101
|
+
- Preserve project-specific `{{PLACEHOLDER}}` replacements (already-bootstrapped values)
|
|
102
|
+
- Identify structural additions (new sections, new rules, new steps)
|
|
103
|
+
- Identify structural removals (deprecated guidance, removed sections)
|
|
104
|
+
- Identify content updates (changed instructions, improved wording)
|
|
105
|
+
|
|
106
|
+
c. **Smart Merge Rules**:
|
|
107
|
+
- **Never overwrite** project-specific values that replaced `{{PLACEHOLDER}}`
|
|
108
|
+
- **Always add** new files that don't exist in the project
|
|
109
|
+
- **Merge structural additions** into existing customized files
|
|
110
|
+
- **Flag for review** any removals from files that have been customized
|
|
111
|
+
- **Preserve custom agents/skills** that were added by the project
|
|
112
|
+
|
|
113
|
+
4. **Generate Patch Report**:
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
## 🩹 Bootstrap Patch Report
|
|
117
|
+
|
|
118
|
+
**Toolkit Version**: [commit hash] ([date])
|
|
119
|
+
**Project Type**: repo | monorepo
|
|
120
|
+
**Categories Scanned**: [list]
|
|
121
|
+
|
|
122
|
+
### 🆕 New Files (X files)
|
|
123
|
+
|
|
124
|
+
| File | Category | Description |
|
|
125
|
+
| ---------------------------- | -------- | ------------------------ |
|
|
126
|
+
| `.cursor/rules/new-rule.mdc` | Rules | New coding standard rule |
|
|
127
|
+
|
|
128
|
+
### 📝 Updated Files (X files)
|
|
129
|
+
|
|
130
|
+
| File | Changes | Risk |
|
|
131
|
+
| -------------------------------------------------------- | ------------------------------ | -------------- |
|
|
132
|
+
| `.cursor/commands/implement.md` | Added orchestrator checkpoint | Low - additive |
|
|
133
|
+
| `.github/instructions/subagent-workflow.instructions.md` | Added parallelization analysis | Low - additive |
|
|
134
|
+
|
|
135
|
+
### ✅ Current Files (X files)
|
|
136
|
+
|
|
137
|
+
[No action needed]
|
|
138
|
+
|
|
139
|
+
### 🔧 Customized Files Requiring Review (X files)
|
|
140
|
+
|
|
141
|
+
| File | Template Changes | Project Customizations | Merge Strategy |
|
|
142
|
+
| ----------- | ----------------- | ---------------------------- | -------------- |
|
|
143
|
+
| `AGENTS.md` | New section added | Has project-specific content | Manual merge |
|
|
144
|
+
|
|
145
|
+
### Summary
|
|
146
|
+
|
|
147
|
+
- **Auto-apply**: X new files + Y updated files with no conflicts
|
|
148
|
+
- **Review needed**: Z customized files with structural changes
|
|
149
|
+
- **No action**: W files already current
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
5. **Confirm and Apply**:
|
|
153
|
+
- If `--dry-run` flag: Output the report without making changes
|
|
154
|
+
- Otherwise: Present the report and ask the user to confirm with (Y/n)
|
|
155
|
+
- On confirmation:
|
|
156
|
+
a. **New files**: Copy directly from template
|
|
157
|
+
b. **Updated files (no customization)**: Replace with template version
|
|
158
|
+
c. **Updated files (customized)**: Apply structural additions while preserving project values
|
|
159
|
+
d. **Git commit**: Stage and commit all changes with message:
|
|
160
|
+
```bash
|
|
161
|
+
git add -A
|
|
162
|
+
git commit -m "chore: patch AI instructions from toolkit [$(date +%Y-%m-%d)]"
|
|
163
|
+
```
|
|
165
164
|
|
|
166
|
-
|
|
167
|
-
rm -rf "$TOOLKIT_TEMP"
|
|
168
|
-
```
|
|
165
|
+
6. **Cleanup**:
|
|
169
166
|
|
|
170
|
-
|
|
167
|
+
```bash
|
|
168
|
+
rm -rf "$TOOLKIT_TEMP"
|
|
169
|
+
```
|
|
171
170
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
171
|
+
7. **Post-Patch Validation**:
|
|
172
|
+
- Verify no `{{PLACEHOLDER}}` syntax was accidentally re-introduced
|
|
173
|
+
- Confirm all files are valid (no broken frontmatter, no syntax errors)
|
|
174
|
+
- List any new placeholders that need manual `bootstrap` to fill
|
|
175
175
|
|
|
176
176
|
## Smart Merge Strategy
|
|
177
177
|
|
|
@@ -38,17 +38,17 @@ Migrate this monorepo's AI instruction files from the pre-3.0 inline pattern to
|
|
|
38
38
|
|
|
39
39
|
4. **Inventory files to migrate** (parallelizable — scan all directories simultaneously):
|
|
40
40
|
|
|
41
|
-
| Directory
|
|
42
|
-
|
|
43
|
-
| `.claude/rules/`
|
|
44
|
-
| `.claude/commands/`
|
|
45
|
-
| `.claude/agents/`
|
|
41
|
+
| Directory | Glob | Count |
|
|
42
|
+
| ----------------------- | ------------------- | ----- |
|
|
43
|
+
| `.claude/rules/` | `*.md` | {{N}} |
|
|
44
|
+
| `.claude/commands/` | `*.md` | {{N}} |
|
|
45
|
+
| `.claude/agents/` | `*.agent.md` | {{N}} |
|
|
46
46
|
| `.github/instructions/` | `*.instructions.md` | {{N}} |
|
|
47
|
-
| `.github/prompts/`
|
|
48
|
-
| `.github/agents/`
|
|
49
|
-
| `.cursor/rules/`
|
|
50
|
-
| `.cursor/commands/`
|
|
51
|
-
| `.cursor/agents/`
|
|
47
|
+
| `.github/prompts/` | `*.prompt.md` | {{N}} |
|
|
48
|
+
| `.github/agents/` | `*.agent.md` | {{N}} |
|
|
49
|
+
| `.cursor/rules/` | `*.mdc` | {{N}} |
|
|
50
|
+
| `.cursor/commands/` | `*.md` | {{N}} |
|
|
51
|
+
| `.cursor/agents/` | `*.agent.md` | {{N}} |
|
|
52
52
|
|
|
53
53
|
5. **Present summary and ask for confirmation**:
|
|
54
54
|
|
|
@@ -89,17 +89,20 @@ mkdir -p .claude/agents-snippets
|
|
|
89
89
|
> **Parallelizable**: Process rules, commands, and agents in parallel.
|
|
90
90
|
|
|
91
91
|
For each `.claude/rules/*.md`:
|
|
92
|
+
|
|
92
93
|
1. Read the file
|
|
93
94
|
2. Parse frontmatter (between `---` delimiters) — **preserve `paths:` and `applyTo:` fields**
|
|
94
95
|
3. Extract the body (everything after the closing `---`)
|
|
95
96
|
4. Write to `.claude/rules-snippets/<name>.md` — include the frontmatter fields (`paths:`, `applyTo:`, `description:`) at the top of the snippet
|
|
96
97
|
|
|
97
98
|
For each `.claude/commands/*.md`:
|
|
99
|
+
|
|
98
100
|
1. Read the file
|
|
99
101
|
2. Extract body content (after frontmatter)
|
|
100
102
|
3. Write to `.claude/prompt-snippets/<name>.md`
|
|
101
103
|
|
|
102
104
|
For each `.claude/agents/*.agent.md`:
|
|
105
|
+
|
|
103
106
|
1. Read the file
|
|
104
107
|
2. Parse frontmatter — preserve `user-invocable`, `agents`, `mode`, `model`, `temperature`, `permission` fields
|
|
105
108
|
3. Extract body content
|
|
@@ -113,7 +116,7 @@ For each `.claude/agents/*.agent.md`:
|
|
|
113
116
|
|
|
114
117
|
```markdown
|
|
115
118
|
---
|
|
116
|
-
{{ORIGINAL_FRONTMATTER}}
|
|
119
|
+
{ { ORIGINAL_FRONTMATTER } }
|
|
117
120
|
---
|
|
118
121
|
|
|
119
122
|
# {{TITLE}}
|
|
@@ -125,7 +128,7 @@ Follow the rules defined in [.claude/rules-snippets/{{NAME}}.md](../rules-snippe
|
|
|
125
128
|
|
|
126
129
|
```markdown
|
|
127
130
|
---
|
|
128
|
-
{{ORIGINAL_FRONTMATTER}}
|
|
131
|
+
{ { ORIGINAL_FRONTMATTER } }
|
|
129
132
|
---
|
|
130
133
|
|
|
131
134
|
# {{TITLE}}
|
|
@@ -137,7 +140,7 @@ Follow the prompt defined in [.claude/prompt-snippets/{{NAME}}.md](../prompt-sni
|
|
|
137
140
|
|
|
138
141
|
```markdown
|
|
139
142
|
---
|
|
140
|
-
{{ORIGINAL_FRONTMATTER}}
|
|
143
|
+
{ { ORIGINAL_FRONTMATTER } }
|
|
141
144
|
---
|
|
142
145
|
|
|
143
146
|
# {{AGENT_NAME}}
|
|
@@ -150,6 +153,7 @@ Follow the agent definition in [.claude/agents-snippets/{{NAME}}.md](../agents-s
|
|
|
150
153
|
> **Parallelizable**: Process instructions, prompts, and agents in parallel.
|
|
151
154
|
|
|
152
155
|
**Instructions** — For each `.github/instructions/*.instructions.md`:
|
|
156
|
+
|
|
153
157
|
1. Check if a matching snippet exists in `.claude/rules-snippets/`
|
|
154
158
|
2. If no matching snippet: extract body content → create `.claude/rules-snippets/<name>.md`
|
|
155
159
|
3. Replace body with thin wrapper preserving `applyTo:` and `description:` frontmatter:
|
|
@@ -166,13 +170,14 @@ Follow the rules defined in [.claude/rules-snippets/{{NAME}}.md](../../.claude/r
|
|
|
166
170
|
```
|
|
167
171
|
|
|
168
172
|
**Prompts** — For each `.github/prompts/*.prompt.md`:
|
|
173
|
+
|
|
169
174
|
1. Check if a matching snippet exists in `.claude/prompt-snippets/`
|
|
170
175
|
2. If no matching snippet: extract body → create `.claude/prompt-snippets/<name>.md`
|
|
171
176
|
3. Replace body with thin wrapper:
|
|
172
177
|
|
|
173
178
|
```markdown
|
|
174
179
|
---
|
|
175
|
-
{{ORIGINAL_FRONTMATTER}}
|
|
180
|
+
{ { ORIGINAL_FRONTMATTER } }
|
|
176
181
|
---
|
|
177
182
|
|
|
178
183
|
# {{TITLE}}
|
|
@@ -181,13 +186,14 @@ Follow the prompt defined in [.claude/prompt-snippets/{{NAME}}.md](../../.claude
|
|
|
181
186
|
```
|
|
182
187
|
|
|
183
188
|
**Agents** — For each `.github/agents/*.agent.md`:
|
|
189
|
+
|
|
184
190
|
1. Check if a matching snippet exists in `.claude/agents-snippets/`
|
|
185
191
|
2. If no matching snippet: extract body → create `.claude/agents-snippets/<name>.md`
|
|
186
192
|
3. Replace body with thin wrapper:
|
|
187
193
|
|
|
188
194
|
```markdown
|
|
189
195
|
---
|
|
190
|
-
{{ORIGINAL_FRONTMATTER}}
|
|
196
|
+
{ { ORIGINAL_FRONTMATTER } }
|
|
191
197
|
---
|
|
192
198
|
|
|
193
199
|
# {{AGENT_NAME}}
|
|
@@ -200,13 +206,14 @@ Follow the agent definition in [.claude/agents-snippets/{{NAME}}.md](../../.clau
|
|
|
200
206
|
> **Parallelizable**: Process rules, commands, and agents in parallel.
|
|
201
207
|
|
|
202
208
|
**Rules** — For each `.cursor/rules/*.mdc`:
|
|
209
|
+
|
|
203
210
|
1. Check if a matching snippet exists in `.claude/rules-snippets/`
|
|
204
211
|
2. If no matching snippet: extract body → create `.claude/rules-snippets/<name>.md`
|
|
205
212
|
3. Replace body with thin wrapper preserving original `.mdc` frontmatter:
|
|
206
213
|
|
|
207
214
|
```markdown
|
|
208
215
|
---
|
|
209
|
-
{{ORIGINAL_MDC_FRONTMATTER}}
|
|
216
|
+
{ { ORIGINAL_MDC_FRONTMATTER } }
|
|
210
217
|
---
|
|
211
218
|
|
|
212
219
|
# {{TITLE}}
|
|
@@ -215,33 +222,29 @@ Follow the rules defined in [.claude/rules-snippets/{{NAME}}.md](../../.claude/r
|
|
|
215
222
|
```
|
|
216
223
|
|
|
217
224
|
**Commands** — For each `.cursor/commands/*.md`:
|
|
225
|
+
|
|
218
226
|
1. Check if a matching snippet exists in `.claude/prompt-snippets/`
|
|
219
227
|
2. If no matching snippet: extract body → create `.claude/prompt-snippets/<name>.md`
|
|
220
228
|
3. Replace body with thin wrapper referencing `../../.claude/prompt-snippets/{{NAME}}.md`
|
|
221
229
|
|
|
222
230
|
**Agents** — For each `.cursor/agents/*.agent.md`:
|
|
231
|
+
|
|
223
232
|
1. Check if a matching snippet exists in `.claude/agents-snippets/`
|
|
224
233
|
2. If no matching snippet: extract body → create `.claude/agents-snippets/<name>.md`
|
|
225
234
|
3. Replace body with thin wrapper referencing `../../.claude/agents-snippets/{{NAME}}.md`
|
|
226
235
|
|
|
227
236
|
### Step 7: Create .opencode/ Directory
|
|
228
237
|
|
|
229
|
-
1. Create `.opencode/opencode.
|
|
238
|
+
1. Create `.opencode/opencode.jsonc` using only supported schema keys:
|
|
230
239
|
|
|
231
240
|
```json
|
|
232
241
|
{
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
"paths": [
|
|
240
|
-
".agents/skills/**/*.md",
|
|
241
|
-
".claude/skills/**/*.md"
|
|
242
|
-
]
|
|
243
|
-
},
|
|
244
|
-
"lsp": true
|
|
242
|
+
"$schema": "https://opencode.ai/config.json",
|
|
243
|
+
"instructions": ["AGENTS.md", ".opencode/rules/*.md"],
|
|
244
|
+
"skills": {
|
|
245
|
+
"paths": [".agents/skills/**/*.md", ".claude/skills/**/*.md"]
|
|
246
|
+
},
|
|
247
|
+
"lsp": true
|
|
245
248
|
}
|
|
246
249
|
```
|
|
247
250
|
|
|
@@ -299,6 +302,7 @@ Install the CHANGELOG/secrets enforcement hook to run before every commit:
|
|
|
299
302
|
```
|
|
300
303
|
|
|
301
304
|
This enforces:
|
|
305
|
+
|
|
302
306
|
- **CHANGELOG.md** — [Unreleased] must have content when non-trivial files are staged
|
|
303
307
|
- **Zone.Identifier** — `*:Zone.Identifier` files are blocked from commit
|
|
304
308
|
- **Secrets** — `.env`, `.env.*`, `*.key`, `*.pem` files are blocked from commit
|
|
@@ -335,6 +339,7 @@ Read the existing `CLAUDE.md` and add missing sections:
|
|
|
335
339
|
- Build system section ({{BUILD_SYSTEM}} detected in Step 1)
|
|
336
340
|
|
|
337
341
|
3. **Snippet architecture section** — add:
|
|
342
|
+
|
|
338
343
|
```markdown
|
|
339
344
|
## Snippet Architecture
|
|
340
345
|
|
|
@@ -377,45 +382,45 @@ If `--verbose`: log each check result.
|
|
|
377
382
|
|
|
378
383
|
### Directories Created
|
|
379
384
|
|
|
380
|
-
| Directory
|
|
381
|
-
|
|
382
|
-
| `.claude/rules-snippets/`
|
|
385
|
+
| Directory | Files |
|
|
386
|
+
| -------------------------- | ----- |
|
|
387
|
+
| `.claude/rules-snippets/` | {{N}} |
|
|
383
388
|
| `.claude/prompt-snippets/` | {{N}} |
|
|
384
389
|
| `.claude/agents-snippets/` | {{N}} |
|
|
385
|
-
| `.opencode/commands/`
|
|
386
|
-
| `.opencode/rules/`
|
|
387
|
-
| `.opencode/agents/`
|
|
390
|
+
| `.opencode/commands/` | {{N}} |
|
|
391
|
+
| `.opencode/rules/` | {{N}} |
|
|
392
|
+
| `.opencode/agents/` | {{N}} |
|
|
388
393
|
|
|
389
394
|
### Files Converted to Thin Wrappers
|
|
390
395
|
|
|
391
|
-
| Category
|
|
392
|
-
|
|
393
|
-
| `.claude/rules/`
|
|
394
|
-
| `.claude/commands/`
|
|
395
|
-
| `.claude/agents/`
|
|
396
|
+
| Category | Count | Example |
|
|
397
|
+
| ----------------------- | ----- | ------------------------------------------------- |
|
|
398
|
+
| `.claude/rules/` | {{N}} | `coding-standards.md` → thin wrapper |
|
|
399
|
+
| `.claude/commands/` | {{N}} | `bootstrap.md` → thin wrapper |
|
|
400
|
+
| `.claude/agents/` | {{N}} | `reviewer.agent.md` → thin wrapper |
|
|
396
401
|
| `.github/instructions/` | {{N}} | `coding-standards.instructions.md` → thin wrapper |
|
|
397
|
-
| `.github/prompts/`
|
|
398
|
-
| `.github/agents/`
|
|
399
|
-
| `.cursor/rules/`
|
|
400
|
-
| `.cursor/commands/`
|
|
401
|
-
| `.cursor/agents/`
|
|
402
|
+
| `.github/prompts/` | {{N}} | `specify.prompt.md` → thin wrapper |
|
|
403
|
+
| `.github/agents/` | {{N}} | `reviewer.agent.md` → thin wrapper |
|
|
404
|
+
| `.cursor/rules/` | {{N}} | `coding-standards.mdc` → thin wrapper |
|
|
405
|
+
| `.cursor/commands/` | {{N}} | `bootstrap.md` → thin wrapper |
|
|
406
|
+
| `.cursor/agents/` | {{N}} | `reviewer.agent.md` → thin wrapper |
|
|
402
407
|
|
|
403
408
|
### New Files
|
|
404
409
|
|
|
405
|
-
| File
|
|
406
|
-
|
|
407
|
-
| `.opencode/opencode.
|
|
408
|
-
| `.toolkit-version`
|
|
410
|
+
| File | Purpose |
|
|
411
|
+
| -------------------------- | -------------------------- |
|
|
412
|
+
| `.opencode/opencode.jsonc` | OpenCode configuration |
|
|
413
|
+
| `.toolkit-version` | Version tracking (`3.0.0`) |
|
|
409
414
|
|
|
410
415
|
### Validation Results
|
|
411
416
|
|
|
412
|
-
| Check
|
|
413
|
-
|
|
414
|
-
| Snippet completeness
|
|
415
|
-
| Thin wrapper references
|
|
416
|
-
| `paths:` frontmatter preserved | ✅ Monorepo scoping intact
|
|
417
|
-
| No lost placeholders
|
|
418
|
-
| No broken paths
|
|
417
|
+
| Check | Status |
|
|
418
|
+
| ------------------------------ | ------------------------------------------ |
|
|
419
|
+
| Snippet completeness | ✅ All snippets have content |
|
|
420
|
+
| Thin wrapper references | ✅ All wrappers reference correct snippets |
|
|
421
|
+
| `paths:` frontmatter preserved | ✅ Monorepo scoping intact |
|
|
422
|
+
| No lost placeholders | ✅ All `{{VAR}}` preserved |
|
|
423
|
+
| No broken paths | ✅ All relative paths resolve |
|
|
419
424
|
|
|
420
425
|
### Cleanup
|
|
421
426
|
|