agentsys 5.8.0 → 5.8.2
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/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +26 -0
- package/CHANGELOG.md +24 -0
- package/README.md +3 -3
- package/lib/collectors/documentation.js +2 -1
- package/lib/collectors/github.js +5 -3
- package/lib/cross-platform/index.js +5 -2
- package/lib/enhance/cross-file-analyzer.js +3 -2
- package/lib/enhance/cross-file-patterns.js +3 -2
- package/lib/enhance/docs-patterns.js +6 -4
- package/lib/package.json +32 -0
- package/lib/patterns/cli-enhancers.js +6 -2
- package/lib/patterns/pipeline.js +7 -3
- package/lib/patterns/slop-analyzers.js +3 -1
- package/lib/platform/detect-platform.js +2 -1
- package/lib/sources/policy-questions.js +4 -3
- package/package.json +1 -1
- package/scripts/generate-docs.js +1 -1
- package/site/assets/css/main.css +72 -20
- package/site/assets/js/main.js +103 -8
- package/site/content.json +5 -5
- package/site/index.html +167 -61
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentsys",
|
|
3
3
|
"description": "19 specialized plugins for AI workflow automation - task orchestration, PR workflow, slop detection, code review, drift detection, enhancement analysis, documentation sync, unified static analysis, perf investigations, topic research, agent config linting, cross-tool AI consultation, structured AI debate, workflow pattern learning, codebase onboarding, and contributor guidance",
|
|
4
|
-
"version": "5.8.
|
|
4
|
+
"version": "5.8.2",
|
|
5
5
|
"owner": {
|
|
6
6
|
"name": "Avi Fenesh",
|
|
7
7
|
"url": "https://github.com/avifenesh"
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"url": "https://github.com/agent-sh/repo-intel.git"
|
|
129
129
|
},
|
|
130
130
|
"description": "Unified static analysis via agent-analyzer - git history, AST symbols, project metadata, and doc-code sync",
|
|
131
|
-
"version": "
|
|
131
|
+
"version": "0.2.0",
|
|
132
132
|
"category": "development",
|
|
133
133
|
"homepage": "https://github.com/agent-sh/repo-intel"
|
|
134
134
|
},
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"source": "url",
|
|
161
161
|
"url": "https://github.com/agent-sh/agnix.git"
|
|
162
162
|
},
|
|
163
|
-
"description": "Lint agent configuration files (SKILL.md, CLAUDE.md, hooks, MCP) against
|
|
163
|
+
"description": "Lint agent configuration files (SKILL.md, CLAUDE.md, hooks, MCP) against 385 rules across 10+ AI tools",
|
|
164
164
|
"version": "1.0.0",
|
|
165
165
|
"category": "development",
|
|
166
166
|
"homepage": "https://github.com/agent-sh/agnix"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agentsys",
|
|
3
|
+
"description": "Modular runtime and orchestration system for AI agents - professional-grade slash commands for workflow automation, code review, CI/CD, and task management",
|
|
4
|
+
"skills": "./adapters/codex/skills",
|
|
5
|
+
"interface": {
|
|
6
|
+
"displayName": "agentsys",
|
|
7
|
+
"shortDescription": "AI agent orchestration with 42 skills and 50 agents",
|
|
8
|
+
"longDescription": "Professional-grade slash commands for AI-powered development workflows. Includes /next-task (task discovery to production), /ship (commit to deploy), /audit-project (multi-agent code review), /deslop (AI slop cleanup), /perf (performance investigation), /enhance (config analysis), /consult (cross-tool AI consultation), and more.",
|
|
9
|
+
"developerName": "Avi Fenesh",
|
|
10
|
+
"category": "developer-tools",
|
|
11
|
+
"capabilities": [
|
|
12
|
+
"task-management",
|
|
13
|
+
"code-review",
|
|
14
|
+
"ci-cd",
|
|
15
|
+
"deployment",
|
|
16
|
+
"performance",
|
|
17
|
+
"documentation"
|
|
18
|
+
],
|
|
19
|
+
"websiteUrl": "https://agent-sh.github.io/agent-sh.dev/",
|
|
20
|
+
"defaultPrompt": [
|
|
21
|
+
"What should I work on next?",
|
|
22
|
+
"Ship my changes",
|
|
23
|
+
"Review this codebase"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [5.8.2] - 2026-04-11
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- Codex CLI plugin manifest (`.codex-plugin/plugin.json`) for native Codex discovery
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Flaky stale items test - use >= 99 threshold for date boundary tolerance
|
|
19
|
+
|
|
20
|
+
## [5.8.1] - 2026-03-28
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- `exports` field in `lib/package.json` for `@agentsys/lib` module resolution
|
|
24
|
+
- Inline pipeline steps in each command panel on website
|
|
25
|
+
- Dynamic How It Works tab system for all 20 commands on website
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
- Code-point safe `truncate()` to prevent surrogate pair corruption across all truncation sites
|
|
29
|
+
- agnix stats updated to current counts (385 rules, 102 auto-fix, 36 categories)
|
|
30
|
+
- Site: command tab wrapping, skills grouping, How It Works rendering
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- Bumped repo-intel marketplace version to 0.2.0
|
|
34
|
+
- Synced agnix rule count 342 -> 385
|
|
35
|
+
|
|
12
36
|
## [5.8.0] - 2026-03-25
|
|
13
37
|
|
|
14
38
|
### Added
|
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
AI models can write code. That's not the hard part anymore. The hard part is everything around it — task selection, branch management, code review, artifact cleanup, CI, PR comments, deployment. **AgentSys is the runtime that orchestrates agents to handle all of it** — structured pipelines, gated phases, specialized agents, and persistent state that survives session boundaries.
|
|
42
42
|
|
|
43
43
|
---
|
|
44
|
-
> Building custom skills, agents, hooks, or MCP tools? [agnix](https://github.com/agent-sh/agnix) is the CLI + LSP linter that catches config errors before they fail silently - real-time IDE validation, auto suggestions, auto-fix, and
|
|
44
|
+
> Building custom skills, agents, hooks, or MCP tools? [agnix](https://github.com/agent-sh/agnix) is the CLI + LSP linter that catches config errors before they fail silently - real-time IDE validation, auto suggestions, auto-fix, and 385 rules for Claude Code, Codex, OpenCode, Cursor, Kiro, Copilot, Gemini CLI, Cline, Windsurf, Roo Code, Amp, and more.
|
|
45
45
|
|
|
46
46
|
## What This Is
|
|
47
47
|
|
|
@@ -118,7 +118,7 @@ The investment shifts from model spend to pipeline design. Better prompts, riche
|
|
|
118
118
|
| [`/next-task`](#next-task) | Task workflow: discovery, implementation, PR, merge |
|
|
119
119
|
| [`/prepare-delivery`](#prepare-delivery) | Pre-ship quality gates: deslop, review, validation, docs sync |
|
|
120
120
|
| [`/gate-and-ship`](#gate-and-ship) | Quality gates then ship (/prepare-delivery + /ship) |
|
|
121
|
-
| [`/agnix`](#agnix) | Lint agent configurations (
|
|
121
|
+
| [`/agnix`](#agnix) | Lint agent configurations (385 rules) |
|
|
122
122
|
| [`/ship`](#ship) | PR creation, CI monitoring, merge |
|
|
123
123
|
| [`/deslop`](#deslop) | Clean AI slop patterns |
|
|
124
124
|
| [`/perf`](#perf) | Performance investigation with baselines and profiling |
|
|
@@ -328,7 +328,7 @@ agnix catches these issues before they cause problems.
|
|
|
328
328
|
| **Best Practices** | Tool restrictions, model selection, trigger phrase quality |
|
|
329
329
|
| **Cross-Platform** | Compatibility across Claude Code, Codex, OpenCode, Cursor, Kiro, Copilot, Gemini CLI, Cline, Windsurf, Roo Code, Amp, and more |
|
|
330
330
|
|
|
331
|
-
**
|
|
331
|
+
**385 validation rules** (102 auto-fixable) derived from:
|
|
332
332
|
- Official tool specifications (Claude Code, Codex CLI, OpenCode, Cursor, Kiro, GitHub Copilot, Gemini CLI, Cline, Windsurf, Roo Code, Amp, and more)
|
|
333
333
|
- Research papers on agent reliability and prompt injection
|
|
334
334
|
- Real-world testing across 500+ repositories
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
11
|
+
const { truncate } = require('../cross-platform');
|
|
11
12
|
|
|
12
13
|
const fs = require('fs');
|
|
13
14
|
const path = require('path');
|
|
@@ -108,7 +109,7 @@ function extractPlans(result, content) {
|
|
|
108
109
|
for (const pattern of planPatterns) {
|
|
109
110
|
let match;
|
|
110
111
|
while ((match = pattern.exec(content)) !== null && result.plans.length < 15) {
|
|
111
|
-
const plan = (match[1] || match[0]
|
|
112
|
+
const plan = truncate(match[1] || match[0], 100);
|
|
112
113
|
result.plans.push(plan);
|
|
113
114
|
}
|
|
114
115
|
}
|
package/lib/collectors/github.js
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
const { truncate } = require('../cross-platform');
|
|
13
|
+
|
|
12
14
|
const { execFileSync } = require('child_process');
|
|
13
15
|
|
|
14
16
|
const DEFAULT_OPTIONS = {
|
|
@@ -47,7 +49,7 @@ function execGhWithResult(args, options = {}) {
|
|
|
47
49
|
error: {
|
|
48
50
|
type: 'parse',
|
|
49
51
|
message: `Failed to parse gh output as JSON: ${error.message}`,
|
|
50
|
-
raw: output
|
|
52
|
+
raw: truncate(output, 500)
|
|
51
53
|
}
|
|
52
54
|
};
|
|
53
55
|
}
|
|
@@ -94,7 +96,7 @@ function summarizeIssue(item) {
|
|
|
94
96
|
milestone: item.milestone?.title || item.milestone || null,
|
|
95
97
|
createdAt: item.createdAt,
|
|
96
98
|
updatedAt: item.updatedAt,
|
|
97
|
-
snippet: item.body ? item.body.
|
|
99
|
+
snippet: item.body ? truncate(item.body.replace(/\n/g, ' '), 200) : ''
|
|
98
100
|
};
|
|
99
101
|
}
|
|
100
102
|
|
|
@@ -112,7 +114,7 @@ function summarizePR(item) {
|
|
|
112
114
|
createdAt: item.createdAt,
|
|
113
115
|
updatedAt: item.updatedAt,
|
|
114
116
|
files: item.files || [],
|
|
115
|
-
snippet: item.body ? item.body.
|
|
117
|
+
snippet: item.body ? truncate(item.body.replace(/\n/g, ' '), 150) : ''
|
|
116
118
|
};
|
|
117
119
|
}
|
|
118
120
|
|
|
@@ -310,8 +310,11 @@ function formatSection(title, content) {
|
|
|
310
310
|
* @returns {string} Truncated text
|
|
311
311
|
*/
|
|
312
312
|
function truncate(text, maxLength) {
|
|
313
|
-
|
|
314
|
-
|
|
313
|
+
// Code-point safe: uses spread operator to avoid splitting surrogate pairs (emoji, flags, CJK).
|
|
314
|
+
if (maxLength < 0) return text;
|
|
315
|
+
const chars = [...text];
|
|
316
|
+
if (chars.length <= maxLength) return text;
|
|
317
|
+
return chars.slice(0, maxLength - 3).join('') + '...';
|
|
315
318
|
}
|
|
316
319
|
|
|
317
320
|
/**
|
|
@@ -12,6 +12,7 @@ const fs = require('fs');
|
|
|
12
12
|
const path = require('path');
|
|
13
13
|
const { parseMarkdownFrontmatter } = require('./agent-analyzer');
|
|
14
14
|
const { crossFilePatterns, loadKnownTools } = require('./cross-file-patterns');
|
|
15
|
+
const { truncate } = require('../cross-platform');
|
|
15
16
|
|
|
16
17
|
// ============================================
|
|
17
18
|
// CONSTANTS
|
|
@@ -650,9 +651,9 @@ function analyzePromptConsistency(agents) {
|
|
|
650
651
|
// Extract action keywords
|
|
651
652
|
let action;
|
|
652
653
|
if (isAlways) {
|
|
653
|
-
action = line.replace(/.*\bALWAYS\b\s*/i, '')
|
|
654
|
+
action = truncate(line.replace(/.*\bALWAYS\b\s*/i, ''), ACTION_COMPARISON_LENGTH);
|
|
654
655
|
} else {
|
|
655
|
-
action = line.replace(/.*\b(?:NEVER|DO NOT)\b\s*/i, '')
|
|
656
|
+
action = truncate(line.replace(/.*\b(?:NEVER|DO NOT)\b\s*/i, ''), ACTION_COMPARISON_LENGTH);
|
|
656
657
|
}
|
|
657
658
|
|
|
658
659
|
// Extract significant keywords from action
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
const fs = require('fs');
|
|
12
12
|
const path = require('path');
|
|
13
13
|
const { getStateDir, getPlatformName } = require('../platform/state-dir');
|
|
14
|
+
const { truncate } = require('../cross-platform');
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* Platform-specific default tools
|
|
@@ -214,7 +215,7 @@ const crossFilePatterns = {
|
|
|
214
215
|
if (!instruction || !files || files.length < 2) return null;
|
|
215
216
|
|
|
216
217
|
return {
|
|
217
|
-
issue: `Duplicate instruction found in ${files.length} files: "${instruction
|
|
218
|
+
issue: `Duplicate instruction found in ${files.length} files: "${truncate(instruction, 50)}"`,
|
|
218
219
|
fix: `Extract shared instruction to a common include or ensure intentional duplication`
|
|
219
220
|
};
|
|
220
221
|
}
|
|
@@ -234,7 +235,7 @@ const crossFilePatterns = {
|
|
|
234
235
|
if (!rule1 || !rule2) return null;
|
|
235
236
|
|
|
236
237
|
return {
|
|
237
|
-
issue: `Contradictory rules: "${rule1
|
|
238
|
+
issue: `Contradictory rules: "${truncate(rule1, 40)}" vs "${truncate(rule2, 40)}"`,
|
|
238
239
|
fix: `Resolve conflict between ${file1} and ${file2}`
|
|
239
240
|
};
|
|
240
241
|
}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
const { truncate } = require('../cross-platform');
|
|
8
|
+
|
|
7
9
|
function estimateTokens(text) {
|
|
8
10
|
if (!text || typeof text !== 'string') return 0;
|
|
9
11
|
return Math.ceil(text.length / 4);
|
|
@@ -159,7 +161,7 @@ const docsPatterns = {
|
|
|
159
161
|
const tokens = estimateTokens(section);
|
|
160
162
|
if (tokens > 1000) {
|
|
161
163
|
// Get section title (first line)
|
|
162
|
-
const title = section.split('\n')[0].trim()
|
|
164
|
+
const title = truncate(section.split('\n')[0].trim(), 50);
|
|
163
165
|
longSections.push({ title, tokens });
|
|
164
166
|
}
|
|
165
167
|
}
|
|
@@ -371,7 +373,7 @@ const docsPatterns = {
|
|
|
371
373
|
|
|
372
374
|
// Check if starts with dangling reference
|
|
373
375
|
if (/^(?:It|This|These|Those|They|The above|As mentioned)\s/i.test(firstLine)) {
|
|
374
|
-
const title = lines[0]
|
|
376
|
+
const title = truncate(lines[0], 30);
|
|
375
377
|
issues.push(title);
|
|
376
378
|
}
|
|
377
379
|
}
|
|
@@ -461,7 +463,7 @@ const docsPatterns = {
|
|
|
461
463
|
const tokens = estimateTokens(cleanPart);
|
|
462
464
|
|
|
463
465
|
if (tokens > 500) {
|
|
464
|
-
const preview = cleanPart.trim().split('\n')[0]
|
|
466
|
+
const preview = truncate(cleanPart.trim().split('\n')[0], 50);
|
|
465
467
|
longBlocks.push({ tokens, preview });
|
|
466
468
|
}
|
|
467
469
|
}
|
|
@@ -502,7 +504,7 @@ const docsPatterns = {
|
|
|
502
504
|
for (let i = lateThreshold; i < totalLines; i++) {
|
|
503
505
|
for (const pattern of criticalKeywords) {
|
|
504
506
|
if (pattern.test(lines[i])) {
|
|
505
|
-
lateImportantLines.push(lines[i].trim()
|
|
507
|
+
lateImportantLines.push(truncate(lines[i].trim(), 50));
|
|
506
508
|
break;
|
|
507
509
|
}
|
|
508
510
|
}
|
package/lib/package.json
CHANGED
|
@@ -4,6 +4,38 @@
|
|
|
4
4
|
"description": "Core library for AgentSys: platform detection, pattern matching, workflow state, and utilities",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "commonjs",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./index.js",
|
|
9
|
+
"./binary": "./binary/index.js",
|
|
10
|
+
"./collectors": "./collectors/index.js",
|
|
11
|
+
"./config": "./config/index.js",
|
|
12
|
+
"./cross-platform": "./cross-platform/index.js",
|
|
13
|
+
"./discovery": "./discovery/index.js",
|
|
14
|
+
"./enhance": "./enhance/index.js",
|
|
15
|
+
"./perf": "./perf/index.js",
|
|
16
|
+
"./repo-map": "./repo-map/index.js",
|
|
17
|
+
"./collectors/codebase": "./collectors/codebase.js",
|
|
18
|
+
"./collectors/docs-patterns": "./collectors/docs-patterns.js",
|
|
19
|
+
"./collectors/documentation": "./collectors/documentation.js",
|
|
20
|
+
"./collectors/github": "./collectors/github.js",
|
|
21
|
+
"./enhance/agent-analyzer": "./enhance/agent-analyzer.js",
|
|
22
|
+
"./enhance/agent-patterns": "./enhance/agent-patterns.js",
|
|
23
|
+
"./enhance/cross-file-analyzer": "./enhance/cross-file-analyzer.js",
|
|
24
|
+
"./enhance/cross-file-patterns": "./enhance/cross-file-patterns.js",
|
|
25
|
+
"./enhance/fixer": "./enhance/fixer.js",
|
|
26
|
+
"./enhance/plugin-patterns": "./enhance/plugin-patterns.js",
|
|
27
|
+
"./enhance/projectmemory-analyzer": "./enhance/projectmemory-analyzer.js",
|
|
28
|
+
"./enhance/projectmemory-patterns": "./enhance/projectmemory-patterns.js",
|
|
29
|
+
"./enhance/prompt-analyzer": "./enhance/prompt-analyzer.js",
|
|
30
|
+
"./enhance/prompt-patterns": "./enhance/prompt-patterns.js",
|
|
31
|
+
"./enhance/reporter": "./enhance/reporter.js",
|
|
32
|
+
"./enhance/security-patterns": "./enhance/security-patterns.js",
|
|
33
|
+
"./enhance/suppression": "./enhance/suppression.js",
|
|
34
|
+
"./enhance/tool-patterns": "./enhance/tool-patterns.js",
|
|
35
|
+
"./sources/custom-handler": "./sources/custom-handler.js",
|
|
36
|
+
"./sources/policy-questions": "./sources/policy-questions.js",
|
|
37
|
+
"./sources/source-cache": "./sources/source-cache.js"
|
|
38
|
+
},
|
|
7
39
|
"engines": {
|
|
8
40
|
"node": ">=18.0.0"
|
|
9
41
|
},
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
* Functions gracefully degrade when tools are not available.
|
|
7
7
|
*
|
|
8
8
|
* Supported languages: javascript, typescript, python, rust, go
|
|
9
|
-
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const { truncate } = require('../cross-platform');
|
|
12
|
+
|
|
13
|
+
/**
|
|
10
14
|
* @module patterns/cli-enhancers
|
|
11
15
|
* @author Avi Fenesh
|
|
12
16
|
* @license MIT
|
|
@@ -380,7 +384,7 @@ function runDuplicateDetection(repoPath, options = {}) {
|
|
|
380
384
|
secondLine: dup.secondFile?.start || 0,
|
|
381
385
|
lines: dup.lines || 0,
|
|
382
386
|
tokens: dup.tokens || 0,
|
|
383
|
-
fragment: dup.fragment
|
|
387
|
+
fragment: truncate(dup.fragment || '', 100)
|
|
384
388
|
});
|
|
385
389
|
}
|
|
386
390
|
}
|
package/lib/patterns/pipeline.js
CHANGED
|
@@ -7,7 +7,11 @@
|
|
|
7
7
|
* - Phase 3 (LLM handoff): certainty-tagged findings for agent review
|
|
8
8
|
*
|
|
9
9
|
* Inherits modes from deslop: report (analyze only) vs apply (fix issues)
|
|
10
|
-
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const { truncate } = require('../cross-platform');
|
|
13
|
+
|
|
14
|
+
/**
|
|
11
15
|
* @module patterns/pipeline
|
|
12
16
|
* @author Avi Fenesh
|
|
13
17
|
* @license MIT
|
|
@@ -356,7 +360,7 @@ function runPhase1(repoPath, targetFiles, language, fileContents) {
|
|
|
356
360
|
certainty: CERTAINTY.HIGH,
|
|
357
361
|
description: pattern.description,
|
|
358
362
|
autoFix: pattern.autoFix,
|
|
359
|
-
content: line.trim()
|
|
363
|
+
content: truncate(line.trim(), 100),
|
|
360
364
|
phase: 1
|
|
361
365
|
});
|
|
362
366
|
}
|
|
@@ -657,7 +661,7 @@ async function runMultiPassAnalyzers(repoPath, targetFiles, fileContents) {
|
|
|
657
661
|
certainty: CERTAINTY.MEDIUM,
|
|
658
662
|
description: `${shotgunPattern.description}: ${v.files.length} files change together ${v.count} times`,
|
|
659
663
|
autoFix: shotgunPattern.autoFix,
|
|
660
|
-
content: v.files.join(', ')
|
|
664
|
+
content: truncate(v.files.join(', '), 100),
|
|
661
665
|
phase: 1,
|
|
662
666
|
details: { files: v.files, changeCount: v.count }
|
|
663
667
|
});
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* @license MIT
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
const { truncate } = require('../cross-platform');
|
|
12
|
+
|
|
11
13
|
/**
|
|
12
14
|
* Analyze JSDoc-to-function ratio to detect excessive documentation
|
|
13
15
|
*
|
|
@@ -1879,7 +1881,7 @@ function analyzeDeadCode(content, options = {}) {
|
|
|
1879
1881
|
line: j + 1, // 1-indexed
|
|
1880
1882
|
terminationType: terminationType,
|
|
1881
1883
|
terminationLine: i + 1,
|
|
1882
|
-
content: nextTrimmed
|
|
1884
|
+
content: truncate(nextTrimmed, 50),
|
|
1883
1885
|
severity: 'high'
|
|
1884
1886
|
});
|
|
1885
1887
|
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
const fs = require('fs');
|
|
14
|
+
const { truncate } = require('../cross-platform');
|
|
14
15
|
const path = require('path');
|
|
15
16
|
const { exec } = require('child_process');
|
|
16
17
|
const { promisify } = require('util');
|
|
@@ -84,7 +85,7 @@ function withTimeout(promise, timeoutMs = DEFAULT_ASYNC_TIMEOUT_MS, operation =
|
|
|
84
85
|
* @returns {Promise<{stdout: string, stderr: string}>}
|
|
85
86
|
*/
|
|
86
87
|
async function execWithTimeout(cmd, options = {}, timeoutMs = DEFAULT_ASYNC_TIMEOUT_MS) {
|
|
87
|
-
return withTimeout(execAsync(cmd, options), timeoutMs, `exec: ${cmd
|
|
88
|
+
return withTimeout(execAsync(cmd, options), timeoutMs, `exec: ${truncate(cmd, 50)}`);
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
// Maximum cached file size constant
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
const sourceCache = require('./source-cache');
|
|
9
|
+
const { truncate } = require('../cross-platform');
|
|
9
10
|
const customHandler = require('./custom-handler');
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -42,7 +43,7 @@ function getPolicyQuestions() {
|
|
|
42
43
|
// Truncate to fit within 30 chars: "X (last used)" where X can be max 17 chars
|
|
43
44
|
const maxBaseLen = 30 - ' (last used)'.length; // 18 chars for base
|
|
44
45
|
const truncatedLabel = cachedLabel.length > maxBaseLen
|
|
45
|
-
? cachedLabel
|
|
46
|
+
? truncate(cachedLabel, maxBaseLen - 1) + '…'
|
|
46
47
|
: cachedLabel;
|
|
47
48
|
|
|
48
49
|
sourceOptions.push({
|
|
@@ -155,12 +156,12 @@ function parseAndCachePolicy(responses) {
|
|
|
155
156
|
// Validate and merge follow-up responses
|
|
156
157
|
const rawNum = String(responses.project.number).trim();
|
|
157
158
|
if (!/^[1-9][0-9]*$/.test(rawNum)) {
|
|
158
|
-
const safeNum = String(responses.project.number).replace(/[^\x20-\x7E]/g, '?')
|
|
159
|
+
const safeNum = truncate(String(responses.project.number).replace(/[^\x20-\x7E]/g, '?'), 32);
|
|
159
160
|
throw new Error(`Invalid project number: "${safeNum}". Must be a positive integer.`);
|
|
160
161
|
}
|
|
161
162
|
const num = Number(rawNum);
|
|
162
163
|
const owner = String(responses.project.owner || '').trim();
|
|
163
|
-
const safeOwner = String(responses.project.owner || '').replace(/[^\x20-\x7E]/g, '?')
|
|
164
|
+
const safeOwner = truncate(String(responses.project.owner || '').replace(/[^\x20-\x7E]/g, '?'), 64);
|
|
164
165
|
if (!owner || !/^(@me|[a-zA-Z0-9][a-zA-Z0-9_-]*)$/.test(owner)) {
|
|
165
166
|
throw new Error(`Invalid project owner: "${safeOwner}" (use @me or an org/user name)`);
|
|
166
167
|
}
|
package/package.json
CHANGED
package/scripts/generate-docs.js
CHANGED
|
@@ -192,7 +192,7 @@ function generateCommandsTable(commands) {
|
|
|
192
192
|
'next-task': 'Task workflow: discovery, implementation, PR, merge',
|
|
193
193
|
'prepare-delivery': 'Pre-ship quality gates: deslop, review, validation, docs sync',
|
|
194
194
|
'gate-and-ship': 'Quality gates then ship (/prepare-delivery + /ship)',
|
|
195
|
-
'agnix': 'Lint agent configurations (
|
|
195
|
+
'agnix': 'Lint agent configurations (385 rules)',
|
|
196
196
|
'ship': 'PR creation, CI monitoring, merge',
|
|
197
197
|
'deslop': 'Clean AI slop patterns',
|
|
198
198
|
'perf': 'Performance investigation with baselines and profiling',
|
package/site/assets/css/main.css
CHANGED
|
@@ -687,33 +687,14 @@
|
|
|
687
687
|
* -------------------------------------------------------------------------- */
|
|
688
688
|
.tabs[role="tablist"] {
|
|
689
689
|
display: flex;
|
|
690
|
+
flex-wrap: wrap;
|
|
690
691
|
gap: var(--space-1);
|
|
691
|
-
overflow-x: auto;
|
|
692
|
-
scrollbar-width: none;
|
|
693
|
-
-webkit-overflow-scrolling: touch;
|
|
694
692
|
padding-bottom: var(--space-4);
|
|
695
693
|
border-bottom: 1px solid var(--color-border-subtle);
|
|
696
694
|
margin-bottom: var(--space-6);
|
|
697
695
|
position: relative;
|
|
698
696
|
}
|
|
699
697
|
|
|
700
|
-
.tabs[role="tablist"]::-webkit-scrollbar {
|
|
701
|
-
display: none;
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
/* Right fade for scroll hint */
|
|
705
|
-
.tabs[role="tablist"]::after {
|
|
706
|
-
content: '';
|
|
707
|
-
position: sticky;
|
|
708
|
-
right: 0;
|
|
709
|
-
top: 0;
|
|
710
|
-
bottom: 0;
|
|
711
|
-
width: 40px;
|
|
712
|
-
flex-shrink: 0;
|
|
713
|
-
background: linear-gradient(to right, transparent, var(--color-bg-base));
|
|
714
|
-
pointer-events: none;
|
|
715
|
-
}
|
|
716
|
-
|
|
717
698
|
.tabs--small .tabs__tab {
|
|
718
699
|
font-size: var(--text-sm);
|
|
719
700
|
}
|
|
@@ -903,6 +884,76 @@
|
|
|
903
884
|
color: var(--color-text-faint);
|
|
904
885
|
}
|
|
905
886
|
|
|
887
|
+
/* --------------------------------------------------------------------------
|
|
888
|
+
* INLINE PIPELINE (inside command panels)
|
|
889
|
+
* -------------------------------------------------------------------------- */
|
|
890
|
+
.pipeline-inline {
|
|
891
|
+
margin-top: var(--space-6);
|
|
892
|
+
padding-top: var(--space-5);
|
|
893
|
+
border-top: 1px solid var(--color-border-subtle);
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
.pipeline-inline__label {
|
|
897
|
+
font-size: var(--text-xs);
|
|
898
|
+
font-weight: var(--font-semibold);
|
|
899
|
+
color: var(--color-text-muted);
|
|
900
|
+
text-transform: uppercase;
|
|
901
|
+
letter-spacing: var(--tracking-wider);
|
|
902
|
+
margin-bottom: var(--space-3);
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
.pipeline-inline__steps {
|
|
906
|
+
display: flex;
|
|
907
|
+
flex-wrap: wrap;
|
|
908
|
+
align-items: center;
|
|
909
|
+
gap: var(--space-2);
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.pipeline-inline__step {
|
|
913
|
+
display: flex;
|
|
914
|
+
align-items: center;
|
|
915
|
+
gap: var(--space-2);
|
|
916
|
+
padding: var(--space-1) var(--space-3);
|
|
917
|
+
background: var(--color-bg-surface-2);
|
|
918
|
+
border: 1px solid var(--color-border-subtle);
|
|
919
|
+
border-radius: var(--radius-default);
|
|
920
|
+
cursor: default;
|
|
921
|
+
transition: border-color var(--duration-fast) var(--ease-out),
|
|
922
|
+
background var(--duration-fast) var(--ease-out);
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
.pipeline-inline__step:hover {
|
|
926
|
+
border-color: var(--color-border-default);
|
|
927
|
+
background: var(--color-bg-surface-3);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
.pipeline-inline__num {
|
|
931
|
+
display: inline-flex;
|
|
932
|
+
align-items: center;
|
|
933
|
+
justify-content: center;
|
|
934
|
+
width: 18px;
|
|
935
|
+
height: 18px;
|
|
936
|
+
font-size: 10px;
|
|
937
|
+
font-weight: var(--font-semibold);
|
|
938
|
+
color: var(--color-accent-purple);
|
|
939
|
+
background: var(--color-accent-muted);
|
|
940
|
+
border-radius: var(--radius-full);
|
|
941
|
+
flex-shrink: 0;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
.pipeline-inline__title {
|
|
945
|
+
font-size: var(--text-xs);
|
|
946
|
+
font-family: var(--font-mono);
|
|
947
|
+
color: var(--color-text-secondary);
|
|
948
|
+
white-space: nowrap;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
.pipeline-inline__arrow {
|
|
952
|
+
color: var(--color-text-faint);
|
|
953
|
+
font-size: var(--text-sm);
|
|
954
|
+
flex-shrink: 0;
|
|
955
|
+
}
|
|
956
|
+
|
|
906
957
|
/* --------------------------------------------------------------------------
|
|
907
958
|
* SCROLL CUE
|
|
908
959
|
* -------------------------------------------------------------------------- */
|
|
@@ -1025,6 +1076,7 @@
|
|
|
1025
1076
|
@media (min-width: 768px) {
|
|
1026
1077
|
.steps {
|
|
1027
1078
|
flex-direction: row;
|
|
1079
|
+
flex-wrap: wrap;
|
|
1028
1080
|
align-items: flex-start;
|
|
1029
1081
|
justify-content: center;
|
|
1030
1082
|
gap: var(--space-4);
|
package/site/assets/js/main.js
CHANGED
|
@@ -580,11 +580,11 @@
|
|
|
580
580
|
]
|
|
581
581
|
},
|
|
582
582
|
1: {
|
|
583
|
-
subtitle: '
|
|
583
|
+
subtitle: '385 rules. 10+ AI tools. One command.',
|
|
584
584
|
steps: [
|
|
585
585
|
{ title: 'Discover configs', desc: 'Finds all agent configuration files: Skills, Hooks, MCP, Memory, and Plugins across your project.' },
|
|
586
|
-
{ title: 'Run
|
|
587
|
-
{ title: 'Fix and report', desc: '
|
|
586
|
+
{ title: 'Run 385 rules', desc: 'Validates against 385 rules across 10+ AI tools including Claude Code, Cursor, Copilot, Codex, and more.' },
|
|
587
|
+
{ title: 'Fix and report', desc: '102 rules are auto-fixable with --fix flag. Outputs SARIF for GitHub Code Scanning integration.' }
|
|
588
588
|
]
|
|
589
589
|
},
|
|
590
590
|
2: {
|
|
@@ -636,11 +636,11 @@
|
|
|
636
636
|
]
|
|
637
637
|
},
|
|
638
638
|
8: {
|
|
639
|
-
subtitle: '
|
|
639
|
+
subtitle: 'Unified analysis. Cached. 24 query types.',
|
|
640
640
|
steps: [
|
|
641
|
-
{ title: '
|
|
642
|
-
{ title: 'Build
|
|
643
|
-
{ title: '
|
|
641
|
+
{ title: 'Analyze repo', desc: 'Rust binary scans git history, file structure, and code patterns. Extracts hotspots, coupling, ownership, and conventions.' },
|
|
642
|
+
{ title: 'Build cached map', desc: 'Creates repo-intel.json with symbols, imports, exports, and metadata in the platform state directory.' },
|
|
643
|
+
{ title: 'Query on demand', desc: '24 query types: hotspots, bugspots, test-gaps, bus-factor, diff-risk, conventions, stale-docs, and more.' }
|
|
644
644
|
]
|
|
645
645
|
},
|
|
646
646
|
9: {
|
|
@@ -682,6 +682,54 @@
|
|
|
682
682
|
{ title: 'Authenticate', desc: 'Opens headed Chrome for human login (2FA, CAPTCHAs). Polls for success, then encrypts cookies for reuse.' },
|
|
683
683
|
{ title: 'Run headless', desc: 'Subsequent actions run headless using saved cookies. Snapshot-based element discovery with classified error codes.' }
|
|
684
684
|
]
|
|
685
|
+
},
|
|
686
|
+
14: {
|
|
687
|
+
subtitle: 'Five quality gates. Zero shortcuts.',
|
|
688
|
+
steps: [
|
|
689
|
+
{ title: 'Clean and lint', desc: 'Deslop + simplify + test-coverage run in parallel. Then agnix and /enhance lint any changed agent configs.' },
|
|
690
|
+
{ title: 'Review and validate', desc: '4 core reviewers iterate until clean (max 5 rounds). Then delivery-validator checks tests, build, and requirements.' },
|
|
691
|
+
{ title: 'Sync docs and ship', desc: 'Documentation synced with code changes. Ready for /ship or /gate-and-ship to create the PR.' }
|
|
692
|
+
]
|
|
693
|
+
},
|
|
694
|
+
15: {
|
|
695
|
+
subtitle: 'Quality gates then ship. One command.',
|
|
696
|
+
steps: [
|
|
697
|
+
{ title: 'Run /prepare-delivery', desc: 'All five quality gates: deslop, config lint, review loop, delivery validation, and docs sync.' },
|
|
698
|
+
{ title: 'Run /ship', desc: 'Commit, push, create PR, wait for auto-reviewers, address comments, monitor CI, merge.' },
|
|
699
|
+
{ title: 'Done', desc: 'From code-complete to merged PR. If gates fail, ship does not run. Each piece also runs independently.' }
|
|
700
|
+
]
|
|
701
|
+
},
|
|
702
|
+
16: {
|
|
703
|
+
subtitle: 'Detect ecosystem. Tag. Publish.',
|
|
704
|
+
steps: [
|
|
705
|
+
{ title: 'Discover release method', desc: 'Finds your release tool: semantic-release, release-it, goreleaser, cargo-release, or manual npm/cargo/go publish.' },
|
|
706
|
+
{ title: 'Pre-release checks', desc: 'Runs tests, verifies build, checks repo-intel health (bus factor, AI ratio, bugspots). Bumps version.' },
|
|
707
|
+
{ title: 'Tag and publish', desc: 'Creates git tag, publishes to registry (npm, crates.io, PyPI, etc.), creates GitHub release with notes.' }
|
|
708
|
+
]
|
|
709
|
+
},
|
|
710
|
+
17: {
|
|
711
|
+
subtitle: 'Transcripts in. Automation suggestions out.',
|
|
712
|
+
steps: [
|
|
713
|
+
{ title: 'Read transcripts', desc: 'Reads saved sessions from Claude Code, Codex, and OpenCode. No hooks, no per-turn overhead.' },
|
|
714
|
+
{ title: 'Cluster patterns', desc: 'Extracts observations, groups by theme, weights by frequency. Identifies repetitive workflows.' },
|
|
715
|
+
{ title: 'Suggest automation', desc: 'Recommends skills, hooks, and agents that would automate the patterns found. Checks existing ecosystem first.' }
|
|
716
|
+
]
|
|
717
|
+
},
|
|
718
|
+
18: {
|
|
719
|
+
subtitle: 'Automated data collection. Interactive tour.',
|
|
720
|
+
steps: [
|
|
721
|
+
{ title: 'Collect project data', desc: 'Scans package.json, git history, directory structure, key files, and conventions automatically.' },
|
|
722
|
+
{ title: 'Generate overview', desc: 'Synthesizes a structured project summary: architecture, patterns, key files, and entry points.' },
|
|
723
|
+
{ title: 'Interactive Q&A', desc: 'Answers questions about the codebase interactively. Identifies key files, conventions, and gotchas.' }
|
|
724
|
+
]
|
|
725
|
+
},
|
|
726
|
+
19: {
|
|
727
|
+
subtitle: 'Match skills to project needs.',
|
|
728
|
+
steps: [
|
|
729
|
+
{ title: 'Analyze project', desc: 'Uses repo-intel to find test gaps, stale docs, open issues, bugspots, and areas with low bus factor.' },
|
|
730
|
+
{ title: 'Match skills', desc: 'Asks about your experience and interests. Matches your skills to areas where you can make the most impact.' },
|
|
731
|
+
{ title: 'Suggest tasks', desc: 'Presents ranked list of good-first tasks, documentation fixes, test gaps, and contribution opportunities.' }
|
|
732
|
+
]
|
|
685
733
|
}
|
|
686
734
|
};
|
|
687
735
|
|
|
@@ -727,7 +775,8 @@
|
|
|
727
775
|
num.textContent = i + 1;
|
|
728
776
|
card.appendChild(num);
|
|
729
777
|
|
|
730
|
-
|
|
778
|
+
var tpl = stepIconTemplates[i % stepIconTemplates.length];
|
|
779
|
+
if (tpl) card.appendChild(tpl.content.cloneNode(true));
|
|
731
780
|
|
|
732
781
|
var title = document.createElement('h3');
|
|
733
782
|
title.className = 'steps__card-title';
|
|
@@ -788,6 +837,52 @@
|
|
|
788
837
|
updateHowItWorks(e.detail.index);
|
|
789
838
|
});
|
|
790
839
|
}
|
|
840
|
+
|
|
841
|
+
// Inject inline pipeline steps into each command panel so users see them without scrolling
|
|
842
|
+
var commandPanels = document.querySelectorAll('.commands .tabs__panel');
|
|
843
|
+
commandPanels.forEach(function (panel, idx) {
|
|
844
|
+
var data = howItWorksData[idx];
|
|
845
|
+
if (!data || !data.steps) return;
|
|
846
|
+
|
|
847
|
+
var pipeline = document.createElement('div');
|
|
848
|
+
pipeline.className = 'pipeline-inline';
|
|
849
|
+
|
|
850
|
+
var label = document.createElement('p');
|
|
851
|
+
label.className = 'pipeline-inline__label';
|
|
852
|
+
label.textContent = 'How it works';
|
|
853
|
+
pipeline.appendChild(label);
|
|
854
|
+
|
|
855
|
+
var stepsRow = document.createElement('div');
|
|
856
|
+
stepsRow.className = 'pipeline-inline__steps';
|
|
857
|
+
|
|
858
|
+
data.steps.forEach(function (step, i) {
|
|
859
|
+
if (i > 0) {
|
|
860
|
+
var arrow = document.createElement('span');
|
|
861
|
+
arrow.className = 'pipeline-inline__arrow';
|
|
862
|
+
arrow.setAttribute('aria-hidden', 'true');
|
|
863
|
+
arrow.textContent = '\u2192';
|
|
864
|
+
stepsRow.appendChild(arrow);
|
|
865
|
+
}
|
|
866
|
+
var stepEl = document.createElement('div');
|
|
867
|
+
stepEl.className = 'pipeline-inline__step';
|
|
868
|
+
stepEl.setAttribute('title', step.desc);
|
|
869
|
+
|
|
870
|
+
var num = document.createElement('span');
|
|
871
|
+
num.className = 'pipeline-inline__num';
|
|
872
|
+
num.textContent = i + 1;
|
|
873
|
+
stepEl.appendChild(num);
|
|
874
|
+
|
|
875
|
+
var title = document.createElement('span');
|
|
876
|
+
title.className = 'pipeline-inline__title';
|
|
877
|
+
title.textContent = step.title;
|
|
878
|
+
stepEl.appendChild(title);
|
|
879
|
+
|
|
880
|
+
stepsRow.appendChild(stepEl);
|
|
881
|
+
});
|
|
882
|
+
|
|
883
|
+
pipeline.appendChild(stepsRow);
|
|
884
|
+
panel.appendChild(pipeline);
|
|
885
|
+
});
|
|
791
886
|
}
|
|
792
887
|
|
|
793
888
|
// ========================================================================
|
package/site/content.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "https://agent-sh.github.io/agentsys",
|
|
6
6
|
"repo": "https://github.com/agent-sh/agentsys",
|
|
7
7
|
"npm": "https://www.npmjs.com/package/agentsys",
|
|
8
|
-
"version": "5.8.
|
|
8
|
+
"version": "5.8.2",
|
|
9
9
|
"author": "Avi Fenesh",
|
|
10
10
|
"author_url": "https://github.com/avifenesh"
|
|
11
11
|
},
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"suffix": ""
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
|
-
"value": "3,
|
|
46
|
+
"value": "3,750",
|
|
47
47
|
"label": "Tests",
|
|
48
48
|
"suffix": ""
|
|
49
49
|
},
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
{
|
|
113
113
|
"name": "/agnix",
|
|
114
114
|
"tagline": "Lint agent configs before they break",
|
|
115
|
-
"description": "
|
|
115
|
+
"description": "385 validation rules (102 auto-fixable) for Skills, Memory, Hooks, MCP, and Plugins across 10+ AI tools including Claude Code, Cursor, GitHub Copilot, Codex CLI, OpenCode, Gemini CLI, Cline, Windsurf, Roo Code, and Amp. SARIF output for GitHub Code Scanning.",
|
|
116
116
|
"example": "/agnix --fix",
|
|
117
117
|
"category": "linting"
|
|
118
118
|
},
|
|
@@ -427,7 +427,7 @@
|
|
|
427
427
|
"highlights": [
|
|
428
428
|
"Agent-analyzer Phase 1 - git intelligence with 21 queries",
|
|
429
429
|
"Repo-intel integration across 11 plugins",
|
|
430
|
-
"agnix v0.16.0 -
|
|
430
|
+
"agnix v0.16.0 - 385 validation rules"
|
|
431
431
|
]
|
|
432
432
|
},
|
|
433
433
|
{
|
|
@@ -505,7 +505,7 @@
|
|
|
505
505
|
],
|
|
506
506
|
"research": {
|
|
507
507
|
"knowledge_base": "8,000 lines of curated documentation from Anthropic, OpenAI, Google, and Microsoft",
|
|
508
|
-
"testing": "3,
|
|
508
|
+
"testing": "3,750 tests passing",
|
|
509
509
|
"drift_detect_repos": "1,000+ repositories validated",
|
|
510
510
|
"token_reduction": "77% fewer tokens for drift-detect vs multi-agent approaches"
|
|
511
511
|
},
|
package/site/index.html
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
6
|
<title>AgentSys - Agent Runtime & Orchestration System</title>
|
|
7
|
-
<meta name="description" content="A modular runtime and orchestration system for AI agents.
|
|
7
|
+
<meta name="description" content="A modular runtime and orchestration system for AI agents. 19 plugins, 47 agents, 40 skills — structured pipelines for Claude Code, OpenCode, Codex CLI, Cursor, and Kiro.">
|
|
8
8
|
<meta name="theme-color" content="#09090b">
|
|
9
9
|
|
|
10
10
|
<!-- Open Graph -->
|
|
11
11
|
<meta property="og:title" content="AgentSys">
|
|
12
|
-
<meta property="og:description" content="A modular runtime and orchestration system for AI agents.
|
|
12
|
+
<meta property="og:description" content="A modular runtime and orchestration system for AI agents. 19 plugins, 47 agents, 40 skills.">
|
|
13
13
|
<meta property="og:image" content="https://agent-sh.github.io/agentsys/assets/logo.png">
|
|
14
14
|
<meta property="og:url" content="https://agent-sh.github.io/agentsys/">
|
|
15
15
|
<meta property="og:type" content="website">
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<!-- Twitter Card -->
|
|
18
18
|
<meta name="twitter:card" content="summary_large_image">
|
|
19
19
|
<meta name="twitter:title" content="AgentSys">
|
|
20
|
-
<meta name="twitter:description" content="AI workflow automation.
|
|
20
|
+
<meta name="twitter:description" content="AI workflow automation. 19 plugins, 47 agents, 40 skills.">
|
|
21
21
|
<meta name="twitter:image" content="https://agent-sh.github.io/agentsys/assets/logo.png">
|
|
22
22
|
|
|
23
23
|
<!-- Content Security Policy -->
|
|
@@ -72,7 +72,6 @@
|
|
|
72
72
|
|
|
73
73
|
<div class="nav__links" id="nav-links">
|
|
74
74
|
<a href="#commands" class="nav__link" data-section="commands">Commands</a>
|
|
75
|
-
<a href="#how-it-works" class="nav__link" data-section="how-it-works">How It Works</a>
|
|
76
75
|
<a href="#agents-skills" class="nav__link" data-section="agents-skills">Agents</a>
|
|
77
76
|
<a href="#install" class="nav__link" data-section="install">Install</a>
|
|
78
77
|
</div>
|
|
@@ -96,7 +95,6 @@
|
|
|
96
95
|
<div class="mobile-menu" id="mobile-menu" role="dialog" aria-label="Navigation menu" aria-hidden="true">
|
|
97
96
|
<div class="mobile-menu__inner">
|
|
98
97
|
<a href="#commands" class="mobile-menu__link">Commands</a>
|
|
99
|
-
<a href="#how-it-works" class="mobile-menu__link">How It Works</a>
|
|
100
98
|
<a href="#agents-skills" class="mobile-menu__link">Agents</a>
|
|
101
99
|
<a href="#install" class="mobile-menu__link">Install</a>
|
|
102
100
|
<a href="https://github.com/agent-sh/agentsys" class="mobile-menu__link" target="_blank" rel="noopener noreferrer">GitHub</a>
|
|
@@ -109,7 +107,7 @@
|
|
|
109
107
|
<div class="hero__inner">
|
|
110
108
|
<div class="hero__content">
|
|
111
109
|
<div class="hero__badge anim-fade-in" data-delay="100">
|
|
112
|
-
|
|
110
|
+
19 plugins · 47 agents · 40 skills
|
|
113
111
|
</div>
|
|
114
112
|
<h1 class="hero__title anim-fade-up" id="hero-title" data-delay="200">
|
|
115
113
|
A modular <span class="text-gradient">runtime and orchestration system</span><br>
|
|
@@ -158,15 +156,15 @@
|
|
|
158
156
|
<section class="stats" id="stats" aria-label="Project statistics">
|
|
159
157
|
<div class="stats__inner">
|
|
160
158
|
<div class="stats__item">
|
|
161
|
-
<span class="stats__number" aria-live="polite" data-target="
|
|
159
|
+
<span class="stats__number" aria-live="polite" data-target="19">0</span>
|
|
162
160
|
<span class="stats__label">Plugins</span>
|
|
163
161
|
</div>
|
|
164
162
|
<div class="stats__item">
|
|
165
|
-
<span class="stats__number" aria-live="polite" data-target="
|
|
163
|
+
<span class="stats__number" aria-live="polite" data-target="47">0</span>
|
|
166
164
|
<span class="stats__label">Agents</span>
|
|
167
165
|
</div>
|
|
168
166
|
<div class="stats__item">
|
|
169
|
-
<span class="stats__number" aria-live="polite" data-target="
|
|
167
|
+
<span class="stats__number" aria-live="polite" data-target="40">0</span>
|
|
170
168
|
<span class="stats__label">Skills</span>
|
|
171
169
|
</div>
|
|
172
170
|
<div class="stats__item">
|
|
@@ -179,7 +177,7 @@
|
|
|
179
177
|
<!-- ===== COMMANDS ===== -->
|
|
180
178
|
<section class="commands" id="commands" aria-labelledby="commands-title">
|
|
181
179
|
<div class="commands__inner">
|
|
182
|
-
<h2 class="commands__title anim-fade-up" id="commands-title">
|
|
180
|
+
<h2 class="commands__title anim-fade-up" id="commands-title">20 Commands. One Toolkit.</h2>
|
|
183
181
|
<p class="commands__subtitle anim-fade-up" data-delay="100">Each works standalone. Together, they automate everything.</p>
|
|
184
182
|
|
|
185
183
|
<div class="commands__tabs anim-fade-up" data-delay="200">
|
|
@@ -198,6 +196,12 @@
|
|
|
198
196
|
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-11" id="tab-11" tabindex="-1" data-index="11">/consult</button>
|
|
199
197
|
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-12" id="tab-12" tabindex="-1" data-index="12">/debate</button>
|
|
200
198
|
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-13" id="tab-13" tabindex="-1" data-index="13">/web-ctl</button>
|
|
199
|
+
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-14" id="tab-14" tabindex="-1" data-index="14">/prepare-delivery</button>
|
|
200
|
+
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-15" id="tab-15" tabindex="-1" data-index="15">/gate-and-ship</button>
|
|
201
|
+
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-16" id="tab-16" tabindex="-1" data-index="16">/release</button>
|
|
202
|
+
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-17" id="tab-17" tabindex="-1" data-index="17">/skillers</button>
|
|
203
|
+
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-18" id="tab-18" tabindex="-1" data-index="18">/onboard</button>
|
|
204
|
+
<button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-19" id="tab-19" tabindex="-1" data-index="19">/can-i-help</button>
|
|
201
205
|
</div>
|
|
202
206
|
|
|
203
207
|
<!-- Tab panels -->
|
|
@@ -224,9 +228,9 @@
|
|
|
224
228
|
<h3 class="tabs__panel-name">/agnix</h3>
|
|
225
229
|
<p class="tabs__panel-tagline">Lint agent configs before they break</p>
|
|
226
230
|
<ul class="tabs__panel-features">
|
|
227
|
-
<li>
|
|
231
|
+
<li>385 validation rules across 36 categories</li>
|
|
228
232
|
<li>10+ AI tools: Claude Code, Cursor, Copilot, Codex, OpenCode, Gemini CLI</li>
|
|
229
|
-
<li>
|
|
233
|
+
<li>102 auto-fixable rules with --fix flag</li>
|
|
230
234
|
<li>SARIF output for GitHub Code Scanning</li>
|
|
231
235
|
</ul>
|
|
232
236
|
<div class="code-block">
|
|
@@ -466,52 +470,119 @@
|
|
|
466
470
|
<span class="code-prompt">$</span> /web-ctl auth github --url https://github.com/login <span class="code-comment"># Auth handoff</span></code></pre>
|
|
467
471
|
</div>
|
|
468
472
|
</div>
|
|
469
|
-
</div>
|
|
470
|
-
</div>
|
|
471
|
-
</section>
|
|
472
473
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
474
|
+
<div class="tabs__panel" role="tabpanel" id="tab-panel-14" aria-labelledby="tab-14" hidden>
|
|
475
|
+
<h3 class="tabs__panel-name">/prepare-delivery</h3>
|
|
476
|
+
<p class="tabs__panel-tagline">Pre-ship quality gates</p>
|
|
477
|
+
<ul class="tabs__panel-features">
|
|
478
|
+
<li>Deslop, simplify, review loop, delivery validation, docs sync</li>
|
|
479
|
+
<li>Conditional agnix + enhance for config changes</li>
|
|
480
|
+
<li>Works standalone or as part of /next-task</li>
|
|
481
|
+
<li>Does not ship - use /gate-and-ship for full pipeline</li>
|
|
482
|
+
</ul>
|
|
483
|
+
<div class="code-block">
|
|
484
|
+
<button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/prepare-delivery # Run all quality gates
|
|
485
|
+
/prepare-delivery --skip-review # Skip review loop">
|
|
486
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"/></svg>
|
|
487
|
+
</button>
|
|
488
|
+
<pre><code><span class="code-prompt">$</span> /prepare-delivery <span class="code-comment"># Run all quality gates</span>
|
|
489
|
+
<span class="code-prompt">$</span> /prepare-delivery --skip-review <span class="code-comment"># Skip review loop</span></code></pre>
|
|
490
|
+
</div>
|
|
491
|
+
</div>
|
|
486
492
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
<
|
|
490
|
-
<
|
|
491
|
-
|
|
492
|
-
|
|
493
|
+
<div class="tabs__panel" role="tabpanel" id="tab-panel-15" aria-labelledby="tab-15" hidden>
|
|
494
|
+
<h3 class="tabs__panel-name">/gate-and-ship</h3>
|
|
495
|
+
<p class="tabs__panel-tagline">Quality gates then ship</p>
|
|
496
|
+
<ul class="tabs__panel-features">
|
|
497
|
+
<li>Chains /prepare-delivery then /ship</li>
|
|
498
|
+
<li>One command from code-complete to merged PR</li>
|
|
499
|
+
<li>All flags forwarded to sub-commands</li>
|
|
500
|
+
<li>Each piece runs independently too</li>
|
|
501
|
+
</ul>
|
|
502
|
+
<div class="code-block">
|
|
503
|
+
<button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/gate-and-ship # Full pipeline
|
|
504
|
+
/gate-and-ship --base=develop # Custom base branch">
|
|
505
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"/></svg>
|
|
506
|
+
</button>
|
|
507
|
+
<pre><code><span class="code-prompt">$</span> /gate-and-ship <span class="code-comment"># Full pipeline</span>
|
|
508
|
+
<span class="code-prompt">$</span> /gate-and-ship --base=develop <span class="code-comment"># Custom base branch</span></code></pre>
|
|
509
|
+
</div>
|
|
493
510
|
</div>
|
|
494
511
|
|
|
495
|
-
<div class="
|
|
496
|
-
<
|
|
512
|
+
<div class="tabs__panel" role="tabpanel" id="tab-panel-16" aria-labelledby="tab-16" hidden>
|
|
513
|
+
<h3 class="tabs__panel-name">/release</h3>
|
|
514
|
+
<p class="tabs__panel-tagline">Versioned release with ecosystem detection</p>
|
|
515
|
+
<ul class="tabs__panel-features">
|
|
516
|
+
<li>Auto-detects: npm, cargo, go, python, maven, gradle</li>
|
|
517
|
+
<li>Discovers release tools (semantic-release, goreleaser, etc.)</li>
|
|
518
|
+
<li>Pre-release health check with repo-intel</li>
|
|
519
|
+
<li>Tag, publish, create GitHub release</li>
|
|
520
|
+
</ul>
|
|
521
|
+
<div class="code-block">
|
|
522
|
+
<button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/release # Create release
|
|
523
|
+
/release --dry-run # Preview without publishing">
|
|
524
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"/></svg>
|
|
525
|
+
</button>
|
|
526
|
+
<pre><code><span class="code-prompt">$</span> /release <span class="code-comment"># Create release</span>
|
|
527
|
+
<span class="code-prompt">$</span> /release --dry-run <span class="code-comment"># Preview without publishing</span></code></pre>
|
|
528
|
+
</div>
|
|
497
529
|
</div>
|
|
498
530
|
|
|
499
|
-
<div class="
|
|
500
|
-
<
|
|
501
|
-
<
|
|
502
|
-
<
|
|
503
|
-
|
|
531
|
+
<div class="tabs__panel" role="tabpanel" id="tab-panel-17" aria-labelledby="tab-17" hidden>
|
|
532
|
+
<h3 class="tabs__panel-name">/skillers</h3>
|
|
533
|
+
<p class="tabs__panel-tagline">Learn from your workflow patterns</p>
|
|
534
|
+
<ul class="tabs__panel-features">
|
|
535
|
+
<li>Reads transcripts from Claude Code, Codex, OpenCode</li>
|
|
536
|
+
<li>Clusters patterns into themed knowledge</li>
|
|
537
|
+
<li>Suggests skills, hooks, and agents to automate repetitive work</li>
|
|
538
|
+
<li>No per-turn overhead - works from saved transcripts</li>
|
|
539
|
+
</ul>
|
|
540
|
+
<div class="code-block">
|
|
541
|
+
<button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/skillers # Analyze workflow patterns
|
|
542
|
+
/skillers compact # Compact transcripts into knowledge">
|
|
543
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"/></svg>
|
|
544
|
+
</button>
|
|
545
|
+
<pre><code><span class="code-prompt">$</span> /skillers <span class="code-comment"># Analyze workflow patterns</span>
|
|
546
|
+
<span class="code-prompt">$</span> /skillers compact <span class="code-comment"># Compact transcripts into knowledge</span></code></pre>
|
|
547
|
+
</div>
|
|
504
548
|
</div>
|
|
505
549
|
|
|
506
|
-
<div class="
|
|
507
|
-
<
|
|
550
|
+
<div class="tabs__panel" role="tabpanel" id="tab-panel-18" aria-labelledby="tab-18" hidden>
|
|
551
|
+
<h3 class="tabs__panel-name">/onboard</h3>
|
|
552
|
+
<p class="tabs__panel-tagline">Codebase orientation for newcomers</p>
|
|
553
|
+
<ul class="tabs__panel-features">
|
|
554
|
+
<li>Automated project data collection</li>
|
|
555
|
+
<li>Interactive guided tour of the codebase</li>
|
|
556
|
+
<li>Identifies key files, patterns, conventions</li>
|
|
557
|
+
<li>Works on any codebase - no setup required</li>
|
|
558
|
+
</ul>
|
|
559
|
+
<div class="code-block">
|
|
560
|
+
<button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/onboard # Full onboarding tour
|
|
561
|
+
/onboard --quick # Quick overview">
|
|
562
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"/></svg>
|
|
563
|
+
</button>
|
|
564
|
+
<pre><code><span class="code-prompt">$</span> /onboard <span class="code-comment"># Full onboarding tour</span>
|
|
565
|
+
<span class="code-prompt">$</span> /onboard --quick <span class="code-comment"># Quick overview</span></code></pre>
|
|
566
|
+
</div>
|
|
508
567
|
</div>
|
|
509
568
|
|
|
510
|
-
<div class="
|
|
511
|
-
<
|
|
512
|
-
<
|
|
513
|
-
<
|
|
514
|
-
|
|
569
|
+
<div class="tabs__panel" role="tabpanel" id="tab-panel-19" aria-labelledby="tab-19" hidden>
|
|
570
|
+
<h3 class="tabs__panel-name">/can-i-help</h3>
|
|
571
|
+
<p class="tabs__panel-tagline">Find where to contribute</p>
|
|
572
|
+
<ul class="tabs__panel-features">
|
|
573
|
+
<li>Matches developer skills to project needs</li>
|
|
574
|
+
<li>Finds test gaps, stale docs, open issues</li>
|
|
575
|
+
<li>Good-first-task identification</li>
|
|
576
|
+
<li>Uses repo-intel for data-driven suggestions</li>
|
|
577
|
+
</ul>
|
|
578
|
+
<div class="code-block">
|
|
579
|
+
<button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/can-i-help # Find contribution opportunities
|
|
580
|
+
/can-i-help --skills=typescript # Match specific skills">
|
|
581
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"/><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"/></svg>
|
|
582
|
+
</button>
|
|
583
|
+
<pre><code><span class="code-prompt">$</span> /can-i-help <span class="code-comment"># Find contribution opportunities</span>
|
|
584
|
+
<span class="code-prompt">$</span> /can-i-help --skills=typescript <span class="code-comment"># Match specific skills</span></code></pre>
|
|
585
|
+
</div>
|
|
515
586
|
</div>
|
|
516
587
|
</div>
|
|
517
588
|
</div>
|
|
@@ -536,7 +607,7 @@
|
|
|
536
607
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="3"/></svg>
|
|
537
608
|
</div>
|
|
538
609
|
<h3 class="philosophy__card-title">One agent, one job, done well</h3>
|
|
539
|
-
<p class="philosophy__card-desc"><span class="text-accent">
|
|
610
|
+
<p class="philosophy__card-desc"><span class="text-accent">47 specialized agents</span>, each with a narrow scope and clear success criteria. No agent tries to do everything.</p>
|
|
540
611
|
</div>
|
|
541
612
|
<div class="philosophy__card anim-fade-up" data-delay="200">
|
|
542
613
|
<div class="philosophy__card-icon">
|
|
@@ -591,14 +662,14 @@
|
|
|
591
662
|
<!-- ===== AGENTS & SKILLS ===== -->
|
|
592
663
|
<section class="agents-skills" id="agents-skills" aria-labelledby="as-title">
|
|
593
664
|
<div class="agents-skills__inner">
|
|
594
|
-
<h2 class="agents-skills__title anim-fade-up" id="as-title">
|
|
665
|
+
<h2 class="agents-skills__title anim-fade-up" id="as-title">47 Agents. 40 Skills.</h2>
|
|
595
666
|
<p class="agents-skills__subtitle anim-fade-up" data-delay="100">Right model for the task. Opus reasons. Sonnet validates. Haiku executes.</p>
|
|
596
667
|
|
|
597
668
|
<!-- Agent tier tabs -->
|
|
598
669
|
<div class="agents-skills__tabs anim-fade-up" data-delay="200">
|
|
599
670
|
<div class="agent-tabs" role="tablist" aria-label="Agent tiers">
|
|
600
|
-
<button class="agent-tabs__tab agent-tabs__tab--active" role="tab" aria-selected="true" aria-controls="agent-tier-opus" id="agent-tab-opus" data-index="0">Opus <span class="agent-tabs__count">
|
|
601
|
-
<button class="agent-tabs__tab" role="tab" aria-selected="false" aria-controls="agent-tier-sonnet" id="agent-tab-sonnet" tabindex="-1" data-index="1">Sonnet <span class="agent-tabs__count">
|
|
671
|
+
<button class="agent-tabs__tab agent-tabs__tab--active" role="tab" aria-selected="true" aria-controls="agent-tier-opus" id="agent-tab-opus" data-index="0">Opus <span class="agent-tabs__count">15</span></button>
|
|
672
|
+
<button class="agent-tabs__tab" role="tab" aria-selected="false" aria-controls="agent-tier-sonnet" id="agent-tab-sonnet" tabindex="-1" data-index="1">Sonnet <span class="agent-tabs__count">18</span></button>
|
|
602
673
|
<button class="agent-tabs__tab" role="tab" aria-selected="false" aria-controls="agent-tier-haiku" id="agent-tab-haiku" tabindex="-1" data-index="2">Haiku <span class="agent-tabs__count">4</span></button>
|
|
603
674
|
<button class="agent-tabs__tab" role="tab" aria-selected="false" aria-controls="agent-tier-specialists" id="agent-tab-specialists" tabindex="-1" data-index="3">Specialists <span class="agent-tabs__count">10</span></button>
|
|
604
675
|
</div>
|
|
@@ -620,6 +691,7 @@
|
|
|
620
691
|
<div class="agent-card"><span class="agent-card__name">prompt-enhancer</span><span class="tier-badge tier-badge--opus">opus</span><p class="agent-card__desc">Prompt engineering best practices</p></div>
|
|
621
692
|
<div class="agent-card"><span class="agent-card__name">skills-enhancer</span><span class="tier-badge tier-badge--opus">opus</span><p class="agent-card__desc">Skill definition quality analysis</p></div>
|
|
622
693
|
<div class="agent-card"><span class="agent-card__name">debate-orchestrator</span><span class="tier-badge tier-badge--opus">opus</span><p class="agent-card__desc">Structured adversarial debate coordination</p></div>
|
|
694
|
+
<div class="agent-card"><span class="agent-card__name">skillers-recommender</span><span class="tier-badge tier-badge--opus">opus</span><p class="agent-card__desc">Workflow pattern analysis and automation suggestions</p></div>
|
|
623
695
|
</div>
|
|
624
696
|
</div>
|
|
625
697
|
|
|
@@ -641,6 +713,9 @@
|
|
|
641
713
|
<div class="agent-card"><span class="agent-card__name">agnix-agent</span><span class="tier-badge tier-badge--sonnet">sonnet</span><p class="agent-card__desc">Agent config linting orchestration</p></div>
|
|
642
714
|
<div class="agent-card"><span class="agent-card__name">consult-agent</span><span class="tier-badge tier-badge--sonnet">sonnet</span><p class="agent-card__desc">Cross-tool AI consultation orchestration</p></div>
|
|
643
715
|
<div class="agent-card"><span class="agent-card__name">web-session</span><span class="tier-badge tier-badge--sonnet">sonnet</span><p class="agent-card__desc">Browser automation and session management</p></div>
|
|
716
|
+
<div class="agent-card"><span class="agent-card__name">skillers-compactor</span><span class="tier-badge tier-badge--sonnet">sonnet</span><p class="agent-card__desc">Transcript compaction into knowledge themes</p></div>
|
|
717
|
+
<div class="agent-card"><span class="agent-card__name">release-agent</span><span class="tier-badge tier-badge--sonnet">sonnet</span><p class="agent-card__desc">Versioned release with ecosystem detection</p></div>
|
|
718
|
+
<div class="agent-card"><span class="agent-card__name">onboard-agent</span><span class="tier-badge tier-badge--sonnet">sonnet</span><p class="agent-card__desc">Codebase orientation and guided onboarding</p></div>
|
|
644
719
|
</div>
|
|
645
720
|
</div>
|
|
646
721
|
|
|
@@ -672,19 +747,21 @@
|
|
|
672
747
|
</div>
|
|
673
748
|
|
|
674
749
|
<!-- Skills grid -->
|
|
675
|
-
<h3 class="agents-skills__skills-title anim-fade-up" data-delay="300">
|
|
750
|
+
<h3 class="agents-skills__skills-title anim-fade-up" data-delay="300">40 Skills across 19 Plugins</h3>
|
|
676
751
|
<div class="skills-grid anim-fade-up" data-delay="350">
|
|
677
752
|
<div class="skill-group">
|
|
678
|
-
<span class="skill-group__label">
|
|
753
|
+
<span class="skill-group__label">prepare-delivery</span>
|
|
679
754
|
<div class="skill-group__items">
|
|
755
|
+
<span class="skill-card">prepare-delivery</span>
|
|
756
|
+
<span class="skill-card">check-test-coverage</span>
|
|
680
757
|
<span class="skill-card">orchestrate-review</span>
|
|
681
|
-
<span class="skill-card">discover-tasks</span>
|
|
682
758
|
<span class="skill-card">validate-delivery</span>
|
|
683
759
|
</div>
|
|
684
760
|
</div>
|
|
685
761
|
<div class="skill-group">
|
|
686
762
|
<span class="skill-group__label">enhance</span>
|
|
687
763
|
<div class="skill-group__items">
|
|
764
|
+
<span class="skill-card">enhance-orchestrator</span>
|
|
688
765
|
<span class="skill-card">enhance-agents</span>
|
|
689
766
|
<span class="skill-card">enhance-claudemd</span>
|
|
690
767
|
<span class="skill-card">enhance-docs</span>
|
|
@@ -702,25 +779,54 @@
|
|
|
702
779
|
<span class="skill-card">benchmark</span>
|
|
703
780
|
<span class="skill-card">profile</span>
|
|
704
781
|
<span class="skill-card">theory-tester</span>
|
|
705
|
-
<span class="skill-card">code-paths</span>
|
|
706
782
|
<span class="skill-card">theory-gatherer</span>
|
|
783
|
+
<span class="skill-card">code-paths</span>
|
|
707
784
|
<span class="skill-card">investigation-logger</span>
|
|
708
785
|
<span class="skill-card">perf-analyzer</span>
|
|
709
786
|
</div>
|
|
710
787
|
</div>
|
|
711
788
|
<div class="skill-group">
|
|
712
|
-
<span class="skill-group__label">
|
|
789
|
+
<span class="skill-group__label">next-task</span>
|
|
790
|
+
<div class="skill-group__items">
|
|
791
|
+
<span class="skill-card">discover-tasks</span>
|
|
792
|
+
</div>
|
|
793
|
+
</div>
|
|
794
|
+
<div class="skill-group">
|
|
795
|
+
<span class="skill-group__label">web-ctl</span>
|
|
796
|
+
<div class="skill-group__items">
|
|
797
|
+
<span class="skill-card">web-auth</span>
|
|
798
|
+
<span class="skill-card">web-browse</span>
|
|
799
|
+
</div>
|
|
800
|
+
</div>
|
|
801
|
+
<div class="skill-group">
|
|
802
|
+
<span class="skill-group__label">skillers</span>
|
|
803
|
+
<div class="skill-group__items">
|
|
804
|
+
<span class="skill-card">recommend</span>
|
|
805
|
+
<span class="skill-card">skillers-compact</span>
|
|
806
|
+
</div>
|
|
807
|
+
</div>
|
|
808
|
+
<div class="skill-group">
|
|
809
|
+
<span class="skill-group__label">single-skill plugins</span>
|
|
713
810
|
<div class="skill-group__items">
|
|
714
811
|
<span class="skill-card">deslop</span>
|
|
715
812
|
<span class="skill-card">drift-analysis</span>
|
|
716
813
|
<span class="skill-card">repo-intel</span>
|
|
717
814
|
<span class="skill-card">sync-docs</span>
|
|
718
|
-
<span class="skill-card">learn
|
|
719
|
-
<span class="skill-card">agnix-lint</span>
|
|
815
|
+
<span class="skill-card">learn</span>
|
|
720
816
|
<span class="skill-card">consult</span>
|
|
721
817
|
<span class="skill-card">debate</span>
|
|
722
|
-
<span class="skill-card">
|
|
723
|
-
<span class="skill-card">
|
|
818
|
+
<span class="skill-card">release</span>
|
|
819
|
+
<span class="skill-card">onboard</span>
|
|
820
|
+
<span class="skill-card">can-i-help</span>
|
|
821
|
+
<span class="skill-card">audit-project</span>
|
|
822
|
+
</div>
|
|
823
|
+
</div>
|
|
824
|
+
<div class="skill-group">
|
|
825
|
+
<span class="skill-group__label">glidemq</span>
|
|
826
|
+
<div class="skill-group__items">
|
|
827
|
+
<span class="skill-card">glide-mq</span>
|
|
828
|
+
<span class="skill-card">glide-mq-migrate-bullmq</span>
|
|
829
|
+
<span class="skill-card">glide-mq-migrate-bee</span>
|
|
724
830
|
</div>
|
|
725
831
|
</div>
|
|
726
832
|
</div>
|