agentsys 5.0.2 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/.claude-plugin/marketplace.json +21 -14
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/AGENTS.md +2 -1
  4. package/CHANGELOG.md +24 -1
  5. package/README.md +7 -6
  6. package/adapters/codex/skills/agnix/SKILL.md +0 -1
  7. package/adapters/codex/skills/audit-project/SKILL.md +0 -1
  8. package/adapters/codex/skills/audit-project-agents/SKILL.md +0 -1
  9. package/adapters/codex/skills/audit-project-github/SKILL.md +0 -1
  10. package/adapters/codex/skills/consult/SKILL.md +133 -59
  11. package/adapters/codex/skills/debate/SKILL.md +214 -0
  12. package/adapters/codex/skills/delivery-approval/SKILL.md +0 -1
  13. package/adapters/codex/skills/deslop/SKILL.md +0 -1
  14. package/adapters/codex/skills/drift-detect/SKILL.md +0 -1
  15. package/adapters/codex/skills/enhance/SKILL.md +0 -1
  16. package/adapters/codex/skills/learn/SKILL.md +0 -1
  17. package/adapters/codex/skills/next-task/SKILL.md +0 -1
  18. package/adapters/codex/skills/perf/SKILL.md +0 -1
  19. package/adapters/codex/skills/repo-map/SKILL.md +0 -1
  20. package/adapters/codex/skills/ship/SKILL.md +0 -1
  21. package/adapters/codex/skills/ship-ci-review-loop/SKILL.md +0 -1
  22. package/adapters/codex/skills/ship-deployment/SKILL.md +0 -1
  23. package/adapters/codex/skills/ship-error-handling/SKILL.md +0 -1
  24. package/adapters/codex/skills/sync-docs/SKILL.md +0 -1
  25. package/adapters/opencode/agents/agent-enhancer.md +0 -1
  26. package/adapters/opencode/agents/agnix-agent.md +0 -1
  27. package/adapters/opencode/agents/ci-fixer.md +0 -1
  28. package/adapters/opencode/agents/ci-monitor.md +0 -1
  29. package/adapters/opencode/agents/claudemd-enhancer.md +0 -1
  30. package/adapters/opencode/agents/consult-agent.md +123 -31
  31. package/adapters/opencode/agents/cross-file-enhancer.md +0 -1
  32. package/adapters/opencode/agents/debate-orchestrator.md +169 -0
  33. package/adapters/opencode/agents/delivery-validator.md +0 -1
  34. package/adapters/opencode/agents/deslop-agent.md +0 -1
  35. package/adapters/opencode/agents/docs-enhancer.md +0 -1
  36. package/adapters/opencode/agents/exploration-agent.md +0 -1
  37. package/adapters/opencode/agents/hooks-enhancer.md +0 -1
  38. package/adapters/opencode/agents/implementation-agent.md +0 -1
  39. package/adapters/opencode/agents/learn-agent.md +0 -1
  40. package/adapters/opencode/agents/map-validator.md +0 -1
  41. package/adapters/opencode/agents/perf-analyzer.md +0 -1
  42. package/adapters/opencode/agents/perf-code-paths.md +0 -1
  43. package/adapters/opencode/agents/perf-investigation-logger.md +0 -1
  44. package/adapters/opencode/agents/perf-orchestrator.md +0 -1
  45. package/adapters/opencode/agents/perf-theory-gatherer.md +0 -1
  46. package/adapters/opencode/agents/perf-theory-tester.md +0 -1
  47. package/adapters/opencode/agents/plan-synthesizer.md +0 -1
  48. package/adapters/opencode/agents/planning-agent.md +0 -1
  49. package/adapters/opencode/agents/plugin-enhancer.md +0 -1
  50. package/adapters/opencode/agents/prompt-enhancer.md +0 -1
  51. package/adapters/opencode/agents/simple-fixer.md +0 -1
  52. package/adapters/opencode/agents/skills-enhancer.md +0 -1
  53. package/adapters/opencode/agents/sync-docs-agent.md +0 -1
  54. package/adapters/opencode/agents/task-discoverer.md +0 -1
  55. package/adapters/opencode/agents/test-coverage-checker.md +0 -1
  56. package/adapters/opencode/agents/worktree-manager.md +0 -1
  57. package/adapters/opencode/commands/agnix.md +0 -1
  58. package/adapters/opencode/commands/audit-project-agents.md +0 -1
  59. package/adapters/opencode/commands/audit-project-github.md +0 -1
  60. package/adapters/opencode/commands/audit-project.md +0 -1
  61. package/adapters/opencode/commands/consult.md +134 -59
  62. package/adapters/opencode/commands/debate.md +224 -0
  63. package/adapters/opencode/commands/delivery-approval.md +0 -1
  64. package/adapters/opencode/commands/deslop.md +0 -1
  65. package/adapters/opencode/commands/drift-detect.md +0 -1
  66. package/adapters/opencode/commands/enhance.md +0 -1
  67. package/adapters/opencode/commands/learn.md +0 -1
  68. package/adapters/opencode/commands/next-task.md +0 -1
  69. package/adapters/opencode/commands/perf.md +0 -1
  70. package/adapters/opencode/commands/repo-map.md +0 -1
  71. package/adapters/opencode/commands/ship-ci-review-loop.md +0 -1
  72. package/adapters/opencode/commands/ship-deployment.md +0 -1
  73. package/adapters/opencode/commands/ship-error-handling.md +0 -1
  74. package/adapters/opencode/commands/ship.md +0 -1
  75. package/adapters/opencode/commands/sync-docs.md +0 -1
  76. package/adapters/opencode/skills/agnix/SKILL.md +1 -2
  77. package/adapters/opencode/skills/consult/SKILL.md +41 -27
  78. package/adapters/opencode/skills/debate/SKILL.md +245 -0
  79. package/adapters/opencode/skills/deslop/SKILL.md +1 -2
  80. package/adapters/opencode/skills/discover-tasks/SKILL.md +1 -2
  81. package/adapters/opencode/skills/drift-analysis/SKILL.md +1 -2
  82. package/adapters/opencode/skills/enhance-agent-prompts/SKILL.md +1 -2
  83. package/adapters/opencode/skills/enhance-claude-memory/SKILL.md +1 -2
  84. package/adapters/opencode/skills/enhance-cross-file/SKILL.md +1 -2
  85. package/adapters/opencode/skills/enhance-docs/SKILL.md +1 -2
  86. package/adapters/opencode/skills/enhance-hooks/SKILL.md +1 -2
  87. package/adapters/opencode/skills/enhance-orchestrator/SKILL.md +1 -2
  88. package/adapters/opencode/skills/enhance-plugins/SKILL.md +1 -2
  89. package/adapters/opencode/skills/enhance-prompts/SKILL.md +1 -2
  90. package/adapters/opencode/skills/enhance-skills/SKILL.md +1 -2
  91. package/adapters/opencode/skills/learn/SKILL.md +1 -2
  92. package/adapters/opencode/skills/orchestrate-review/SKILL.md +0 -1
  93. package/adapters/opencode/skills/perf-analyzer/SKILL.md +1 -2
  94. package/adapters/opencode/skills/perf-baseline-manager/SKILL.md +1 -2
  95. package/adapters/opencode/skills/perf-benchmarker/SKILL.md +1 -2
  96. package/adapters/opencode/skills/perf-code-paths/SKILL.md +1 -2
  97. package/adapters/opencode/skills/perf-investigation-logger/SKILL.md +1 -2
  98. package/adapters/opencode/skills/perf-profiler/SKILL.md +1 -2
  99. package/adapters/opencode/skills/perf-theory-gatherer/SKILL.md +1 -2
  100. package/adapters/opencode/skills/perf-theory-tester/SKILL.md +1 -2
  101. package/adapters/opencode/skills/repo-mapping/SKILL.md +1 -2
  102. package/adapters/opencode/skills/sync-docs/SKILL.md +1 -2
  103. package/adapters/opencode/skills/validate-delivery/SKILL.md +1 -2
  104. package/lib/adapter-transforms.js +24 -4
  105. package/package.json +1 -1
  106. package/plugins/agnix/.claude-plugin/plugin.json +1 -1
  107. package/plugins/agnix/skills/agnix/SKILL.md +1 -1
  108. package/plugins/audit-project/.claude-plugin/plugin.json +1 -1
  109. package/plugins/audit-project/lib/adapter-transforms.js +24 -4
  110. package/plugins/consult/.claude-plugin/plugin.json +1 -1
  111. package/plugins/consult/agents/consult-agent.md +123 -30
  112. package/plugins/consult/commands/consult.md +136 -60
  113. package/plugins/consult/skills/consult/SKILL.md +39 -24
  114. package/plugins/debate/.claude-plugin/plugin.json +21 -0
  115. package/plugins/debate/agents/debate-orchestrator.md +175 -0
  116. package/plugins/debate/commands/debate.md +221 -0
  117. package/plugins/debate/lib/adapter-transforms.js +298 -0
  118. package/plugins/debate/lib/collectors/codebase.js +392 -0
  119. package/plugins/debate/lib/collectors/docs-patterns.js +713 -0
  120. package/plugins/debate/lib/collectors/documentation.js +219 -0
  121. package/plugins/debate/lib/collectors/github.js +330 -0
  122. package/plugins/debate/lib/collectors/index.js +126 -0
  123. package/plugins/debate/lib/config/index.js +14 -0
  124. package/plugins/debate/lib/cross-platform/index.js +539 -0
  125. package/plugins/debate/lib/discovery/index.js +352 -0
  126. package/plugins/debate/lib/drift-detect/collectors.js +37 -0
  127. package/plugins/debate/lib/enhance/agent-analyzer.js +421 -0
  128. package/plugins/debate/lib/enhance/agent-patterns.js +571 -0
  129. package/plugins/debate/lib/enhance/auto-suppression.js +622 -0
  130. package/plugins/debate/lib/enhance/benchmark.js +417 -0
  131. package/plugins/debate/lib/enhance/cross-file-analyzer.js +930 -0
  132. package/plugins/debate/lib/enhance/cross-file-patterns.js +370 -0
  133. package/plugins/debate/lib/enhance/docs-analyzer.js +325 -0
  134. package/plugins/debate/lib/enhance/docs-patterns.js +671 -0
  135. package/plugins/debate/lib/enhance/fixer.js +721 -0
  136. package/plugins/debate/lib/enhance/hook-analyzer.js +135 -0
  137. package/plugins/debate/lib/enhance/hook-patterns.js +40 -0
  138. package/plugins/debate/lib/enhance/index.js +127 -0
  139. package/plugins/debate/lib/enhance/plugin-analyzer.js +402 -0
  140. package/plugins/debate/lib/enhance/plugin-patterns.js +326 -0
  141. package/plugins/debate/lib/enhance/projectmemory-analyzer.js +551 -0
  142. package/plugins/debate/lib/enhance/projectmemory-patterns.js +617 -0
  143. package/plugins/debate/lib/enhance/prompt-analyzer.js +457 -0
  144. package/plugins/debate/lib/enhance/prompt-patterns.js +1484 -0
  145. package/plugins/debate/lib/enhance/reporter.js +1348 -0
  146. package/plugins/debate/lib/enhance/security-patterns.js +284 -0
  147. package/plugins/debate/lib/enhance/skill-analyzer.js +182 -0
  148. package/plugins/debate/lib/enhance/skill-patterns.js +147 -0
  149. package/plugins/debate/lib/enhance/suppression.js +352 -0
  150. package/plugins/debate/lib/enhance/tool-patterns.js +373 -0
  151. package/plugins/debate/lib/index.js +270 -0
  152. package/plugins/debate/lib/patterns/cli-enhancers.js +611 -0
  153. package/plugins/debate/lib/patterns/pipeline.js +948 -0
  154. package/plugins/debate/lib/patterns/review-patterns.js +558 -0
  155. package/plugins/debate/lib/patterns/slop-analyzers.js +2305 -0
  156. package/plugins/debate/lib/patterns/slop-patterns.js +1187 -0
  157. package/plugins/debate/lib/perf/analyzer/index.js +22 -0
  158. package/plugins/debate/lib/perf/argument-parser.js +105 -0
  159. package/plugins/debate/lib/perf/baseline-comparator.js +50 -0
  160. package/plugins/debate/lib/perf/baseline-store.js +127 -0
  161. package/plugins/debate/lib/perf/benchmark-runner.js +404 -0
  162. package/plugins/debate/lib/perf/breaking-point-finder.js +52 -0
  163. package/plugins/debate/lib/perf/breaking-point-runner.js +60 -0
  164. package/plugins/debate/lib/perf/checkpoint.js +123 -0
  165. package/plugins/debate/lib/perf/code-paths.js +86 -0
  166. package/plugins/debate/lib/perf/consolidation.js +37 -0
  167. package/plugins/debate/lib/perf/constraint-runner.js +71 -0
  168. package/plugins/debate/lib/perf/experiment-runner.js +32 -0
  169. package/plugins/debate/lib/perf/index.js +41 -0
  170. package/plugins/debate/lib/perf/investigation-state.js +874 -0
  171. package/plugins/debate/lib/perf/optimization-runner.js +79 -0
  172. package/plugins/debate/lib/perf/profilers/go.js +22 -0
  173. package/plugins/debate/lib/perf/profilers/index.js +46 -0
  174. package/plugins/debate/lib/perf/profilers/java.js +23 -0
  175. package/plugins/debate/lib/perf/profilers/node.js +27 -0
  176. package/plugins/debate/lib/perf/profilers/python.js +23 -0
  177. package/plugins/debate/lib/perf/profilers/rust.js +23 -0
  178. package/plugins/debate/lib/perf/profiling-runner.js +75 -0
  179. package/plugins/debate/lib/perf/schemas.js +140 -0
  180. package/plugins/debate/lib/platform/detect-platform.js +413 -0
  181. package/plugins/debate/lib/platform/detection-configs.js +93 -0
  182. package/plugins/debate/lib/platform/state-dir.js +132 -0
  183. package/plugins/debate/lib/platform/verify-tools.js +182 -0
  184. package/plugins/debate/lib/repo-map/cache.js +152 -0
  185. package/plugins/debate/lib/repo-map/concurrency.js +29 -0
  186. package/plugins/debate/lib/repo-map/index.js +222 -0
  187. package/plugins/debate/lib/repo-map/installer.js +212 -0
  188. package/plugins/debate/lib/repo-map/queries/go.js +27 -0
  189. package/plugins/debate/lib/repo-map/queries/index.js +100 -0
  190. package/plugins/debate/lib/repo-map/queries/java.js +38 -0
  191. package/plugins/debate/lib/repo-map/queries/javascript.js +55 -0
  192. package/plugins/debate/lib/repo-map/queries/python.js +24 -0
  193. package/plugins/debate/lib/repo-map/queries/rust.js +73 -0
  194. package/plugins/debate/lib/repo-map/queries/typescript.js +38 -0
  195. package/plugins/debate/lib/repo-map/runner.js +1364 -0
  196. package/plugins/debate/lib/repo-map/updater.js +562 -0
  197. package/plugins/debate/lib/repo-map/usage-analyzer.js +407 -0
  198. package/plugins/debate/lib/schemas/plugin-manifest.schema.json +57 -0
  199. package/plugins/debate/lib/schemas/validator.js +247 -0
  200. package/plugins/debate/lib/sources/custom-handler.js +199 -0
  201. package/plugins/debate/lib/sources/policy-questions.js +246 -0
  202. package/plugins/debate/lib/sources/source-cache.js +165 -0
  203. package/plugins/debate/lib/state/workflow-state.js +576 -0
  204. package/plugins/debate/lib/types/agent-frontmatter.d.ts +134 -0
  205. package/plugins/debate/lib/types/command-frontmatter.d.ts +107 -0
  206. package/plugins/debate/lib/types/hook-frontmatter.d.ts +115 -0
  207. package/plugins/debate/lib/types/index.d.ts +84 -0
  208. package/plugins/debate/lib/types/plugin-manifest.d.ts +102 -0
  209. package/plugins/debate/lib/types/skill-frontmatter.d.ts +89 -0
  210. package/plugins/debate/lib/utils/atomic-write.js +94 -0
  211. package/plugins/debate/lib/utils/cache-manager.js +159 -0
  212. package/plugins/debate/lib/utils/command-parser.js +0 -0
  213. package/plugins/debate/lib/utils/context-optimizer.js +300 -0
  214. package/plugins/debate/lib/utils/deprecation.js +37 -0
  215. package/plugins/debate/lib/utils/shell-escape.js +88 -0
  216. package/plugins/debate/lib/utils/state-helpers.js +61 -0
  217. package/plugins/debate/skills/debate/SKILL.md +264 -0
  218. package/plugins/deslop/.claude-plugin/plugin.json +1 -1
  219. package/plugins/deslop/lib/adapter-transforms.js +24 -4
  220. package/plugins/deslop/skills/deslop/SKILL.md +1 -1
  221. package/plugins/drift-detect/.claude-plugin/plugin.json +1 -1
  222. package/plugins/drift-detect/lib/adapter-transforms.js +24 -4
  223. package/plugins/drift-detect/skills/drift-analysis/SKILL.md +1 -1
  224. package/plugins/enhance/.claude-plugin/plugin.json +1 -1
  225. package/plugins/enhance/lib/adapter-transforms.js +24 -4
  226. package/plugins/enhance/skills/enhance-agent-prompts/SKILL.md +1 -1
  227. package/plugins/enhance/skills/enhance-claude-memory/SKILL.md +1 -1
  228. package/plugins/enhance/skills/enhance-cross-file/SKILL.md +1 -1
  229. package/plugins/enhance/skills/enhance-docs/SKILL.md +1 -1
  230. package/plugins/enhance/skills/enhance-hooks/SKILL.md +1 -1
  231. package/plugins/enhance/skills/enhance-orchestrator/SKILL.md +1 -1
  232. package/plugins/enhance/skills/enhance-plugins/SKILL.md +1 -1
  233. package/plugins/enhance/skills/enhance-prompts/SKILL.md +1 -1
  234. package/plugins/enhance/skills/enhance-skills/SKILL.md +1 -1
  235. package/plugins/learn/.claude-plugin/plugin.json +1 -1
  236. package/plugins/learn/agents/learn-agent.md +1 -1
  237. package/plugins/learn/lib/adapter-transforms.js +24 -4
  238. package/plugins/learn/skills/learn/SKILL.md +1 -1
  239. package/plugins/next-task/.claude-plugin/plugin.json +1 -1
  240. package/plugins/next-task/agents/exploration-agent.md +1 -1
  241. package/plugins/next-task/lib/adapter-transforms.js +24 -4
  242. package/plugins/next-task/skills/discover-tasks/SKILL.md +1 -1
  243. package/plugins/next-task/skills/validate-delivery/SKILL.md +1 -1
  244. package/plugins/perf/.claude-plugin/plugin.json +1 -1
  245. package/plugins/perf/lib/adapter-transforms.js +24 -4
  246. package/plugins/perf/skills/perf-analyzer/SKILL.md +1 -1
  247. package/plugins/perf/skills/perf-baseline-manager/SKILL.md +1 -1
  248. package/plugins/perf/skills/perf-benchmarker/SKILL.md +1 -1
  249. package/plugins/perf/skills/perf-code-paths/SKILL.md +1 -1
  250. package/plugins/perf/skills/perf-investigation-logger/SKILL.md +1 -1
  251. package/plugins/perf/skills/perf-profiler/SKILL.md +1 -1
  252. package/plugins/perf/skills/perf-theory-gatherer/SKILL.md +1 -1
  253. package/plugins/perf/skills/perf-theory-tester/SKILL.md +1 -1
  254. package/plugins/repo-map/.claude-plugin/plugin.json +1 -1
  255. package/plugins/repo-map/lib/adapter-transforms.js +24 -4
  256. package/plugins/ship/.claude-plugin/plugin.json +1 -1
  257. package/plugins/ship/lib/adapter-transforms.js +24 -4
  258. package/plugins/sync-docs/.claude-plugin/plugin.json +1 -1
  259. package/plugins/sync-docs/lib/adapter-transforms.js +24 -4
  260. package/plugins/sync-docs/skills/sync-docs/SKILL.md +1 -1
  261. package/scripts/gen-adapters.js +6 -7
  262. package/scripts/generate-docs.js +4 -2
  263. package/scripts/plugins.txt +1 -0
  264. package/site/content.json +6 -6
