nitm-ai-dev-toolkit 3.0.20 → 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.
@@ -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.json` - OpenCode configuration (⚠️ see schema validation below)
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.json` Schema Validation:**
216
+ **⚠️ OpenCode `opencode.jsonc` Schema Validation:**
217
217
 
218
- When creating or modifying `.opencode/opencode.json`, **only use supported top-level keys**. The schema is defined at `https://opencode.ai/config.json`. Adding unsupported keys will cause validation errors.
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 | 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 |
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.json
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 | 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) | ✓ |
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.json:
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 'module';
11
- import fs from 'fs';
12
- import os from 'os';
13
- import path from 'path';
14
- import { fileURLToPath } from 'url';
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 { getPonytailInstructions } = require('../../hooks/ponytail-instructions');
21
- const { getDefaultMode, normalizePersistedMode } = require('../../hooks/ponytail-config');
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
- process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config'),
26
- 'opencode',
27
- '.ponytail-active',
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
- try {
32
- return normalizePersistedMode(fs.readFileSync(statePath, 'utf8').trim()) || getDefaultMode();
33
- } catch (e) {
34
- return getDefaultMode();
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
- fs.mkdirSync(path.dirname(statePath), { recursive: true });
40
- fs.writeFileSync(statePath, mode);
47
+ fs.mkdirSync(path.dirname(statePath), { recursive: true });
48
+ fs.writeFileSync(statePath, mode);
41
49
  }
42
50
 
43
51
  export default async ({ client } = {}) => {
44
- const log = (level, message) => {
45
- try { client && client.app && client.app.log({ body: { service: 'ponytail', level, message } }); } catch (e) {}
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
- const ponytailSkillsDir = path.resolve(__dirname, '../../.agents/skills');
60
+ const ponytailSkillsDir = path.resolve(__dirname, "../../.agents/skills");
49
61
 
50
- return {
51
- // Register skills directory so opencode discovers ponytail skills.
52
- config: async (config) => {
53
- config.skills = config.skills || {};
54
- config.skills.paths = config.skills.paths || [];
55
- if (!config.skills.paths.includes(ponytailSkillsDir)) {
56
- config.skills.paths.push(ponytailSkillsDir);
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
- // Append the ruleset to the system prompt every turn.
61
- 'experimental.chat.system.transform': async (_input, output) => {
62
- const mode = readMode();
63
- if (mode === 'off') return;
64
- output.system.push(getPonytailInstructions(mode));
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
- // Persist `/ponytail <level>` so the next turn's injection follows it.
68
- // ponytail: mode applies from the next message, not the current one — the
69
- // transform reads the flag the command writes. Good enough; switch to a
70
- // synchronous store if same-turn switching ever matters.
71
- 'command.execute.before': async (input) => {
72
- if (!input || input.command !== 'ponytail') return;
73
- // `off` is persisted like any mode; the transform reads it and stays silent.
74
- const mode = normalizePersistedMode((input.arguments || '').trim()) || getDefaultMode();
75
- writeMode(mode);
76
- log('info', 'ponytail ' + mode);
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
  };
@@ -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 | 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 |
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.json](.opencode/opencode.json) - OpenCode configuration
387
+ - [.opencode/opencode.jsonc](.opencode/opencode.jsonc) - OpenCode configuration
@@ -43,7 +43,7 @@
43
43
 
44
44
  ## OpenCode
45
45
 
46
- - Config is in `.opencode/opencode.json`.
46
+ - Config is in `.opencode/opencode.jsonc`.
47
47
  - Commands are in `.opencode/commands/`.
48
48
  - Rules are in `.opencode/rules/`.
49
49
  - Agents are in `.opencode/agents/`.
@@ -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
- }