triage-ai 1.5.3 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # triage-ai
2
2
 
3
- **Multi-model AI code review. Run Claude Code, Gemini CLI and OpenAI Codex in parallel — each independently explores your codebase, then triage merges their findings into one prioritized report.**
3
+ **Collaborative AI triage for code, plans and architecture — Claude, Gemini and Codex independently explore your codebase, then merge findings with consensus scoring into one prioritized report. Use it for security audits, bug hunts, plan reviews, second opinions on AI-generated code, and more. Available as a Claude Code skill or MCP server for any AI editor.**
4
4
 
5
- ![Node.js 18+](https://img.shields.io/badge/node-18+-green.svg) ![npm](https://img.shields.io/npm/v/triage-ai.svg) ![MIT License](https://img.shields.io/badge/license-MIT-green.svg) ![Claude | Gemini | Codex](https://img.shields.io/badge/models-Claude%20%7C%20Gemini%20%7C%20Codex-purple.svg) ![MCP Compatible](https://img.shields.io/badge/MCP-compatible-orange.svg)
5
+ ![Node.js 18+](https://img.shields.io/badge/node-18+-green.svg) ![npm](https://img.shields.io/npm/v/triage-ai.svg) ![MIT License](https://img.shields.io/badge/license-MIT-green.svg) ![Claude | Gemini | Codex](https://img.shields.io/badge/models-Claude%20%7C%20Gemini%20%7C%20Codex-purple.svg) ![MCP Compatible](https://img.shields.io/badge/MCP-compatible-orange.svg) ![Claude Code Skill](https://img.shields.io/badge/Claude%20Code-skill-blue.svg)
6
6
 
7
7
  ---
8
8
 
@@ -216,9 +216,29 @@ triage-ai ready [models] # smoke test all or specific models
216
216
  | **S2** | Medium | N+1 queries, missing validation |
217
217
  | **S3** | Low | Naming conventions, dead code |
218
218
 
219
- ## MCP Server
219
+ ## AI Editor Integration
220
220
 
221
- Add to your editor's MCP configuration:
221
+ triage-ai works in any AI editor — as a **Claude Code skill** (auto-discovered, richest experience) or as an **MCP server** (universal, works everywhere).
222
+
223
+ ### Claude Code (Skill — recommended)
224
+
225
+ triage-ai ships with a `SKILL.md` that Claude Code discovers automatically after install. Claude will know when and how to run triage without any configuration.
226
+
227
+ ```bash
228
+ npm install -g triage-ai
229
+ # That's it — ask Claude to "run a triage" or "find security issues"
230
+ ```
231
+
232
+ You can also use the `/triage` slash command:
233
+
234
+ ```bash
235
+ cp examples/claude-code-skill.md ~/.claude/commands/triage.md
236
+ # Then: /triage "find security vulnerabilities"
237
+ ```
238
+
239
+ ### Claude Code (MCP)
240
+
241
+ Alternatively, add triage as an MCP server in `~/.claude/settings.json`:
222
242
 
223
243
  ```json
224
244
  {
@@ -231,15 +251,55 @@ Add to your editor's MCP configuration:
231
251
  }
232
252
  ```
233
253
 
234
- Works with Claude Desktop, Claude Code, Cursor, Windsurf, Cline, VS Code (Copilot), Zed, and Continue.
254
+ ### Gemini CLI
255
+
256
+ Add to `~/.gemini/settings.json`:
235
257
 
236
- ### Claude Code Slash Command
258
+ ```json
259
+ {
260
+ "mcpServers": {
261
+ "triage": {
262
+ "command": "triage-ai",
263
+ "args": ["--mcp"]
264
+ }
265
+ }
266
+ }
267
+ ```
268
+
269
+ For project-level context, copy the example memory file:
237
270
 
238
271
  ```bash
239
- cp examples/claude-code-skill.md ~/.claude/commands/triage.md
272
+ cp examples/gemini-md-example.md your-project/GEMINI.md
273
+ ```
274
+
275
+ ### OpenAI Codex
276
+
277
+ Add to your Codex MCP configuration, or run directly:
278
+
279
+ ```bash
280
+ codex "run triage-ai to find bugs"
281
+ ```
282
+
283
+ For project-level context, copy the example memory file:
284
+
285
+ ```bash
286
+ cp examples/agents-md-example.md your-project/AGENTS.md
240
287
  ```
241
288
 
242
- Then use `/triage "find security issues"` in Claude Code.
289
+ ### Cursor / Windsurf / Cline / VS Code (Copilot) / Zed / Continue
290
+
291
+ Add to your editor's MCP configuration:
292
+
293
+ ```json
294
+ {
295
+ "mcpServers": {
296
+ "triage": {
297
+ "command": "triage-ai",
298
+ "args": ["--mcp"]
299
+ }
300
+ }
301
+ }
302
+ ```
243
303
 
244
304
  ## Configuration
245
305
 
package/SKILL.md ADDED
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: triage
3
+ description: Triage — Collaborative AI analysis with Claude, Gemini and Codex for code review, plan review, security audits, architecture review and bug hunts. Each model independently explores the codebase, then findings are merged with consensus scoring. Use this skill when the user asks to "triage", "run triage", "code review", "security audit", "find bugs", "review this plan", "second opinion", "check for vulnerabilities", "review my changes", "architecture review", "audit", mentions "triage-ai", or wants collaborative multi-model analysis of their code, plans or architecture.
4
+ version: 1.6.1
5
+ ---
6
+
7
+ # Triage — Collaborative AI analysis with Claude, Gemini and Codex
8
+
9
+ Run `triage-ai` to launch Claude Code, Gemini CLI and OpenAI Codex as a collaborative review team. Each model independently explores the codebase, then findings are merged with consensus scoring into one prioritized report. Works for code review, plan review, security audits, architecture analysis, bug hunts, and getting second opinions on AI-generated code. When multiple models independently flag the same issue, confidence is high.
10
+
11
+ ## Prerequisites
12
+
13
+ triage-ai must be installed globally:
14
+
15
+ ```bash
16
+ npm install -g triage-ai
17
+ ```
18
+
19
+ At least one AI CLI must be installed and authenticated:
20
+ - **Claude Code**: `npm install -g @anthropic-ai/claude-code` then `claude auth login`
21
+ - **Gemini CLI**: `npm install -g @google/gemini-cli` then `gemini auth login`
22
+ - **OpenAI Codex**: `npm install -g @openai/codex` then set `OPENAI_API_KEY`
23
+
24
+ Run `triage-ai ready` to verify which models are available.
25
+
26
+ ## How to Run
27
+
28
+ **IMPORTANT: Run the triage command in the background** using `run_in_background: true` on the Bash tool. This lets you relay progress to the user as it happens instead of showing a truncated bash window.
29
+
30
+ ```bash
31
+ triage-ai "<user's prompt>" --nice 10 --timeout 300 --verbose
32
+ ```
33
+
34
+ ### Common invocations
35
+
36
+ ```bash
37
+ # Full 3-model review
38
+ triage-ai "find bugs and security issues"
39
+
40
+ # Single model, quick check
41
+ triage-ai --models claude "quick security scan"
42
+
43
+ # Review only uncommitted changes
44
+ triage-ai --diff-only "check my changes for bugs"
45
+
46
+ # Save report + remember findings in project memory
47
+ triage-ai --remember --out report.md "full security audit"
48
+
49
+ # Preview patches without applying
50
+ triage-ai --dry-run "fix the SQL injection"
51
+
52
+ # Restrict models to pre-gathered context only (faster, no filesystem exploration)
53
+ triage-ai --context-only "review this code for issues"
54
+ ```
55
+
56
+ ## While triage is running
57
+
58
+ 1. Tell the user: "Running triage with Claude, Gemini and Codex in parallel — I'll relay progress as each model completes."
59
+ 2. Check the output file periodically (every 15-20s) to relay status updates
60
+ 3. Look for these markers in the output:
61
+ - `=== triage-ai vX.Y.Z ===` = startup confirmed (version check)
62
+ - `[phase:N/6] name — Title` = phase transition (N of 6 total phases)
63
+ - `[assess] ModelName…` = model still running (with elapsed time)
64
+ - `[assess] ModelName ✓` = model completed (with finding count and time)
65
+ - `[assess] ModelName ✗` = model failed (with error hint)
66
+ - `=== TRIAGE COMPLETE ===` = all done — read full output
67
+ - `=== REPORT START ===` / `=== REPORT END ===` = report body delimiters
68
+ 4. When you see a model complete, tell the user immediately, e.g. "Codex finished — 5 findings in 12.3s"
69
+
70
+ ## Interpreting results
71
+
72
+ - **Auth failures**: If a model shows "not authenticated" or "rate limited", tell the user the fix:
73
+ - Claude: `claude auth login`
74
+ - Gemini: `gemini auth login`
75
+ - Codex: `codex` interactively, or set `OPENAI_API_KEY`
76
+ - **Severity levels**: S0 = blockers (fix now), S1 = high, S2 = medium, S3 = low
77
+ - **Consensus findings** (2+ models agree): highest confidence — present these first
78
+ - **Prose responses**: "(prose)" in model results means the model responded but couldn't produce structured findings
79
+ - **Context truncation**: `⚠ Context was truncated` in summary means large files were cut short — warn the user
80
+
81
+ ## After triage completes
82
+
83
+ 1. Show a summary: "X models completed, Y findings (Z consensus)"
84
+ 2. If any model failed, explain why and how to fix it
85
+ 3. Present findings in a table: severity, title, consensus status
86
+ 4. Show S0/S1 findings with full detail
87
+ 5. For S2/S3, provide a brief list unless the user asks for more
88
+ 6. If patches were generated, offer to show or apply them
89
+ 7. **ALWAYS ask the user before implementing any fixes** — never auto-implement
@@ -3,38 +3,21 @@
3
3
  *
4
4
  * Uses the Claude CLI (claude command) for analysis.
5
5
  * Prompt is passed via stdin in -p (print) mode.
6
- * Output format is JSON — the CLI wraps the response in an envelope
7
- * with metadata (cost, duration, etc.). We unwrap it in parseOutput().
8
6
  *
9
7
  * Ported from triage_cli/models/claude.py
10
8
  */
11
9
  import { SubprocessModel } from './base.js';
12
- import type { ModelResult } from '../types.js';
13
10
  export declare class ClaudeModel extends SubprocessModel {
14
11
  constructor();
15
12
  /**
16
13
  * Build Claude CLI command.
17
14
  *
18
15
  * Uses -p (print) mode for non-interactive pipe operation.
19
- * --output-format json wraps the response in a metadata envelope,
20
- * which lets us detect truncation (incomplete envelope = truncated).
21
- * --effort high gives Claude more room for thorough analysis.
22
16
  * CLAUDECODE env var is unset so Claude can run from within Claude Code sessions.
23
17
  */
24
18
  _buildCommand(_promptFile: string): {
25
19
  cmd: string[];
26
20
  env: Record<string, string | undefined>;
27
21
  };
28
- /**
29
- * Unwrap Claude's JSON envelope before parsing findings.
30
- *
31
- * Claude --output-format json produces:
32
- * {"type":"result","subtype":"success","result":"...","cost_usd":...,...}
33
- *
34
- * We extract the "result" field (the actual model response text)
35
- * and pass it to the standard parseOutput() for JSON finding extraction.
36
- * If the envelope itself is truncated, we flag it and try to salvage.
37
- */
38
- parseOutput(output: string): ModelResult;
39
22
  }
40
23
  //# sourceMappingURL=claude.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/models/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,qBAAa,WAAY,SAAQ,eAAe;;IAQ9C;;;;;;;;OAQG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;QAClC,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;KACzC;IAeD;;;;;;;;;OASG;IACM,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;CAoDlD"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/models/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,WAAY,SAAQ,eAAe;;IAQ9C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG;QAClC,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;KACzC;CAOF"}
@@ -3,8 +3,6 @@
3
3
  *
4
4
  * Uses the Claude CLI (claude command) for analysis.
5
5
  * Prompt is passed via stdin in -p (print) mode.
6
- * Output format is JSON — the CLI wraps the response in an envelope
7
- * with metadata (cost, duration, etc.). We unwrap it in parseOutput().
8
6
  *
9
7
  * Ported from triage_cli/models/claude.py
10
8
  */
@@ -20,80 +18,14 @@ export class ClaudeModel extends SubprocessModel {
20
18
  * Build Claude CLI command.
21
19
  *
22
20
  * Uses -p (print) mode for non-interactive pipe operation.
23
- * --output-format json wraps the response in a metadata envelope,
24
- * which lets us detect truncation (incomplete envelope = truncated).
25
- * --effort high gives Claude more room for thorough analysis.
26
21
  * CLAUDECODE env var is unset so Claude can run from within Claude Code sessions.
27
22
  */
28
23
  _buildCommand(_promptFile) {
29
- const cmd = [...this.command, '-p', '--output-format', 'json'];
30
- // Configurable effort level (default: high for thorough analysis)
31
- const effort = process.env['TRIAGE_CLAUDE_EFFORT'] ?? 'high';
32
- if (effort !== 'none') {
33
- cmd.push('--effort', effort);
34
- }
24
+ const cmd = [...this.command, '-p', '--output-format', 'text'];
35
25
  return {
36
26
  cmd,
37
27
  env: { CLAUDECODE: undefined }, // Unset to allow nested sessions
38
28
  };
39
29
  }
40
- /**
41
- * Unwrap Claude's JSON envelope before parsing findings.
42
- *
43
- * Claude --output-format json produces:
44
- * {"type":"result","subtype":"success","result":"...","cost_usd":...,...}
45
- *
46
- * We extract the "result" field (the actual model response text)
47
- * and pass it to the standard parseOutput() for JSON finding extraction.
48
- * If the envelope itself is truncated, we flag it and try to salvage.
49
- */
50
- parseOutput(output) {
51
- const trimmed = output.trim();
52
- try {
53
- const envelope = JSON.parse(trimmed);
54
- if (envelope.type === 'result' && typeof envelope.result === 'string') {
55
- // Successfully unwrapped — parse the inner response
56
- const result = super.parseOutput(envelope.result);
57
- // Propagate error status from envelope
58
- if (envelope.is_error === true && !result.error) {
59
- result.error = `Claude reported error: ${envelope.subtype ?? 'unknown'}`;
60
- }
61
- return result;
62
- }
63
- }
64
- catch {
65
- // Envelope parse failed — could be truncated or non-JSON.
66
- // Check if it looks like a truncated envelope (starts with {"type":"result")
67
- if (trimmed.startsWith('{"type":"result"') || trimmed.startsWith('{ "type": "result"')) {
68
- // Truncated envelope — try to extract partial "result" field
69
- const resultMatch = trimmed.match(/"result"\s*:\s*"([\s\S]*)/);
70
- if (resultMatch) {
71
- // Extract everything after "result":" — it's likely truncated
72
- let inner = resultMatch[1];
73
- // Remove trailing envelope fields if partially present
74
- const lastQuote = inner.lastIndexOf('"');
75
- if (lastQuote > 0) {
76
- inner = inner.slice(0, lastQuote);
77
- }
78
- // Unescape JSON string escapes
79
- try {
80
- inner = JSON.parse(`"${inner}"`);
81
- }
82
- catch {
83
- // Use raw if unescape fails
84
- inner = inner.replace(/\\n/g, '\n').replace(/\\"/g, '"').replace(/\\\\/g, '\\');
85
- }
86
- const result = super.parseOutput(inner);
87
- result.output_truncated = true;
88
- if (!result.error) {
89
- result.error = 'Claude output was truncated (incomplete JSON envelope)';
90
- }
91
- return result;
92
- }
93
- }
94
- }
95
- // Fallback: treat entire output as raw text (pre-envelope format or unexpected)
96
- return super.parseOutput(output);
97
- }
98
30
  }
99
31
  //# sourceMappingURL=claude.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/models/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/models/claude.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,OAAO,WAAY,SAAQ,eAAe;IAC9C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,WAAmB;QAI/B,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,OAAO;YACL,GAAG;YACH,GAAG,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,iCAAiC;SAClE,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ # Triage AI — Project Instructions for Codex
2
+
3
+ Copy this file to your project root as `AGENTS.md` so Codex knows how to use triage-ai.
4
+
5
+ ---
6
+
7
+ ## Triage
8
+
9
+ This project uses [triage-ai](https://github.com/wyman101/triage-ai) for multi-model code analysis.
10
+
11
+ ### Running a triage
12
+
13
+ ```bash
14
+ triage-ai "<prompt>" --nice 10 --timeout 300 --verbose
15
+ ```
16
+
17
+ Examples:
18
+ - `triage-ai "find security vulnerabilities"`
19
+ - `triage-ai "review authentication flow for bugs"`
20
+ - `triage-ai --diff-only "check my changes for bugs"`
21
+ - `triage-ai --remember "full security audit"` (saves findings to AGENTS.md)
22
+
23
+ ### Interpreting results
24
+
25
+ - **S0** = blockers (fix immediately), **S1** = high, **S2** = medium, **S3** = low
26
+ - **Consensus findings** (flagged by 2+ models) have high confidence — prioritize these
27
+ - Always ask the user before implementing any fixes from the triage report
@@ -0,0 +1,27 @@
1
+ # Triage AI — Project Instructions for Gemini
2
+
3
+ Copy this file to your project root as `GEMINI.md` so Gemini CLI knows how to use triage-ai.
4
+
5
+ ---
6
+
7
+ ## Triage
8
+
9
+ This project uses [triage-ai](https://github.com/wyman101/triage-ai) for multi-model code analysis.
10
+
11
+ ### Running a triage
12
+
13
+ ```bash
14
+ triage-ai "<prompt>" --nice 10 --timeout 300 --verbose
15
+ ```
16
+
17
+ Examples:
18
+ - `triage-ai "find security vulnerabilities"`
19
+ - `triage-ai "review authentication flow for bugs"`
20
+ - `triage-ai --diff-only "check my changes for bugs"`
21
+ - `triage-ai --remember "full security audit"` (saves findings to GEMINI.md)
22
+
23
+ ### Interpreting results
24
+
25
+ - **S0** = blockers (fix immediately), **S1** = high, **S2** = medium, **S3** = low
26
+ - **Consensus findings** (flagged by 2+ models) have high confidence — prioritize these
27
+ - Always ask the user before implementing any fixes from the triage report
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "triage-ai",
3
- "version": "1.5.3",
4
- "description": "Multi-model code triage — run Claude, Gemini and Codex in parallel to analyze your codebase and merge their findings",
3
+ "version": "1.6.1",
4
+ "description": "Collaborative AI triage for code, plans and architecture — Claude, Gemini and Codex independently analyze your codebase then merge findings with consensus scoring. Security audits, bug hunts, plan reviews, second opinions. Claude Code skill + MCP server.",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",
7
7
  "bin": {
@@ -20,6 +20,7 @@
20
20
  "dist",
21
21
  "README.md",
22
22
  "LICENSE",
23
+ "SKILL.md",
23
24
  "examples"
24
25
  ],
25
26
  "keywords": [
@@ -44,7 +45,11 @@
44
45
  "linter",
45
46
  "bug-detection",
46
47
  "consensus",
47
- "llm"
48
+ "llm",
49
+ "claude-code",
50
+ "claude-code-skill",
51
+ "skill",
52
+ "plugin"
48
53
  ],
49
54
  "author": {
50
55
  "name": "wyman101",