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,61 +1,88 @@
1
1
  ---
2
2
  name: consult
3
3
  description: Consult another AI CLI tool for a second opinion. Use when you want to cross-check ideas, get alternative approaches, or validate decisions with Gemini, Codex, Claude, OpenCode, or Copilot.
4
- codex-description: 'Use when user asks to "consult gemini", "ask codex", "get second opinion", "cross-check with claude", "consult another AI", "ask opencode", "copilot opinion". Queries another AI CLI tool and returns the response.'
5
- argument-hint: "[question] [--tool=gemini|codex|claude|opencode|copilot] [--effort=low|medium|high|max] [--model=MODEL] [--context=diff|file=PATH|none] [--continue]"
6
- allowed-tools: Skill, Bash(git:*), Bash(claude:*), Bash(gemini:*), Bash(codex:*), Bash(opencode:*), Bash(copilot:*), Bash(where.exe:*), Bash(which:*), Read, Write, AskUserQuestion
4
+ codex-description: 'Use when user asks to "consult gemini", "ask codex", "get second opinion", "cross-check with claude", "consult another AI", "ask opencode", "copilot opinion", "ask 3 codex", "multi-consult". Queries another AI CLI tool and returns the response.'
5
+ argument-hint: "[natural language or flags] [--tool] [--effort] [--model] [--context] [--continue] [--count=N]"
6
+ allowed-tools: Skill, Task, Bash(git:*), Bash(claude:*), Bash(gemini:*), Bash(codex:*), Bash(opencode:*), Bash(copilot:*), Bash(where.exe:*), Bash(which:*), Read, Write, AskUserQuestion
7
7
  ---
8
8
 
9
9
  # /consult - Cross-Tool AI Consultation
10
10
 
11
- You are executing the /consult command. Your job is to consult another AI CLI tool, get its response, and present the results to the user.
11
+ You are executing the /consult command. Your job is to parse the user's request (natural language or flags), resolve missing parameters interactively, and execute the consultation.
12
12
 
13
13
  ## Constraints
14
14
 
15
15
  - NEVER expose API keys in commands or output
16
16
  - NEVER run with permission-bypassing flags (`--dangerously-skip-permissions`, `bypassPermissions`)
17
- - MUST use safe-mode defaults (`-a suggest` for Codex, `--allowedTools "Read,Glob,Grep"` for Claude)
17
+ - MUST use safe-mode defaults (`--allowedTools "Read,Glob,Grep"` for Claude, `-c model_reasoning_effort` for Codex)
18
18
  - MUST enforce 120s timeout on all tool executions
19
- - MUST validate `--tool` against allow-list: gemini, codex, claude, opencode, copilot (reject all others)
19
+ - MUST validate tool names against allow-list: gemini, codex, claude, opencode, copilot (reject all others)
20
20
  - MUST validate `--context=file=PATH` is within the project directory (reject absolute paths outside cwd)
21
21
  - MUST quote all user-provided values in shell commands to prevent injection
22
22
  - NEVER execute tools the user has not explicitly requested
23
23
 
24
- ## Arguments
24
+ ## Execution
25
25
 
26
- Parse from $ARGUMENTS:
26
+ ### Phase 1: Parse Input (Flags + Natural Language)
27
27
 
28
- - **question**: What to ask the consulted tool (required unless --continue)
29
- - **--tool**: Target tool: `gemini`, `codex`, `claude`, `opencode`, `copilot` (interactive picker if omitted)
30
- - **--effort**: Thinking effort: `low`, `medium`, `high`, `max` (interactive picker if omitted)
31
- - **--model**: Specific model name (interactive picker if omitted). Free text.
32
- - **--context**: Auto-include context: `diff` (git diff), `file=PATH` (attach specific file), `none` (default)
33
- - **--continue**: Continue last consultation session, or `--continue=SESSION_ID` for specific session
28
+ Parse `$ARGUMENTS` using both explicit flags and natural language extraction. Flags always take priority over NLP when both provide the same parameter.
34
29
 