@@ -1,8 +1,7 @@
1
- <!-- AUTO-GENERATED by scripts/gen-adapters.js - DO NOT EDIT -->
2
1
  ---
3
2
  name: validate-delivery
4
3
  description: "Use when user asks to \"validate delivery\", \"check readiness\", or \"verify completion\". Runs tests, build, and requirement checks with pass/fail instructions."
5
- version: 5.0.2
4
+ version: 5.1.0
6
5
  ---
7
6
 
8
7
  # validate-delivery
@@ -18,10 +18,30 @@ function transformBodyForOpenCode(content, repoRoot) {
18
18
  content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, '${PLUGIN_ROOT}');
19
19
  content = content.replace(/\$CLAUDE_PLUGIN_ROOT/g, '$PLUGIN_ROOT');
20
20
 
21
- content = content.replace(/\.claude\//g, '.opencode/');
22
- content = content.replace(/\.claude'/g, ".opencode'");
23
- content = content.replace(/\.claude"/g, '.opencode"');
24
- content = content.replace(/\.claude`/g, '.opencode`');
21
+ // Replace .claude/ paths with .opencode/ but preserve platform documentation lists
22
+ // that enumerate all three platforms (Claude Code: .claude/, OpenCode: .opencode/, Codex: .codex/)
23
+ // Also preserve {AI_STATE_DIR} references which are platform-agnostic
24
+ content = content.replace(/\.claude\//g, (match, offset) => {
25
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
26
+ // Skip if inside a platform enumeration (e.g., "Claude Code: `.claude/`")
27
+ if (/Claude Code:/.test(context)) return match;
28
+ return '.opencode/';
29
+ });
30
+ content = content.replace(/\.claude'/g, (match, offset) => {
31
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
32
+ if (/Claude Code:/.test(context)) return match;
33
+ return ".opencode'";
34
+ });
35
+ content = content.replace(/\.claude"/g, (match, offset) => {
36
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
37
+ if (/Claude Code:/.test(context)) return match;
38
+ return '.opencode"';
39
+ });
40
+ content = content.replace(/\.claude`/g, (match, offset) => {
41
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
42
+ if (/Claude Code:/.test(context)) return match;
43
+ return '.opencode`';
44
+ });
25
45
 
