nitm-ai-dev-toolkit 3.0.20 → 3.0.22
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
|
@@ -207,49 +207,49 @@ Replace placeholders in all template files:
|
|
|
207
207
|
- `.claude/rules-snippets/*.md` - Rules content (source of truth)
|
|
208
208
|
- `.claude/prompt-snippets/*.md` - Prompt content (source of truth)
|
|
209
209
|
- `.claude/agents-snippets/*.md` - Agent definitions (source of truth)
|
|
210
|
-
- `.opencode/opencode.
|
|
210
|
+
- `.opencode/opencode.jsonc` - OpenCode configuration (⚠️ see schema validation below)
|
|
211
211
|
- `.opencode/commands/*.md` - OpenCode commands
|
|
212
212
|
- `.opencode/rules/*.md` - OpenCode rules
|
|
213
213
|
- `.opencode/agents/*.md` - OpenCode agents
|
|
214
214
|
- `.toolkit-version` - Toolkit version tracking
|
|
215
215
|
|
|
216
|
-
**⚠️ OpenCode `opencode.
|
|
216
|
+
**⚠️ OpenCode `opencode.jsonc` Schema Validation:**
|
|
217
217
|
|
|
218
|
-
When creating or modifying `.opencode/opencode.
|
|
218
|
+
When creating or modifying `.opencode/opencode.jsonc`, **only use supported top-level keys**. The schema is defined at `https://opencode.ai/config.json`. Adding unsupported keys will cause validation errors.
|
|
219
219
|
|
|
220
220
|
**Supported top-level keys:**
|
|
221
221
|
|
|
222
|
-
| Key
|
|
223
|
-
|
|
224
|
-
| `$schema`
|
|
225
|
-
| `instructions`
|
|
226
|
-
| `skills`
|
|
227
|
-
| `agent`
|
|
228
|
-
| `default_agent`
|
|
229
|
-
| `model`
|
|
230
|
-
| `small_model`
|
|
231
|
-
| `provider`
|
|
232
|
-
| `mcp`
|
|
233
|
-
| `tools`
|
|
234
|
-
| `permission`
|
|
235
|
-
| `lsp`
|
|
236
|
-
| `formatter`
|
|
237
|
-
| `server`
|
|
238
|
-
| `shell`
|
|
239
|
-
| `command`
|
|
240
|
-
| `plugin`
|
|
241
|
-
| `watcher`
|
|
242
|
-
| `snapshot`
|
|
243
|
-
| `share`
|
|
244
|
-
| `autoupdate`
|
|
245
|
-
| `compaction`
|
|
246
|
-
| `attachment`
|
|
247
|
-
| `logLevel`
|
|
248
|
-
| `disabled_providers` | Providers to disable
|
|
249
|
-
| `enabled_providers`
|
|
250
|
-
| `tool_output`
|
|
251
|
-
| `enterprise`
|
|
252
|
-
| `experimental`
|
|
222
|
+
| Key | Purpose |
|
|
223
|
+
| -------------------- | --------------------------------------- |
|
|
224
|
+
| `$schema` | Schema reference (always include) |
|
|
225
|
+
| `instructions` | Array of instruction file paths/globs |
|
|
226
|
+
| `skills` | Skill folder paths and URLs |
|
|
227
|
+
| `agent` | Custom agent configurations |
|
|
228
|
+
| `default_agent` | Default agent name |
|
|
229
|
+
| `model` | Model ID (provider/model format) |
|
|
230
|
+
| `small_model` | Lightweight model for title generation |
|
|
231
|
+
| `provider` | Provider configurations and API keys |
|
|
232
|
+
| `mcp` | MCP server configurations |
|
|
233
|
+
| `tools` | Enable/disable tools |
|
|
234
|
+
| `permission` | Tool permission rules |
|
|
235
|
+
| `lsp` | LSP server configuration |
|
|
236
|
+
| `formatter` | Code formatter configuration |
|
|
237
|
+
| `server` | Server settings (port, hostname, CORS) |
|
|
238
|
+
| `shell` | Default shell for terminal |
|
|
239
|
+
| `command` | Custom command definitions |
|
|
240
|
+
| `plugin` | Plugin list |
|
|
241
|
+
| `watcher` | File watcher ignore patterns |
|
|
242
|
+
| `snapshot` | Enable/disable snapshot tracking |
|
|
243
|
+
| `share` | Sharing behavior (manual/auto/disabled) |
|
|
244
|
+
| `autoupdate` | Auto-update settings |
|
|
245
|
+
| `compaction` | Context compaction settings |
|
|
246
|
+
| `attachment` | Image attachment limits |
|
|
247
|
+
| `logLevel` | Log level (DEBUG/INFO/WARN/ERROR) |
|
|
248
|
+
| `disabled_providers` | Providers to disable |
|
|
249
|
+
| `enabled_providers` | Allowlist of providers |
|
|
250
|
+
| `tool_output` | Tool output truncation thresholds |
|
|
251
|
+
| `enterprise` | Enterprise URL |
|
|
252
|
+
| `experimental` | Experimental features |
|
|
253
253
|
|
|
254
254
|
**Do NOT add keys not listed above** (e.g., `rules`, `agents`, `commands`, `prompts` as top-level keys — these are configured via `instructions`, `skills`, and the `.opencode/` directory structure instead).
|
|
255
255
|
|
|
@@ -633,7 +633,7 @@ Would you like to install these skills now? (Y/n)
|
|
|
633
633
|
- [x] .claude/rules-snippets/\*.md (rules content)
|
|
634
634
|
- [x] .claude/prompt-snippets/\*.md (prompt content)
|
|
635
635
|
- [x] .claude/agents-snippets/\*.md (agent content)
|
|
636
|
-
- [x] .opencode/opencode.
|
|
636
|
+
- [x] .opencode/opencode.jsonc
|
|
637
637
|
- [x] .opencode/commands/\*.md
|
|
638
638
|
- [x] .opencode/rules/\*.md
|
|
639
639
|
- [x] .opencode/agents/\*.md
|
|
@@ -777,11 +777,11 @@ Verify that all necessary instruction files exist and are properly configured:
|
|
|
777
777
|
|
|
778
778
|
**Snippet Directories:**
|
|
779
779
|
|
|
780
|
-
| Directory
|
|
781
|
-
|
|
782
|
-
| `.claude/rules-snippets/`
|
|
783
|
-
| `.claude/prompt-snippets/` | Prompt content (source of truth)
|
|
784
|
-
| `.claude/agents-snippets/` | Agent definitions (source of truth) | ✓
|
|
780
|
+
| Directory | Purpose | Status |
|
|
781
|
+
| -------------------------- | ----------------------------------- | ------ |
|
|
782
|
+
| `.claude/rules-snippets/` | Rules content (source of truth) | ✓ |
|
|
783
|
+
| `.claude/prompt-snippets/` | Prompt content (source of truth) | ✓ |
|
|
784
|
+
| `.claude/agents-snippets/` | Agent definitions (source of truth) | ✓ |
|
|
785
785
|
|
|
786
786
|
### 📝 Create Missing Instruction Files?
|
|
787
787
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://opencode.ai/config.json",
|
|
3
|
+
"instructions": [
|
|
4
|
+
"AGENTS.md",
|
|
5
|
+
".opencode/rules/*.md",
|
|
6
|
+
".agents/skills/orient-to-recent-work/SKILL.md"
|
|
7
|
+
],
|
|
8
|
+
"skills": {
|
|
9
|
+
"paths": [
|
|
10
|
+
".agents/skills/**/*.md",
|
|
11
|
+
".claude/skills/**/*.md"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"plugin": [
|
|
15
|
+
"opencode-mem",
|
|
16
|
+
"@tarquinen/opencode-dcp@latest",
|
|
17
|
+
"@dietrichgebert/ponytail",
|
|
18
|
+
"opentmux"
|
|
19
|
+
],
|
|
20
|
+
"lsp": true
|
|
21
|
+
}
|
|
@@ -4,76 +4,90 @@
|
|
|
4
4
|
// intensity, and persists /ponytail mode switches. Reuses the shared instruction
|
|
5
5
|
// builder so Claude Code, Codex, pi, and OpenCode all read one source of truth.
|
|
6
6
|
//
|
|
7
|
-
// OpenCode loads this as a server plugin — add it to your opencode.
|
|
7
|
+
// OpenCode loads this as a server plugin — add it to your opencode.jsonc:
|
|
8
8
|
// { "plugin": ["./.opencode/plugins/ponytail.mjs"] }
|
|
9
9
|
|
|
10
|
-
import { createRequire } from
|
|
11
|
-
import fs from
|
|
12
|
-
import os from
|
|
13
|
-
import path from
|
|
14
|
-
import { fileURLToPath } from
|
|
10
|
+
import { createRequire } from "module";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import os from "os";
|
|
13
|
+
import path from "path";
|
|
14
|
+
import { fileURLToPath } from "url";
|
|
15
15
|
|
|
16
16
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
17
|
|
|
18
18
|
// The shared instruction builder is CommonJS; bridge to it from this ES module.
|
|
19
19
|
const require = createRequire(import.meta.url);
|
|
20
|
-
const {
|
|
21
|
-
|
|
20
|
+
const {
|
|
21
|
+
getPonytailInstructions,
|
|
22
|
+
} = require("../../hooks/ponytail-instructions");
|
|
23
|
+
const {
|
|
24
|
+
getDefaultMode,
|
|
25
|
+
normalizePersistedMode,
|
|
26
|
+
} = require("../../hooks/ponytail-config");
|
|
22
27
|
|
|
23
28
|
// OpenCode has no flag-file convention of its own; keep mode beside its config.
|
|
24
29
|
const statePath = path.join(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
process.env.XDG_CONFIG_HOME || path.join(os.homedir(), ".config"),
|
|
31
|
+
"opencode",
|
|
32
|
+
".ponytail-active",
|
|
28
33
|
);
|
|
29
34
|
|
|
30
35
|
function readMode() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
try {
|
|
37
|
+
return (
|
|
38
|
+
normalizePersistedMode(fs.readFileSync(statePath, "utf8").trim()) ||
|
|
39
|
+
getDefaultMode()
|
|
40
|
+
);
|
|
41
|
+
} catch (e) {
|
|
42
|
+
return getDefaultMode();
|
|
43
|
+
}
|
|
36
44
|
}
|
|
37
45
|
|
|
38
46
|
function writeMode(mode) {
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
fs.mkdirSync(path.dirname(statePath), { recursive: true });
|
|
48
|
+
fs.writeFileSync(statePath, mode);
|
|
41
49
|
}
|
|
42
50
|
|
|
43
51
|
export default async ({ client } = {}) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
const log = (level, message) => {
|
|
53
|
+
try {
|
|
54
|
+
client &&
|
|
55
|
+
client.app &&
|
|
56
|
+
client.app.log({ body: { service: "ponytail", level, message } });
|
|
57
|
+
} catch (e) {}
|
|
58
|
+
};
|
|
47
59
|
|
|
48
|
-
|
|
60
|
+
const ponytailSkillsDir = path.resolve(__dirname, "../../.agents/skills");
|
|
49
61
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
62
|
+
return {
|
|
63
|
+
// Register skills directory so opencode discovers ponytail skills.
|
|
64
|
+
config: async (config) => {
|
|
65
|
+
config.skills = config.skills || {};
|
|
66
|
+
config.skills.paths = config.skills.paths || [];
|
|
67
|
+
if (!config.skills.paths.includes(ponytailSkillsDir)) {
|
|
68
|
+
config.skills.paths.push(ponytailSkillsDir);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
72
|
+
// Append the ruleset to the system prompt every turn.
|
|
73
|
+
"experimental.chat.system.transform": async (_input, output) => {
|
|
74
|
+
const mode = readMode();
|
|
75
|
+
if (mode === "off") return;
|
|
76
|
+
output.system.push(getPonytailInstructions(mode));
|
|
77
|
+
},
|
|
66
78
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
// Persist `/ponytail <level>` so the next turn's injection follows it.
|
|
80
|
+
// ponytail: mode applies from the next message, not the current one — the
|
|
81
|
+
// transform reads the flag the command writes. Good enough; switch to a
|
|
82
|
+
// synchronous store if same-turn switching ever matters.
|
|
83
|
+
"command.execute.before": async (input) => {
|
|
84
|
+
if (!input || input.command !== "ponytail") return;
|
|
85
|
+
// `off` is persisted like any mode; the transform reads it and stays silent.
|
|
86
|
+
const mode =
|
|
87
|
+
normalizePersistedMode((input.arguments || "").trim()) ||
|
|
88
|
+
getDefaultMode();
|
|
89
|
+
writeMode(mode);
|
|
90
|
+
log("info", "ponytail " + mode);
|
|
91
|
+
},
|
|
92
|
+
};
|
|
79
93
|
};
|
package/src/repo/AGENTS.md
CHANGED
|
@@ -97,40 +97,40 @@ Detailed standards are split into focused instruction files in `.github/instruct
|
|
|
97
97
|
|
|
98
98
|
For detailed standards on specific topics, refer to these skills in `.agents/skills/`:
|
|
99
99
|
|
|
100
|
-
| Skill
|
|
101
|
-
|
|
|
102
|
-
| **Atlassian CLI**
|
|
103
|
-
| **Bitbucket CLI**
|
|
104
|
-
| **Brainstorming**
|
|
105
|
-
| **Branch Finish**
|
|
106
|
-
| **Code Review**
|
|
107
|
-
| **Code Simplifier**
|
|
108
|
-
| **Debugging**
|
|
109
|
-
| **Debugger**
|
|
110
|
-
| **Documentation**
|
|
111
|
-
| **Executing Plans**
|
|
112
|
-
| **Git Worktrees**
|
|
113
|
-
| **GitHub CLI**
|
|
114
|
-
| **GitLab CLI**
|
|
115
|
-
| **Issue Tracker**
|
|
116
|
-
| **Linear CLI**
|
|
117
|
-
| **Logging**
|
|
118
|
-
| **Orient to Recent Work** | `orient-to-recent-work/SKILL.md`
|
|
119
|
-
| **Parallel Agents**
|
|
120
|
-
| **Ponytail**
|
|
121
|
-
| **Ponytail Audit**
|
|
122
|
-
| **Ponytail Debt**
|
|
123
|
-
| **Ponytail Gain**
|
|
124
|
-
| **Ponytail Help**
|
|
125
|
-
| **Ponytail Review**
|
|
126
|
-
| **Review Feedback**
|
|
127
|
-
| **Security Reviewer**
|
|
128
|
-
| **Subagent Dev**
|
|
129
|
-
| **Superpowers**
|
|
130
|
-
| **TDD**
|
|
131
|
-
| **Verification**
|
|
132
|
-
| **Writing Plans**
|
|
133
|
-
| **Writing Skills**
|
|
100
|
+
| Skill | File | Purpose |
|
|
101
|
+
| ------------------------- | ----------------------------------------- | --------------------------------------------------------------------- |
|
|
102
|
+
| **Atlassian CLI** | `acli/SKILL.md` | Atlassian CLI (ACLI) command reference |
|
|
103
|
+
| **Bitbucket CLI** | `bkt-cli/SKILL.md` | Bitbucket PRs, issues, repos CLI reference |
|
|
104
|
+
| **Brainstorming** | `brainstorming/SKILL.md` | Structured ideation sessions |
|
|
105
|
+
| **Branch Finish** | `finishing-a-development-branch/SKILL.md` | Completing and merging branches |
|
|
106
|
+
| **Code Review** | `requesting-code-review/SKILL.md` | Review process and checklists |
|
|
107
|
+
| **Code Simplifier** | `code-simplifier/SKILL.md` | Analyze recently modified code for simplification opportunities |
|
|
108
|
+
| **Debugging** | `systematic-debugging/SKILL.md` | Structured debugging methodology |
|
|
109
|
+
| **Debugger** | `debugger/SKILL.md` | Systematic debugging dispatch with mandatory root cause investigation |
|
|
110
|
+
| **Documentation** | `project-documentation/SKILL.md` | README, comments, ADRs, changelogs |
|
|
111
|
+
| **Executing Plans** | `executing-plans/SKILL.md` | Following through on implementation plans |
|
|
112
|
+
| **Git Worktrees** | `using-git-worktrees/SKILL.md` | Parallel development branches |
|
|
113
|
+
| **GitHub CLI** | `gh-cli/SKILL.md` | GitHub Issues CLI command reference |
|
|
114
|
+
| **GitLab CLI** | `glab-cli/SKILL.md` | GitLab MRs, issues, pipelines CLI reference |
|
|
115
|
+
| **Issue Tracker** | `issue-tracker/SKILL.md` | MCP tools reference, CLI fallback strategy, epic discovery |
|
|
116
|
+
| **Linear CLI** | `linear-cli/SKILL.md` | Linear CLI command reference |
|
|
117
|
+
| **Logging** | `logging/SKILL.md` | Structured logging standards, log levels, observability |
|
|
118
|
+
| **Orient to Recent Work** | `orient-to-recent-work/SKILL.md` | Build context from recent project activity |
|
|
119
|
+
| **Parallel Agents** | `dispatching-parallel-agents/SKILL.md` | Coordinating multiple AI agents |
|
|
120
|
+
| **Ponytail** | `ponytail/SKILL.md` | YAGNI/stdlib/native/minimum-discipline coding mode |
|
|
121
|
+
| **Ponytail Audit** | `ponytail-audit/SKILL.md` | Whole-repo audit for over-engineering |
|
|
122
|
+
| **Ponytail Debt** | `ponytail-debt/SKILL.md` | Track ponytail shortcuts and deferrals |
|
|
123
|
+
| **Ponytail Gain** | `ponytail-gain/SKILL.md` | Show ponytail's measured impact |
|
|
124
|
+
| **Ponytail Help** | `ponytail-help/SKILL.md` | Quick-reference for ponytail modes and commands |
|
|
125
|
+
| **Ponytail Review** | `ponytail-review/SKILL.md` | Code review focused on over-engineering |
|
|
126
|
+
| **Review Feedback** | `receiving-code-review/SKILL.md` | Responding constructively to review feedback |
|
|
127
|
+
| **Security Reviewer** | `security-reviewer/SKILL.md` | Security-focused code review |
|
|
128
|
+
| **Subagent Dev** | `subagent-driven-development/SKILL.md` | Breaking tasks into subagent chunks |
|
|
129
|
+
| **Superpowers** | `using-superpowers/SKILL.md` | Leveraging the full skill system |
|
|
130
|
+
| **TDD** | `test-driven-development/SKILL.md` | Test-driven development with red-green-refactor |
|
|
131
|
+
| **Verification** | `verification-before-completion/SKILL.md` | Quality checks before claiming work done |
|
|
132
|
+
| **Writing Plans** | `writing-plans/SKILL.md` | Feature planning and specifications |
|
|
133
|
+
| **Writing Skills** | `writing-skills/SKILL.md` | Creating effective SKILL.md files |
|
|
134
134
|
|
|
135
135
|
## ⚠️ CRITICAL: Orchestration Checkpoint (READ FIRST)
|
|
136
136
|
|
|
@@ -384,4 +384,4 @@ Documentation updates are **mandatory before committing** any feature or fix. Se
|
|
|
384
384
|
- [.opencode/rules/](.opencode/rules/) - OpenCode rules (thin wrappers → rules-snippets)
|
|
385
385
|
- [.opencode/commands/](.opencode/commands/) - OpenCode commands (thin wrappers → prompt-snippets)
|
|
386
386
|
- [.opencode/agents/](.opencode/agents/) - OpenCode agents (thin wrappers → agents-snippets)
|
|
387
|
-
- [.opencode/opencode.
|
|
387
|
+
- [.opencode/opencode.jsonc](.opencode/opencode.jsonc) - OpenCode configuration
|
package/src/repo/CLAUDE.md
CHANGED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://opencode.ai/config.json",
|
|
3
|
-
"instructions": ["AGENTS.md", ".opencode/rules/*.md", ".agents/skills/orient-to-recent-work/SKILL.md"],
|
|
4
|
-
"skills": {
|
|
5
|
-
"paths": [".agents/skills/**/*.md", ".claude/skills/**/*.md"]
|
|
6
|
-
},
|
|
7
|
-
"plugin": [".opencode/plugins/ponytail.mjs"],
|
|
8
|
-
"lsp": true
|
|
9
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://opencode.ai/config.json",
|
|
3
|
-
"instructions": ["AGENTS.md", ".opencode/rules/*.md", ".agents/skills/orient-to-recent-work/SKILL.md"],
|
|
4
|
-
"skills": {
|
|
5
|
-
"paths": [".agents/skills/**/*.md", ".claude/skills/**/*.md"]
|
|
6
|
-
},
|
|
7
|
-
"plugin": [".opencode/plugins/ponytail.mjs"],
|
|
8
|
-
"lsp": true
|
|
9
|
-
}
|