35
- ## Execution
30
+ #### Step 1a: Extract explicit flags
31
+
32
+ Look for and remove these flags from `$ARGUMENTS`:
33
+
34
+ 1. `--tool=VALUE` or `--tool VALUE` where VALUE is one of: gemini, codex, claude, opencode, copilot
35
+ 2. `--effort=VALUE` or `--effort VALUE` where VALUE is one of: low, medium, high, max
36
+ 3. `--model=VALUE` or `--model VALUE` (any string, including quoted)
37
+ 4. `--context=VALUE` where VALUE is: diff, file=PATH, or none
38
+ 5. `--continue` (optionally `--continue=SESSION_ID`)
39
+ 6. `--count=N` where N is 1-5
40
+
41
+ Remove all matched flags and their values from `$ARGUMENTS`.
42
+
43
+ #### Step 1b: Natural language extraction (on remaining text)
44
+
45
+ After removing flags, parse the remaining text for these patterns:
36
46
 
37
- ### Phase 1: Parse Arguments
47
+ **Tool extraction** (case-insensitive):
48
+ - "with {tool}" (e.g., "with codex") -> tool
49
+ - "ask {tool}" (e.g., "ask gemini") -> tool
50
+ - "consult {tool}" -> tool
51
+ - "{tool} about" (e.g., "codex about") -> tool
52
+ - Tool names: claude, gemini, codex, opencode, copilot
38
53
 
39
- Extract these values from `$ARGUMENTS`:
54
+ **Count extraction**:
55
+ - "ask {N} {tool}" (e.g., "ask 3 codex") -> count=N, tool
56
+ - "{N} {tool}" (e.g., "3 codex") -> count=N, tool
57
+ - "{N} instances" -> count=N
58
+ - "few instances" / "multiple" / "several" -> count=ambiguous (ask user in Phase 2)
40
59
 
41
- 1. Look for `--tool=VALUE` or `--tool VALUE` where VALUE MUST be one of: gemini, codex, claude, opencode, copilot (reject others)
42
- 2. Look for `--effort=VALUE` or `--effort VALUE` where VALUE MUST be one of: low, medium, high, max
43
- 3. Look for `--model=VALUE` or `--model VALUE` (any string, including quoted strings like `"my model"`)
44
- 4. Look for `--context=VALUE` where VALUE is: diff, file=PATH, or none
45
- 5. Look for `--continue` (optionally `--continue=SESSION_ID`)
46
- 6. Remove all matched flags (including their values) from `$ARGUMENTS`. Handle quoted flag values (e.g., `--model "gpt 4"`) by removing the entire quoted string. Everything remaining is the **question**.
60
+ **Count validation**: After extracting count (from flags or NLP), validate: 1 <= count <= 5. If count < 1 or count > 5, show `[ERROR] Instance count must be 1-5. Got: {count}` and stop.
47
61
 
48
- If no question text and no `--continue` flag found, show:
62
+ **Effort extraction**:
63
+ - "quick" / "fast" / "brief" -> effort=low
64
+ - "thorough" / "deep" / "carefully" / "detailed" -> effort=high
65
+ - "maximum" / "max effort" / "exhaustive" -> effort=max
66
+
67
+ **Question extraction**:
68
+ - Text after "about" is the question (e.g., "with codex about my auth approach" -> question="my auth approach")
69
+ - If no "about" pattern, everything remaining after removing tool/count/effort markers is the question
70
+
71
+ **Precedence rule**: Flags from Step 1a always override NLP from Step 1b.
72
+
73
+ If no question text and no `--continue` flag found after both steps:
49
74
  ```
50
- [ERROR] Usage: /consult "your question" [--tool=gemini|codex|claude|opencode|copilot] [--effort=low|medium|high|max]
75
+ [ERROR] Usage: /consult "your question" or /consult with gemini about your question
51
76
  ```
52
77
 
53
- ### Phase 2: Interactive Parameter Selection
78
+ ### Phase 2: Interactive Parameter Resolution
54
79
 
55
- MUST resolve ALL missing parameters interactively before Phase 3. ONLY skip this phase if ALL of --tool, --effort, AND --model are explicitly provided by the user in $ARGUMENTS. Do NOT silently default any parameter.
80
+ MUST resolve ALL missing parameters interactively. ONLY skip this phase if ALL required params (tool, effort, model) are resolved AND either a question exists or --continue is present. Do NOT silently default any parameter.
56
81
 