26
46
  const plugins = discovery.discoverPlugins(repoRoot);
27
47
  if (plugins.length > 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentsys",
3
- "version": "5.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "A modular runtime and orchestration system for AI agents - works with Claude Code, OpenCode, and Codex CLI",
5
5
  "main": "lib/platform/detect-platform.js",
6
6
  "type": "commonjs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agnix",
3
- "version": "5.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "Lint agent configurations before they break your workflow. Validates Skills, Hooks, MCP, Memory, Plugins.",
5
5
  "author": {
6
6
  "name": "Avi Fenesh",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agnix
3
3
  description: "Use when user asks to 'lint agent configs', 'validate skills', 'check CLAUDE.md', 'validate hooks', 'lint MCP'. Validates agent configuration files against 155 rules across 10+ AI tools."
4
- version: 5.0.2
4
+ version: 5.1.0
5
5
  argument-hint: "[path] [--fix] [--strict] [--target=claude-code|cursor|codex]"
6
6
  ---
7
7
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "audit-project",
3
- "version": "5.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "Multi-agent iterative code review until zero issues remain",
5
5
  "author": {
6
6
  "name": "Avi Fenesh",
@@ -18,10 +18,30 @@ function transformBodyForOpenCode(content, repoRoot) {
18
18
  content = content.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g, '${PLUGIN_ROOT}');
19
19
  content = content.replace(/\$CLAUDE_PLUGIN_ROOT/g, '$PLUGIN_ROOT');
20
20
 
21
- content = content.replace(/\.claude\//g, '.opencode/');
22
- content = content.replace(/\.claude'/g, ".opencode'");
23
- content = content.replace(/\.claude"/g, '.opencode"');
24
- content = content.replace(/\.claude`/g, '.opencode`');
21
+ // Replace .claude/ paths with .opencode/ but preserve platform documentation lists
22
+ // that enumerate all three platforms (Claude Code: .claude/, OpenCode: .opencode/, Codex: .codex/)
23
+ // Also preserve {AI_STATE_DIR} references which are platform-agnostic
24
+ content = content.replace(/\.claude\//g, (match, offset) => {
25
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
26
+ // Skip if inside a platform enumeration (e.g., "Claude Code: `.claude/`")
27
+ if (/Claude Code:/.test(context)) return match;
28
+ return '.opencode/';
29
+ });
30
+ content = content.replace(/\.claude'/g, (match, offset) => {
31
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
32
+ if (/Claude Code:/.test(context)) return match;
33
+ return ".opencode'";
34
+ });
35
+ content = content.replace(/\.claude"/g, (match, offset) => {
36
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
37
+ if (/Claude Code:/.test(context)) return match;
38
+ return '.opencode"';
39
+ });
40
+ content = content.replace(/\.claude`/g, (match, offset) => {
41
+ const context = content.substring(Math.max(0, offset - 60), offset + match.length + 10);
42
+ if (/Claude Code:/.test(context)) return match;
43
+ return '.opencode`';
44
+ });
25
45
 
26
46
  const plugins = discovery.discoverPlugins(repoRoot);
27
47
  if (plugins.length > 0) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "consult",
3
- "version": "5.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "Cross-tool AI consultation: get second opinions from Gemini, Codex, Claude, OpenCode, or Copilot CLI",
5
5
  "author": {
6
6
  "name": "Avi Fenesh",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: consult-agent
3
- description: "Execute cross-tool AI consultations via Task spawning. Use when agents or workflows need a second opinion from Gemini, Codex, Claude, OpenCode, or Copilot."
3
+ description: "Execute cross-tool AI consultations via Task spawning. Use when agents or workflows need a second opinion from Gemini, Codex, Claude, OpenCode, or Copilot. Supports multi-instance parallel consultations (count > 1)."
4
4
  tools:
5
5
  - Skill
6
6
  - Bash(claude:*)
@@ -22,11 +22,13 @@ model: sonnet
22
22
 
23
23
  You are the programmatic interface for cross-tool AI consultations. The consult plugin follows the standard Command -> Agent -> Skill pattern:
24
24
 
25
- - **Command** (`/consult`): User-facing entry point. Handles interactive parameter selection (tool picker, effort picker, model picker via AskUserQuestion). Invokes the consult skill directly. Does NOT spawn this agent.
26
- - **Agent** (this file): Programmatic entry point for other agents and workflows via Task(). Requires all parameters pre-resolved by the caller. Invokes the consult skill, then executes the CLI command it returns via Bash.
27
- - **Skill** (`consult`): Implementation source of truth. Provides provider configurations, model mappings, command templates, context packaging, and output parsing logic. Both the command and this agent invoke the skill before executing anything.
25
+ - **Command** (`/consult`): User-facing entry point. Handles natural language parsing and interactive parameter selection. For single instance (count=1), invokes the consult skill directly. For multi-instance (count>1), spawns this agent.
26
+ - **Agent** (this file): Programmatic entry point. Requires all parameters pre-resolved by the caller. Handles both single-instance (invoke skill) and multi-instance (parallel execution). Used by the command for multi-instance and by other agents/workflows via Task().
27
+ - **Skill** (`consult`): Implementation source of truth. Provides provider configurations, model mappings, command templates, context packaging, and output parsing logic.
28
28
 
29
- Use this agent when the /consult command is not available (e.g., from other agents or automated workflows that need a second opinion).
29
+ Use this agent for:
30
+ 1. Multi-instance consultations (count > 1) dispatched by the /consult command
31
+ 2. Programmatic consultations from other agents or automated workflows
30
32
 
31
33
  ## Why Sonnet Model
32
34
 
@@ -48,13 +50,28 @@ Extract from prompt. ALL parameters MUST be pre-resolved by the caller (the /con
48
50
  - **context**: Context mode (diff, file, none) - default: none
49
51
  - **continueSession**: Session ID or true/false
50
52
  - **sessionFile**: Path to session state file
53
+ - **count**: Number of parallel instances (1-5, default: 1)
51
54
 
52
55
  If any required parameter is missing, return an error as plain JSON:
53
56
  ```json
54
57
  {"error": "Missing required parameter: [param]. The caller must resolve all parameters before spawning this agent."}
55
58
  ```
56
59
 
57
- ### 2. Invoke Consult Skill (MUST)
60
+ ### 2. Route: Single vs Multi-Instance
61
+
62
+ If both `continueSession` is set and `count > 1`, return:
63
+ ```json
64
+ {"error": "Cannot use --continue with count > 1. Session resume applies to a single tool session."}
65
+ ```
66
+
67
+ Validate count: if provided, must be 1-5. If out of range, return `{"error": "Instance count must be 1-5. Got: [count]"}`.
68
+
69
+ If `count` is 1 (or not provided), follow the **Single Instance** path (Step 3).
70
+ If `count` is 2-5, follow the **Multi-Instance** path (Step 4).
71
+
72
+ ### 3. Single Instance (count=1)
73
+
74
+ #### 3a. Invoke Consult Skill (MUST)
58
75
 
59
76
  You MUST invoke the `consult` skill using the Skill tool. Pass all parsed arguments. The skill is the authoritative source for provider configurations, model mappings, command building, context packaging, session loading, and output parsing. Do not bypass the skill.
60
77
 
@@ -65,11 +82,11 @@ Args: [question] --tool=[tool] --effort=[effort] [--model=[model]] [--context=[c
65
82
  Example: "Review this function" --tool=claude --effort=high --model=opus
66
83
  ```
67
84
 
68
- ### 3. Execute Command
85
+ #### 3b. Execute Command
69
86
 
70
87
  Run the CLI command returned by the skill via Bash with a 120-second timeout.
71
88
 
72
- ### 4. Parse and Return Result
89
+ #### 3c. Parse and Return Result
73
90
 
74
91
  Parse the response using the method specified by the skill for the target tool, then format and display the result as human-friendly text:
75
92
 
@@ -80,12 +97,107 @@ The results of the consultation are:
80
97
  {response}
81
98
  ```
82
99
 
83
- Set `continuable: true` for Claude, Gemini, Codex, and OpenCode (tools with continuation support). Codex continuation is context-based (prior Q&A prepended to prompt) since `codex resume` is TUI-only. Claude, Gemini, and OpenCode support native session resume flags. Only Copilot is non-continuable.
100
+ Set `continuable: true` for Claude, Gemini, Codex, and OpenCode (tools with session resume support). Only Copilot is non-continuable. Each tool uses a different resume mechanism: Claude/Gemini use `--resume`, Codex uses `codex exec resume`, OpenCode uses `--session`/`--continue`.
84
101
 
85
- ### 5. Save Session State
102
+ #### 3d. Save Session State
86
103
 
87
104
  Write session state to the sessionFile path provided by the command for continuity.
88
105
 
106
+ ### 4. Multi-Instance (count > 1)
107
+
108
+ When count > 1, execute N parallel consultations with the same tool and parameters.
109
+
110
+ #### 4a. Invoke Consult Skill Once
111
+
112
+ Invoke the `consult` skill once to get the resolved command template and provider configuration. This gives you the exact CLI command to run for this tool/model/effort combination. Do NOT execute the command from the skill response yet.
113
+
114
+ #### 4b. Write Indexed Temp Files
115
+
116
+ Write the question to N indexed temp files using the Write tool:
117
+ - `{AI_STATE_DIR}/consult/question-1.tmp`
118
+ - `{AI_STATE_DIR}/consult/question-2.tmp`
119
+ - ... through `question-{count}.tmp`
120
+
121
+ Platform state directory:
122
+ - Claude Code: `.claude/`
123
+ - OpenCode: `.opencode/`
124
+ - Codex CLI: `.codex/`
125
+
126
+ All temp files contain the same question text (with context prepended if applicable).
127
+
128
+ #### 4c. Execute N Commands in Parallel
129
+
130
+ Run N Bash commands **in parallel** (multiple Bash tool calls in a single message). Each command uses the template from Step 4a but points to its own indexed temp file. Set 120-second timeout on each.
131
+
132
+ Example for 3 parallel Codex calls:
133
+ ```
134
+ Bash: codex exec "$(cat "{AI_STATE_DIR}/consult/question-1.tmp")" --json -m "gpt-5.3-codex" -c model_reasoning_effort="high"
135
+ Bash: codex exec "$(cat "{AI_STATE_DIR}/consult/question-2.tmp")" --json -m "gpt-5.3-codex" -c model_reasoning_effort="high"
136
+ Bash: codex exec "$(cat "{AI_STATE_DIR}/consult/question-3.tmp")" --json -m "gpt-5.3-codex" -c model_reasoning_effort="high"
137
+ ```
138
+
139
+ #### 4d. Parse and Format Results
140
+
141
+ Parse each response using the skill's output parsing rules for the target tool. Format as numbered responses:
142
+
143
+ ```
144
+ # Multi-Consultation Results
145
+
146
+ Tool: {tool}, Model: {model}, Effort: {effort}, Instances: {count}
147
+
148
+ ---
149
+
150
+ ## Response 1 (Duration: {duration_ms}ms)
151
+
152
+ {response_1}
153
+
154
+ ---
155
+
156
+ ## Response 2 (Duration: {duration_ms}ms)
157
+
158
+ {response_2}
159
+
160
+ ---
161
+
162
+ [... for each instance ...]
163
+
164
+ ---
165
+
166
+ ## Synthesis
167
+
168
+ Key agreement points:
169
+ - [Common themes across responses]
170
+
171
+ Key differences:
172
+ - [Where responses diverge]
173
+ ```
174
+
175
+ If some instances failed but others succeeded, show the successful responses and note failures:
176
+ `[WARN] Instance {N} failed: {error}. Showing {M} of {count} responses.`
177
+
178
+ #### 4e. Clean Up and Save State
179
+
180
+ 1. Delete all indexed temp files (`question-1.tmp` through `question-{count}.tmp`)
181
+ 2. Save multi-session state to `{AI_STATE_DIR}/consult/last-multi-session.json`:
182
+
183
+ ```json
184
+ {
185
+ "tool": "codex",
186
+ "model": "gpt-5.3-codex",
187
+ "effort": "high",
188
+ "count": 3,
189
+ "timestamp": "{ISO 8601 timestamp of execution}",
190
+ "question": "original question text",
191
+ "sessions": [
192
+ {"session_id": "abc-123", "continuable": true},
193
+ {"session_id": "def-456", "continuable": true},
194
+ {"session_id": "ghi-789", "continuable": true}
195
+ ]
196
+ }
197
+ ```
198
+
199
+ 3. Also save the first session to `{AI_STATE_DIR}/consult/last-session.json` (standard format) so `--continue` works.
200
+
89
201
  ## Error Handling
90
202
 
91
203
  | Error | Action |
@@ -98,26 +210,7 @@ Write session state to the sessionFile path provided by the command for continui
98
210
 
99
211
  ## Output Sanitization
100
212
 
101
- Before including any consulted tool's response in the output, scan the response text and redact matches for these patterns:
102
-
103
- | Pattern | Description | Replacement |
104
- |---------|-------------|-------------|
105
- | `sk-[a-zA-Z0-9_-]{20,}` | Anthropic API keys | `[REDACTED_API_KEY]` |
106
- | `sk-proj-[a-zA-Z0-9_-]{20,}` | OpenAI project keys | `[REDACTED_API_KEY]` |
107
- | `sk-ant-[a-zA-Z0-9_-]{20,}` | Anthropic API keys (ant prefix) | `[REDACTED_API_KEY]` |
108
- | `AIza[a-zA-Z0-9_-]{30,}` | Google API keys | `[REDACTED_API_KEY]` |
109
- | `ghp_[a-zA-Z0-9]{36,}` | GitHub personal access tokens | `[REDACTED_TOKEN]` |
110
- | `gho_[a-zA-Z0-9]{36,}` | GitHub OAuth tokens | `[REDACTED_TOKEN]` |
111
- | `github_pat_[a-zA-Z0-9_]{20,}` | GitHub fine-grained PATs | `[REDACTED_TOKEN]` |
112
- | `ANTHROPIC_API_KEY=[^\s]+` | Key assignment in env output | `ANTHROPIC_API_KEY=[REDACTED]` |
113
- | `OPENAI_API_KEY=[^\s]+` | Key assignment in env output | `OPENAI_API_KEY=[REDACTED]` |
114
- | `GOOGLE_API_KEY=[^\s]+` | Key assignment in env output | `GOOGLE_API_KEY=[REDACTED]` |
115
- | `GEMINI_API_KEY=[^\s]+` | Key assignment in env output | `GEMINI_API_KEY=[REDACTED]` |
116
- | `AKIA[A-Z0-9]{16}` | AWS access keys | `[REDACTED_AWS_KEY]` |
117
- | `ASIA[A-Z0-9]{16}` | AWS session tokens | `[REDACTED_AWS_KEY]` |
118
- | `Bearer [a-zA-Z0-9_-]{20,}` | Authorization headers | `Bearer [REDACTED]` |
119
-
120
- Apply redaction to the full response text before inserting into the result JSON. If any redaction occurs, append a note: `[WARN] Sensitive tokens were redacted from the response.`
213
+ Apply the redaction patterns from the consult skill (`plugins/consult/skills/consult/SKILL.md`, Output Sanitization section). The skill is the canonical source for all redaction patterns.
121
214
 
122
215
  ## Critical Constraints
123
216