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 +68 -8
- package/SKILL.md +89 -0
- package/dist/models/claude.d.ts +0 -17
- package/dist/models/claude.d.ts.map +1 -1
- package/dist/models/claude.js +1 -69
- package/dist/models/claude.js.map +1 -1
- package/examples/agents-md-example.md +27 -0
- package/examples/gemini-md-example.md +27 -0
- package/package.json +8 -3
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# triage-ai
|
|
2
2
|
|
|
3
|
-
**
|
|
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
|
-
    
|
|
5
|
+
     
|
|
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
|
-
##
|
|
219
|
+
## AI Editor Integration
|
|
220
220
|
|
|
221
|
-
|
|
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
|
-
|
|
254
|
+
### Gemini CLI
|
|
255
|
+
|
|
256
|
+
Add to `~/.gemini/settings.json`:
|
|
235
257
|
|
|
236
|
-
|
|
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/
|
|
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
|
-
|
|
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
|
package/dist/models/claude.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/models/claude.js
CHANGED
|
@@ -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', '
|
|
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":"AAAA
|
|
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.
|
|
4
|
-
"description": "
|
|
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",
|