57
82
  #### Step 2a: Handle --continue
58
83
 
84
+ **Note:** `--continue` and `--count > 1` are mutually exclusive. Session resume applies to a single tool session. If both are present, show `[ERROR] Cannot use --continue with --count > 1. Use --continue for single session resume.` and stop.
85
+
59
86
  If `--continue` is present:
60
87
  1. Read the session file at `{AI_STATE_DIR}/consult/last-session.json`
61
88
 
@@ -66,9 +93,9 @@ If `--continue` is present:
66
93
  2. If the file exists, restore the saved tool, session_id, and model from it
67
94
  3. If the file does not exist, show `[WARN] No previous session found` and proceed as a fresh consultation
68
95
 
69
- #### Step 2b: Batch Selection (tool + effort)
96
+ #### Step 2b: Detect installed tools
70
97
 
71
- First, detect which tools are installed by running all 5 checks **in parallel** via Bash:
98
+ Run all 5 checks **in parallel** via Bash:
72
99
 
73
100
  - `where.exe <tool> 2>nul && echo FOUND || echo NOTFOUND` (Windows)
74
101
  - `which <tool> 2>/dev/null && echo FOUND || echo NOTFOUND` (Unix)
@@ -77,12 +104,14 @@ Check for: claude, gemini, codex, opencode, copilot.
77
104
 
78
105
  If zero tools are installed: `[ERROR] No AI CLI tools found. Install at least one: npm i -g @anthropic-ai/claude-code, npm i -g @openai/codex, npm i -g opencode-ai`
79
106
 
80
- Then use a SINGLE AskUserQuestion call to ask all missing parameters at once. Include only the questions for parameters NOT already provided in $ARGUMENTS:
107
+ #### Step 2c: Batch selection for missing params
108
+
109
+ Use a SINGLE AskUserQuestion call to ask all missing parameters at once. Include ONLY questions for parameters NOT already resolved from Phase 1:
81
110
 
82
111
  ```
83
112
  AskUserQuestion:
84
113
  questions:
85
- - header: "AI Tool" # SKIP if --tool provided
114
+ - header: "AI Tool" # SKIP if tool resolved
86
115
  question: "Which AI tool should I consult?"
87
116
  multiSelect: false
88
117
  options (only if installed):
@@ -92,7 +121,7 @@ AskUserQuestion:
92
121
  - label: "OpenCode" description: "Flexible model choice"
93
122
  - label: "Copilot" description: "GitHub-integrated AI"
94
123
 
95
- - header: "Effort" # SKIP if --effort provided
124
+ - header: "Effort" # SKIP if effort resolved
96
125
  question: "What thinking effort level?"
97
126
  multiSelect: false
98
127
  options:
@@ -100,16 +129,29 @@ AskUserQuestion:
100
129
  - label: "Low" description: "Fast, minimal reasoning"
101
130
  - label: "High" description: "Thorough analysis"
102
131
  - label: "Max" description: "Maximum reasoning depth"
132
+
133
+ - header: "Instances" # SKIP if count resolved or not hinted
134
+ question: "How many parallel consultations?"
135
+ multiSelect: false
136
+ options:
137
+ - label: "1 (Single)" description: "Standard single consultation"
138
+ - label: "2 (Compare)" description: "Two responses to compare"
139
+ - label: "3 (Panel)" description: "Three perspectives"
140
+ - label: "5 (Full spread)" description: "Five diverse perspectives"
103
141
  ```
104
142
 
105
- Map tool choice to lowercase: "Claude" -> "claude", "Codex" -> "codex", etc.
106
- Map effort choice: "Medium (Recommended)" -> "medium", "Low" -> "low", "High" -> "high", "Max" -> "max".
143
+ ONLY show the Instances question if:
144
+ - The user explicitly mentioned multiple instances (e.g., "few", "multiple", "several")
145
+ - The count was set but ambiguous
146
+ Do NOT show Instances question for simple single-tool requests. Default count=1 silently when no multi-instance intent detected.
107
147
 
108
- IMPORTANT: Do NOT skip any missing parameter. Do NOT silently default --effort to "medium" or --tool to any value. Present pickers for ALL unresolved parameters.
148
+ Map tool choice to lowercase: "Claude" -> "claude", "Codex" -> "codex", etc.
149
+ Map effort choice: "Medium (Recommended)" -> "medium", "Low" -> "low", etc.
150
+ Map count choice: "1 (Single)" -> 1, "2 (Compare)" -> 2, "3 (Panel)" -> 3.
109
151
 
110
- #### Step 2c: Model Selection (MUST ask if no --model)
152
+ #### Step 2d: Model selection (MUST ask if no --model)
111
153
 
112
- After tool is resolved (from Step 2b or $ARGUMENTS), present a model picker with options specific to the selected tool. The user can always type a custom model name via the "Other" option.
154
+ After tool is resolved, present a model picker with options specific to the selected tool. The user can always type a custom model name via the "Other" option.
113
155
 
114
156
  **For Claude:**
115
157
  ```
@@ -149,7 +191,7 @@ AskUserQuestion:
149
191
  - label: "gpt-5.3-codex" description: "Latest, most capable coding model"
150
192
  - label: "gpt-5.2-codex" description: "Strong coding model"
151
193
  - label: "gpt-5.2" description: "General purpose GPT-5.2"
152
- - label: "gpt-5-codex-mini" description: "Cost-effective, 4x more usage"
194
+ - label: "gpt-5.3-codex-spark" description: "Cost-effective, 4x more usage"
153
195
  ```
154
196
 
155
197
  **For OpenCode:**
@@ -176,17 +218,21 @@ AskUserQuestion:
176
218
  options:
177
219
  - label: "claude-sonnet-4-5" description: "Default Copilot model"
178
220
  - label: "claude-opus-4-6" description: "Most capable Claude model"
179
- - label: "gpt-5.3-codex" description: "OpenAI GPT-5.3 Codex"
221
+ - label: "gpt-5.3-codex" description: "OpenAI GPT-5.3 Codex"
180
222
  - label: "gemini-3-pro" description: "Google Gemini 3 Pro"
181
223
  ```
182
224
 
183
- Map the user's choice to the model string (strip " (Recommended)" suffix if present). Pass the selected model to the skill via `--model`.
225
+ Map the user's choice to the model string (strip " (Recommended)" suffix if present).
184
226
 
185
- IMPORTANT: Do NOT skip this step. Do NOT silently use a default model. If --model was not explicitly provided in $ARGUMENTS, you MUST present this picker. The model lists above are current as of Feb 2026 - the user may type any model name supported by their tool via the "Other" option.
227
+ IMPORTANT: Do NOT skip model selection. Do NOT silently use a default model. If --model was not explicitly provided, you MUST present this picker.
186
228
 
187
- ### Phase 3: Invoke Consult Skill
229
+ ### Phase 3: Execute Consultation
188
230
 
189
- With all parameters resolved (tool, effort, model, question, and optionally context, continue), invoke the `consult` skill using the Skill tool:
231
+ With all parameters resolved (tool, effort, model, question, count, and optionally context/continue):
232
+
233
+ #### Single instance (count=1, the default)
234
+
235
+ Invoke the `consult` skill directly using the Skill tool:
190
236
 
191
237
  ```
192
238
  Skill: consult
@@ -195,15 +241,35 @@ Args: "[question]" --tool=[tool] --effort=[effort] --model=[model] [--context=[c
195
241
  Example: "Is this the right approach?" --tool=gemini --effort=high --model=gemini-3-pro
196
242
  ```
197
243
 
198
- The skill handles the full consultation lifecycle: it resolves the model from the effort level, builds the CLI command, packages any context, executes the command via Bash with a 120-second timeout, and returns a plain JSON result.
244
+ The skill handles the full consultation lifecycle: model resolution, command building, context packaging, execution with 120s timeout, and returns a plain JSON result.
199
245
 
200
- ### Phase 4: Parse Skill Output
246
+ #### Multi-instance (count > 1)
201
247
 
202
- The skill returns a plain JSON object containing: `tool`, `model`, `effort`, `duration_ms`, `response`, `session_id`, and `continuable`. Parse the JSON directly from the skill output.
248
+ Spawn the `consult:consult-agent` via the Task tool with all resolved parameters:
203
249
 
204
- ### Phase 5: Present Results
250
+ ```
251
+ Task:
252
+ subagent_type: "consult:consult-agent"
253
+ prompt: |
254
+ Execute a multi-instance consultation with these pre-resolved parameters:
255
+ - tool: [tool]
256
+ - model: [model]
257
+ - effort: [effort]
258
+ - question: [question]
259
+ - count: [count]
260
+ - context: [context or none]
261
+
262
+ Run [count] parallel consultations with the same tool and parameters.
263
+ Return all responses formatted with numbered headers and a brief synthesis.
264
+ ```
265
+
266
+ The agent handles parallel execution, temp file management, result parsing, and synthesis.
267
+
268
+ ### Phase 4: Present Results
205
269
 
206
- After parsing the JSON, format and display the result as human-friendly text:
270
+ #### Single instance
271
+
272
+ Parse the skill's plain JSON output and display:
207
273
 
208
274
  ```
209
275
  Tool: {tool}, Model: {model}, Effort: {effort}, Duration: {duration_ms}ms.
@@ -212,15 +278,13 @@ The results of the consultation are:
212
278
  {response}
213
279
  ```
214
280
 
215
- For continuable tools with a session_id (Claude, Gemini, OpenCode), display: `Session: {session_id} - use /consult --continue to resume`
216
- For Codex (context-based continuation, no session_id), display: `Use /consult --continue to continue this conversation (prior context will be prepended)`
281
+ For continuable tools (Claude, Gemini, Codex, OpenCode), display: `Session: {session_id} - use /consult --continue to resume`
282
+
283
+ Save session state to `{AI_STATE_DIR}/consult/last-session.json`.
217
284
 
218
- Save session state for continuable tools (Claude, Gemini, Codex, OpenCode) to `{AI_STATE_DIR}/consult/last-session.json`.
285
+ #### Multi-instance
219
286
 
220
- Platform state directory:
221
- - Claude Code: `.claude/`
222
- - OpenCode: `.opencode/`
223
- - Codex CLI: `.codex/`
287
+ Display the agent's formatted output directly. The agent returns numbered responses with a synthesis section.
224
288
 
225
289
  On failure: `[ERROR] Consultation Failed: {specific error message}`
226
290
 
@@ -228,22 +292,34 @@ On failure: `[ERROR] Consultation Failed: {specific error message}`
228
292
 
229
293
  | Error | Output |
230
294
  |-------|--------|
231
- | No question provided | `[ERROR] Usage: /consult "your question" [--tool=gemini\|codex\|claude\|opencode\|copilot] [--effort=low\|medium\|high\|max]` |
295
+ | No question provided | `[ERROR] Usage: /consult "your question" or /consult with gemini about your question` |
232
296
  | Tool not installed | `[ERROR] {tool} is not installed. Install with: {install command from skill}` |
233
297
  | Tool execution fails | `[ERROR] {tool} failed: {error}. Try a different tool with --tool=[other]` |
234
298
  | Timeout (>120s) | `[ERROR] {tool} timed out after 120s. Try --effort=low for faster response` |
235
299
  | No tools available | `[ERROR] No AI CLI tools found. Install: npm i -g @anthropic-ai/claude-code` |
236
300
  | Session not found | `[WARN] No previous session found. Starting fresh consultation.` |
237
301
  | API key missing | `[ERROR] {tool} requires API key. Set {env var} (see skill for details)` |
302
+ | Count out of range | `[ERROR] Instance count must be 1-5. Got: {count}` |
303
+ | Multi-instance partial failure | Show successful responses, note failures |
238
304
 
239
305
  ## Example Usage
240
306
 
241
307
  ```bash
242
- /consult "Is this the right approach for error handling?" --tool=gemini --effort=high
243
- /consult "Review this function for performance issues" --tool=codex
244
- /consult "What alternative patterns would you suggest?" --tool=claude --effort=max
308
+ # Natural language (NLP parsing)
309
+ /consult with codex about my auth approach
310
+ /consult ask 3 codex about this design
311
+ /consult gemini should I use redis or postgres
312
+ /consult thoroughly ask claude about error handling
313
+ /consult codex few instances about performance
314
+
315
+ # Explicit flags (backward compatible)
316
+ /consult "Is this the right approach?" --tool=gemini --effort=high
317
+ /consult "Review this function" --tool=codex --count=3
245
318
  /consult "Suggest improvements" --tool=opencode --model=github-copilot/claude-opus-4-6
246
- /consult "Continue from where we left off" --continue
319
+ /consult --continue
247
320
  /consult "Explain this error" --context=diff --tool=gemini
248
321
  /consult "Review this file" --context=file=src/index.js --tool=claude
322
+
323
+ # Mixed (flags + natural language)
324
+ /consult with gemini --effort=max about database schema design
249
325
  ```
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: consult
3
3
  description: "Cross-tool AI consultation. Use when user asks to 'consult gemini', 'ask codex', 'get second opinion', 'cross-check with claude', 'consult another AI', 'ask opencode', 'copilot opinion', or wants a second opinion from a different AI tool."
4
- version: 5.0.2
4
+ version: 5.1.0
5
5
  argument-hint: "[question] [--tool] [--effort] [--model] [--context] [--continue]"
6
6
  ---
7
7
 
@@ -60,37 +60,41 @@ Command: gemini -p "QUESTION" --output-format json -m "MODEL"
60
60
  Session resume: --resume "SESSION_ID"
61
61
  ```
62
62
 
63
- Models: gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash-preview, gemini-3-pro-preview
63
+ Models: gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash, gemini-3-pro
64
64
 
65
65
  | Effort | Model |
66
66
  |--------|-------|
67
67
  | low | gemini-2.5-flash |
68
- | medium | gemini-2.5-pro |
69
- | high | gemini-3-flash-preview |
70
- | max | gemini-3-pro-preview |
68
+ | medium | gemini-3-flash |
69
+ | high | gemini-3-pro |
70
+ | max | gemini-3-pro |
71
71
 
72
72
  **Parse output**: `JSON.parse(stdout).response`
73
+ **Session ID**: `JSON.parse(stdout).session_id`
73
74
  **Continuable**: Yes (via `--resume`)
74
75
 
75
76
  ### Codex
76
77
 
77
78
  ```
78
- Command: codex -q "QUESTION" --json -m "MODEL" -a suggest -c model_reasoning_effort="LEVEL"
79
- Session resume: codex resume "SESSION_ID"
79
+ Command: codex exec "QUESTION" --json -m "MODEL" -c model_reasoning_effort="LEVEL"
80
+ Session resume: codex exec resume SESSION_ID "QUESTION" --json
81
+ Session resume (latest): codex exec resume --last "QUESTION" --json
80
82
  ```
81
83
 
82
- Models: gpt-5.1-codex-mini, gpt-5-codex, gpt-5.1-codex, gpt-5.2-codex, gpt-5.3-codex, gpt-5.1-codex-max
84
+ Note: `codex exec` is the non-interactive/headless mode. There is no `-q` flag. The TUI mode is `codex` (no subcommand).
85
+
86
+ Models: gpt-5.3-codex-spark, gpt-5-codex, gpt-5.1-codex, gpt-5.2-codex, gpt-5.3-codex, gpt-5.1-codex-max
83
87
 
84
88
  | Effort | Model | Reasoning |
85
89
  |--------|-------|-----------|
86
- | low | gpt-5.1-codex-mini | low |
90
+ | low | gpt-5.3-codex-spark | low |
87
91
  | medium | gpt-5.2-codex | medium |
88
92
  | high | gpt-5.3-codex | high |
89
93
  | max | gpt-5.3-codex | xhigh |
90
94
 
91
95
  **Parse output**: `JSON.parse(stdout).message` or raw text
92
96
  **Session ID**: Codex prints a resume hint at session end (e.g., `codex resume SESSION_ID`). Extract the session ID from stdout or from `JSON.parse(stdout).session_id` if available.
93
- **Continuable**: Yes, but interactive only. Sessions are stored as JSONL rollout files at `~/.codex/sessions/`. The `codex resume SESSION_ID` subcommand resumes in TUI mode -- it does not support `-q` for non-interactive use. For non-interactive continuation, prepend prior conversation context to the new question text instead.
97
+ **Continuable**: Yes. Sessions are stored as JSONL rollout files at `~/.codex/sessions/`. Non-interactive resume uses `codex exec resume SESSION_ID "follow-up prompt" --json`. Use `--last` instead of a session ID to resume the most recent session.
94
98
 
95
99
  ### OpenCode
96
100
 
@@ -155,7 +159,7 @@ Use the command template from the provider's configuration section. Substitute Q
155
159
 
156
160
  If continuing a session:
157
161
  - **Claude or Gemini**: append `--resume SESSION_ID` to the command.
158
- - **Codex**: no non-interactive resume flag exists. Prepend the prior Q&A context to the new question text before passing to `codex -q`.
162
+ - **Codex**: use `codex exec resume SESSION_ID "QUESTION" --json` instead of the standard command. Use `--last` instead of a session ID for the most recent session.
159
163
  - **OpenCode**: append `--session SESSION_ID` to the command. If no session_id is saved, use `--continue` instead (resumes most recent session).
160
164
  If OpenCode at max effort: append `--thinking`.
161
165
 
@@ -184,8 +188,9 @@ User-provided question text MUST NOT be interpolated into shell command strings.
184
188
  | Claude (resume) | `claude -p - --output-format json --model "MODEL" --max-turns TURNS --allowedTools "Read,Glob,Grep" --resume "SESSION_ID" < "{AI_STATE_DIR}/consult/question.tmp"` |
185
189
  | Gemini | `gemini -p - --output-format json -m "MODEL" < "{AI_STATE_DIR}/consult/question.tmp"` |
186
190
  | Gemini (resume) | `gemini -p - --output-format json -m "MODEL" --resume "SESSION_ID" < "{AI_STATE_DIR}/consult/question.tmp"` |
187
- | Codex | `codex -q "$(cat "{AI_STATE_DIR}/consult/question.tmp")" --json -m "MODEL" -a suggest` (Codex lacks stdin mode -- cat reads from platform-controlled path, not user input) |
188
- | Codex (continue) | No non-interactive resume. Prepend prior context to question, then use standard Codex command above. |
191
+ | Codex | `codex exec "$(cat "{AI_STATE_DIR}/consult/question.tmp")" --json -m "MODEL" -c model_reasoning_effort="LEVEL"` (Codex exec lacks stdin mode -- cat reads from platform-controlled path, not user input) |
192
+ | Codex (resume) | `codex exec resume SESSION_ID "$(cat "{AI_STATE_DIR}/consult/question.tmp")" --json -m "MODEL"` |
193
+ | Codex (resume latest) | `codex exec resume --last "$(cat "{AI_STATE_DIR}/consult/question.tmp")" --json -m "MODEL"` |
189
194
  | OpenCode | `opencode run - --format json --model "MODEL" --variant "VARIANT" < "{AI_STATE_DIR}/consult/question.tmp"` |
190
195
  | OpenCode (resume by ID) | `opencode run - --format json --model "MODEL" --variant "VARIANT" --session "SESSION_ID" < "{AI_STATE_DIR}/consult/question.tmp"` |
191
196
  | OpenCode (resume latest) | `opencode run - --format json --model "MODEL" --variant "VARIANT" --continue < "{AI_STATE_DIR}/consult/question.tmp"` |
@@ -238,16 +243,26 @@ If session file not found, warn and proceed as fresh consultation.
238
243
 
239
244
  ## Output Sanitization
240
245
 
241
- Before returning the response, the invoking agent MUST scan for and redact API keys, tokens, and credentials that may appear in the consulted tool's output. At minimum, redact these patterns:
242
-
243
- - `sk-[a-zA-Z0-9_-]{20,}` and `sk-ant-*`, `sk-proj-*` (API keys)
244
- - `AIza[a-zA-Z0-9_-]{30,}` (Google API keys)
245
- - `AKIA*`, `ASIA*` (AWS access/session keys)
246
- - `ghp_*`, `gho_*`, `github_pat_*` (GitHub tokens)
247
- - `ANTHROPIC_API_KEY=*`, `OPENAI_API_KEY=*`, `GOOGLE_API_KEY=*`, `GEMINI_API_KEY=*` (env assignments)
248
- - `Bearer [a-zA-Z0-9_-]{20,}` (auth headers)
249
-
250
- See `consult-agent.md` for the complete redaction pattern table with replacements.
246
+ Before including any consulted tool's response in the output, scan the response text and redact matches for these patterns:
247
+
248
+ | Pattern | Description | Replacement |
249
+ |---------|-------------|-------------|
250
+ | `sk-[a-zA-Z0-9_-]{20,}` | Anthropic API keys | `[REDACTED_API_KEY]` |
251
+ | `sk-proj-[a-zA-Z0-9_-]{20,}` | OpenAI project keys | `[REDACTED_API_KEY]` |
252
+ | `sk-ant-[a-zA-Z0-9_-]{20,}` | Anthropic API keys (ant prefix) | `[REDACTED_API_KEY]` |
253
+ | `AIza[a-zA-Z0-9_-]{30,}` | Google API keys | `[REDACTED_API_KEY]` |
254
+ | `ghp_[a-zA-Z0-9]{36,}` | GitHub personal access tokens | `[REDACTED_TOKEN]` |
255
+ | `gho_[a-zA-Z0-9]{36,}` | GitHub OAuth tokens | `[REDACTED_TOKEN]` |
256
+ | `github_pat_[a-zA-Z0-9_]{20,}` | GitHub fine-grained PATs | `[REDACTED_TOKEN]` |
257
+ | `ANTHROPIC_API_KEY=[^\s]+` | Key assignment in env output | `ANTHROPIC_API_KEY=[REDACTED]` |
258
+ | `OPENAI_API_KEY=[^\s]+` | Key assignment in env output | `OPENAI_API_KEY=[REDACTED]` |
259
+ | `GOOGLE_API_KEY=[^\s]+` | Key assignment in env output | `GOOGLE_API_KEY=[REDACTED]` |
260
+ | `GEMINI_API_KEY=[^\s]+` | Key assignment in env output | `GEMINI_API_KEY=[REDACTED]` |
261
+ | `AKIA[A-Z0-9]{16}` | AWS access keys | `[REDACTED_AWS_KEY]` |
262
+ | `ASIA[A-Z0-9]{16}` | AWS session tokens | `[REDACTED_AWS_KEY]` |
263
+ | `Bearer [a-zA-Z0-9_-]{20,}` | Authorization headers | `Bearer [REDACTED]` |
264
+
265
+ 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.`
251
266
 
252
267
  ## Output Format
253
268
 
@@ -256,7 +271,7 @@ Return a plain JSON object to stdout (no markers or wrappers):
256
271
  ```json
257
272
  {
258
273
  "tool": "gemini",
259
- "model": "gemini-3-pro-preview",
274
+ "model": "gemini-3-pro",
260
275
  "effort": "high",
261
276
  "duration_ms": 12300,
262
277
  "response": "The AI's response text here...",
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "debate",
3
+ "version": "5.1.0",
4
+ "description": "Structured multi-round debate between AI tools with proposer/challenger roles and verdict",
5
+ "author": {
6
+ "name": "Avi Fenesh",
7
+ "email": "[email protected]",
8
+ "url": "https://github.com/avifenesh"
9
+ },
10
+ "homepage": "https://github.com/avifenesh/agentsys#debate",
11
+ "repository": "https://github.com/avifenesh/agentsys",
12
+ "license": "MIT",
13
+ "keywords": [
14
+ "debate",
15
+ "dialectic",
16
+ "cross-tool",
17
+ "multi-model",
18
+ "adversarial",
19
+ "second-opinion"
20
+ ]
21
+ }