agentsys 5.11.0 → 5.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agentsys",
3
- "description": "20 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, contributor guidance, and Zig language support",
4
- "version": "5.11.0",
3
+ "description": "24 specialized plugins for AI workflow automation - task orchestration, PR workflow, slop detection, code review, drift detection, enhancement analysis, documentation sync, unified static analysis, durable memory, negative behavior memory, skill and system prompt curation, perf investigations, topic research, agent config linting, cross-tool AI consultation, structured AI debate, workflow pattern learning, codebase onboarding, contributor guidance, and Zig language support",
4
+ "version": "5.13.0",
5
5
  "owner": {
6
6
  "name": "Avi Fenesh",
7
7
  "url": "https://github.com/avifenesh"
@@ -40,11 +40,11 @@
40
40
  "source": {
41
41
  "source": "url",
42
42
  "url": "https://github.com/agent-sh/prepare-delivery.git",
43
- "commit": "693d7649501608da49aea8efe610a7029100b8f2",
44
- "ref": "v0.1.1"
43
+ "commit": "0e9685fe0e93e058af5ca9a0374f4f97e1db878c",
44
+ "ref": "v0.1.2"
45
45
  },
46
46
  "description": "Pre-ship quality gates: deslop, simplify, agnix, enhance, review loop, delivery validation, docs sync",
47
- "version": "0.1.1",
47
+ "version": "0.1.2",
48
48
  "category": "productivity",
49
49
  "homepage": "https://github.com/agent-sh/prepare-delivery"
50
50
  },
@@ -78,7 +78,7 @@
78
78
  "source": {
79
79
  "source": "url",
80
80
  "url": "https://github.com/agent-sh/deslop.git",
81
- "commit": "dc49a5309a104a011439f87b346d1c3b47375db2"
81
+ "commit": "00301b9ce81d12caa38063e4a65b535ba5b011b2"
82
82
  },
83
83
  "description": "3-phase AI slop detection: regex patterns (HIGH), multi-pass analyzers (MEDIUM), CLI tools (LOW)",
84
84
  "version": "1.0.0",
@@ -90,11 +90,11 @@
90
90
  "source": {
91
91
  "source": "url",
92
92
  "url": "https://github.com/agent-sh/audit-project.git",
93
- "commit": "2c961a84ab5945670be44d6c54eb496099effe48",
94
- "ref": "v1.0.1"
93
+ "commit": "f703facec38765b6fd8cb5a2076c98bf14e5998e",
94
+ "ref": "v1.0.2"
95
95
  },
96
96
  "description": "Multi-agent iterative code review until zero issues remain",
97
- "version": "1.0.1",
97
+ "version": "1.0.2",
98
98
  "category": "development",
99
99
  "homepage": "https://github.com/agent-sh/audit-project"
100
100
  },
@@ -103,7 +103,7 @@
103
103
  "source": {
104
104
  "source": "url",
105
105
  "url": "https://github.com/agent-sh/drift-detect.git",
106
- "commit": "e7edd602a0e24ae2bff8e262c58e481aae448944"
106
+ "commit": "576aca37402068aef175c8a6002584e19cb6ea74"
107
107
  },
108
108
  "description": "Deep repository analysis to realign project plans with code reality - detects drift, gaps, and creates prioritized reconstruction plans",
109
109
  "version": "1.0.0",
@@ -115,19 +115,45 @@
115
115
  "source": {
116
116
  "source": "url",
117
117
  "url": "https://github.com/agent-sh/enhance.git",
118
- "commit": "31e7d3861afb20b3d910be957387de23dc3ae854"
118
+ "commit": "93f299e494a3a9ea74e82bd2d15bc1c517ce8f0c"
119
119
  },
120
120
  "description": "Master enhancement orchestrator: parallel analyzer execution for plugins, agents, docs, CLAUDE.md, and prompts with unified reporting",
121
121
  "version": "1.0.0",
122
122
  "category": "development",
123
123
  "homepage": "https://github.com/agent-sh/enhance"
124
124
  },
125
+ {
126
+ "name": "skill-curator",
127
+ "source": {
128
+ "source": "url",
129
+ "url": "https://github.com/agent-sh/skill-curator.git",
130
+ "ref": "v1.0.0",
131
+ "commit": "e30ebfe3e7a5307e97fa4e6d59f538b12f8074c5"
132
+ },
133
+ "description": "Canonical guidance for writing, reviewing, and maintaining production-grade SKILL.md files across agent tools",
134
+ "version": "1.0.0",
135
+ "category": "development",
136
+ "homepage": "https://github.com/agent-sh/skill-curator"
137
+ },
138
+ {
139
+ "name": "system-prompt-curator",
140
+ "source": {
141
+ "source": "url",
142
+ "url": "https://github.com/agent-sh/system-prompt-curator.git",
143
+ "ref": "v2.0.0",
144
+ "commit": "277bee4b8b3b796d2a627132c88fb132479cbde0"
145
+ },
146
+ "description": "Production-grade system prompt curation for autonomous coding agents and multi-agent orchestration",
147
+ "version": "2.0.0",
148
+ "category": "development",
149
+ "homepage": "https://github.com/agent-sh/system-prompt-curator"
150
+ },
125
151
  {
126
152
  "name": "sync-docs",
127
153
  "source": {
128
154
  "source": "url",
129
155
  "url": "https://github.com/agent-sh/sync-docs.git",
130
- "commit": "961f5e67b583f70a4e0ad3ad83503ab90decc11d"
156
+ "commit": "410e06739da101583b7238669f4acad7f5aea7ab"
131
157
  },
132
158
  "description": "Standalone documentation sync: find outdated refs, update CHANGELOG, flag stale examples based on code changes",
133
159
  "version": "1.0.0",
@@ -165,13 +191,38 @@
165
191
  "source": {
166
192
  "source": "url",
167
193
  "url": "https://github.com/agent-sh/learn.git",
168
- "commit": "e28ea11f4622509d1ae7425fa97f7dd719d43716"
194
+ "commit": "b3025d376a83841078f3ab5cf53b62c6960e46c3"
169
195
  },
170
196
  "description": "Research topics online and create comprehensive learning guides with RAG-optimized indexes",
171
197
  "version": "1.0.0",
172
198
  "category": "productivity",
173
199
  "homepage": "https://github.com/agent-sh/learn"
174
200
  },
201
+ {
202
+ "name": "axiom",
203
+ "source": {
204
+ "source": "url",
205
+ "url": "https://github.com/agent-sh/axiom.git",
206
+ "commit": "a1bf0fc9ab61178774b3391a337db3e1af20413a"
207
+ },
208
+ "description": "Personal agent-native knowledge base: load thin context, query durable memories, create project scaffolds, and propose approved records",
209
+ "version": "0.6.0",
210
+ "category": "productivity",
211
+ "homepage": "https://github.com/agent-sh/axiom"
212
+ },
213
+ {
214
+ "name": "banthis",
215
+ "source": {
216
+ "source": "url",
217
+ "url": "https://github.com/agent-sh/banthis.git",
218
+ "ref": "v0.3.0",
219
+ "commit": "5820a197bba0f01ec4877a63c5d13c108d8c661d"
220
+ },
221
+ "description": "Durable negative behavior memory: persist user-defined banned agent behaviors into CLAUDE.md or AGENTS.md",
222
+ "version": "0.3.0",
223
+ "category": "productivity",
224
+ "homepage": "https://github.com/agent-sh/banthis"
225
+ },
175
226
  {
176
227
  "name": "agnix",
177
228
  "source": {
@@ -190,7 +241,7 @@
190
241
  "source": {
191
242
  "source": "url",
192
243
  "url": "https://github.com/agent-sh/consult.git",
193
- "commit": "3115688a7c6079a04e8caa0183c1ca020e3d413d"
244
+ "commit": "8ce96f86c0ae67f732383a8b45c9994a7cd64d2a"
194
245
  },
195
246
  "description": "Cross-tool AI consultation: get second opinions from Gemini CLI, Codex CLI, Claude Code, OpenCode, or Copilot CLI with model and thinking effort control",
196
247
  "version": "1.0.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentsys",
3
- "version": "5.11.0",
3
+ "version": "5.13.0",
4
4
  "description": "Professional-grade slash commands for Claude Code with cross-platform support",
5
5
  "keywords": [
6
6
  "workflow",
@@ -4,8 +4,8 @@
4
4
  "skills": "./adapters/codex/skills",
5
5
  "interface": {
6
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.",
7
+ "shortDescription": "AI agent orchestration with 45 skills and 49 agents",
8
+ "longDescription": "Professional-grade slash commands for AI-powered development workflows. Includes /next-task (task discovery to production), /axiom (durable agent memory), /banthis (negative behavior memory), /skill-curator and /system-prompt-curator (agent configuration curation), /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
9
  "developerName": "Avi Fenesh",
10
10
  "category": "developer-tools",
11
11
  "capabilities": [
@@ -14,12 +14,13 @@
14
14
  "ci-cd",
15
15
  "deployment",
16
16
  "performance",
17
- "documentation"
17
+ "documentation",
18
+ "memory"
18
19
  ],
19
20
  "websiteUrl": "https://agent-sh.github.io/agent-sh.dev/",
20
21
  "defaultPrompt": [
21
22
  "What should I work on next?",
22
- "Ship my changes",
23
+ "Load my durable Axiom context",
23
24
  "Review this codebase"
24
25
  ]
25
26
  }
package/AGENTS.md CHANGED
@@ -76,7 +76,7 @@
76
76
  <!-- GEN:START:claude-architecture -->
77
77
  ```
78
78
  lib/ → Shared library (vendored to plugins)
79
- plugins/ → 0 plugins, 10 agents (0 file-based + 10 role-based), 0 skills
79
+ plugins/ → 24 plugins, 49 agents (39 file-based + 10 role-based), 45 skills
80
80
  adapters/ → Platform adapters (opencode-plugin/, opencode/, codex/)
81
81
  checklists/ → Action checklists (9 files)
82
82
  bin/cli.js → npm CLI installer
@@ -84,6 +84,30 @@ bin/cli.js → npm CLI installer
84
84
 
85
85
  | Plugin | Agents | Skills | Purpose |
86
86
  |--------|--------|--------|---------|
87
+ | next-task | 8 | 1 | Master workflow orchestration |
88
+ | prepare-delivery | 3 | 4 | Pre-ship quality gates |
89
+ | gate-and-ship | 0 | 0 | Quality gates then ship |
90
+ | ship | 1 | 1 | PR creation and deployment |
91
+ | deslop | 1 | 1 | AI slop cleanup |
92
+ | audit-project | 10 | 1 | Multi-agent code review |
93
+ | drift-detect | 1 | 1 | Plan drift detection |
94
+ | enhance | 8 | 9 | Code quality analyzers |
95
+ | sync-docs | 1 | 1 | Documentation sync |
96
+ | repo-intel | 1 | 1 | Unified static analysis |
97
+ | axiom | 0 | 1 | Durable agent-native memory |
98
+ | banthis | 0 | 1 | Durable negative behavior memory |
99
+ | perf | 6 | 8 | Performance investigation |
100
+ | learn | 1 | 1 | Topic research and learning guides |
101
+ | agnix | 1 | 1 | Agent config linting |
102
+ | consult | 1 | 1 | Cross-tool AI consultation |
103
+ | debate | 1 | 1 | Multi-perspective debate analysis |
104
+ | web-ctl | 1 | 2 | Browser automation for AI agents |
105
+ | skill-curator | 0 | 1 | Skill authoring and review |
106
+ | system-prompt-curator | 0 | 1 | System prompt curation |
107
+ | skillers | 2 | 2 | Workflow pattern learning |
108
+ | onboard | 1 | 1 | Codebase onboarding |
109
+ | can-i-help | 1 | 1 | Contributor guidance |
110
+ | zig-lsp | 0 | 0 | |
87
111
  <!-- GEN:END:claude-architecture -->
88
112
 
89
113
  **Pattern**: `Command → Agent → Skill` (orchestration → invocation → implementation)
@@ -152,7 +176,7 @@ agentsys # Run installer
152
176
  <agents>
153
177
  ## Agents
154
178
 
155
- 49 agents across 20 plugins (18 have agents; gate-and-ship is commands-only; zig-lsp is config-only with no commands or agents). Key agents by model:
179
+ 49 agents across 24 plugins (18 have agents; gate-and-ship is commands-only; axiom, banthis, skill-curator, and system-prompt-curator are skill/command-only; zig-lsp is config-only with no commands or agents). Key agents by model:
156
180
 
157
181
  | Model | Agents | Use Case |
158
182
  |-------|--------|----------|
@@ -166,14 +190,15 @@ See [README.md](./README.md#command-details) and [docs/reference/AGENTS.md](./do
166
190
  <skills>
167
191
  ## Skills
168
192
 
169
- 40 skills across plugins. Agents invoke skills for reusable implementation.
193
+ 45 skills across plugins. Agents invoke skills for reusable implementation.
170
194
 
171
195
  | Category | Key Skills |
172
196
  |----------|------------|
173
197
  | Workflow | `orchestrate-review`, `discover-tasks`, `validate-delivery` |
174
- | Enhancement | `enhance-*` (9 skills for plugins, agents, docs, prompts, hooks) |
198
+ | Enhancement | `enhance-*` (9 skills for plugins, agents, docs, prompts, hooks), `skill-curator`, `system-prompt-curator` |
175
199
  | Performance | `baseline`, `benchmark`, `profile`, `theory-tester` |
176
200
  | Cleanup | `deslop`, `sync-docs`, `drift-analysis`, `repo-intel` |
201
+ | Memory | `axiom`, `banthis` |
177
202
 
178
203
  See [README.md](./README.md#skills) for full skill list.
179
204
  </skills>
package/CHANGELOG.md CHANGED
@@ -9,6 +9,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [5.13.0] - 2026-05-17
13
+
14
+ ### Added
15
+ - Added the `axiom` plugin to the agentsys marketplace and static docs metadata. Axiom provides durable agent-native memory, project context loading, scoped querying, project scaffolding, and human-approved record proposals.
16
+ - Added `banthis` as a published standalone plugin pinned to `v0.3.0`. It provides durable negative behavior memory through a tiny CLI, skill, and slash command.
17
+ - Added `skill-curator` as a published standalone plugin pinned to `v1.0.0` for production-grade `SKILL.md` authoring and review.
18
+ - Added `system-prompt-curator` as a published standalone plugin pinned to `v2.0.0` for autonomous coding-agent system prompt curation.
19
+
20
+ ### Changed
21
+ - Updated marketplace, Codex metadata, docs, and website counts to 24 plugins, 49 agents, and 45 skills.
22
+
23
+ ## [5.12.0] - 2026-04-26
24
+
25
+ ### Propagated upstream releases
26
+ - agent-core v0.4.4 (fixer.js symlink + TOCTOU) -> v0.4.5 (client-side SLSA verification + sync allowlist) synced into all 13 consumers.
27
+ - agent-analyzer v0.8.0 -> v0.8.1 (cargo-deny CI).
28
+ - prepare-delivery v0.1.2, audit-project v1.0.2 (reviewer-contract markers + orchestrator blocked handling).
29
+
12
30
  ## [5.11.0] - 2026-04-26
13
31
 
14
32
  ### Changed
package/README.md CHANGED
@@ -19,7 +19,7 @@
19
19
  </p>
20
20
 
21
21
  <p align="center">
22
- <b>20 plugins · 49 agents · 41 skills (across all repos) · 30k lines of lib code · 3,507 tests · 5 platforms</b><br>
22
+ <b>24 plugins · 49 agents · 45 skills (across all repos) · 30k lines of lib code · 3,513 tests · 5 platforms</b><br>
23
23
  <em>Plugins distributed as standalone repos under <a href="https://github.com/agent-sh">agent-sh</a> org - agentsys is the marketplace &amp; installer</em>
24
24
  </p>
25
25
 
@@ -45,7 +45,7 @@ AI models can write code. That's not the hard part anymore. The hard part is eve
45
45
 
46
46
  ## What This Is
47
47
 
48
- An agent orchestration system - 20 plugins, 49 agents (39 file-based + 10 role-based specialists in audit-project), and 41 skills that compose into structured pipelines for software development. Each plugin lives in its own standalone repo under the [agent-sh](https://github.com/agent-sh) org. agentsys is the marketplace and installer that ties them together.
48
+ An agent orchestration system - 24 plugins, 49 agents (39 file-based + 10 role-based specialists in audit-project), and 45 skills that compose into structured pipelines for software development. Each plugin lives in its own standalone repo under the [agent-sh](https://github.com/agent-sh) org. agentsys is the marketplace and installer that ties them together.
49
49
 
50
50
  Each agent has a single responsibility, a specific model assignment, and defined inputs/outputs. Pipelines enforce phase gates so agents can't skip steps. State persists across sessions so work survives interruptions.
51
51
 
@@ -118,6 +118,8 @@ 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
+ | [`/axiom`](#axiom) | Durable memory: load, query, list, bootstrap projects, and record approved knowledge |
122
+ | [`/banthis`](#banthis) | Durable negative memory: persist banned agent behaviors |
121
123
  | [`/agnix`](#agnix) | Lint agent configurations (399 rules) |
122
124
  | [`/ship`](#ship) | PR creation, CI monitoring, merge |
123
125
  | [`/deslop`](#deslop) | Clean AI slop patterns |
@@ -133,6 +135,8 @@ The investment shifts from model spend to pipeline design. Better prompts, riche
133
135
  | [`/web-ctl`](#web-ctl) | Browser automation for AI agents |
134
136
  | [`/release`](#release) | Versioned release with ecosystem detection |
135
137
  | [`/skillers`](#skillers) | Workflow pattern learning and automation |
138
+ | [`/skill-curator`](#skill-curator) | Create and improve reliable SKILL.md files |
139
+ | [`/system-prompt-curator`](#system-prompt-curator) | Create and improve autonomous agent system prompts |
136
140
  | [`/onboard`](#onboard) | Codebase orientation for newcomers |
137
141
  | [`/can-i-help`](#can-i-help) | Match contributor skills to project needs |
138
142
 
@@ -142,13 +146,13 @@ Each command works standalone. Together, they compose into end-to-end pipelines.
142
146
 
143
147
  ## Skills
144
148
 
145
- 41 skills included across the plugins:
149
+ 45 skills included across the plugins:
146
150
 
147
151
  | Category | Skills |
148
152
  |----------|--------|
149
153
  | **Workflow** | `discover-tasks`, `prepare-delivery`, `check-test-coverage`, `orchestrate-review`, `validate-delivery` |
150
154
  | **Message Queues** | `glide-mq-migrate-bee`, `glide-mq-migrate-bullmq`, `glide-mq` |
151
- | **Enhancement** | `enhance-agent-prompts`, `enhance-claude-memory`, `enhance-cross-file`, `enhance-docs`, `enhance-hooks`, `enhance-orchestrator`, `enhance-plugins`, `enhance-prompts`, `enhance-skills` |
155
+ | **Enhancement** | `enhance-agent-prompts`, `enhance-claude-memory`, `enhance-cross-file`, `enhance-docs`, `enhance-hooks`, `enhance-orchestrator`, `enhance-plugins`, `enhance-prompts`, `enhance-skills`, `skill-curator`, `system-prompt-curator` |
152
156
  | **Performance** | `baseline`, `benchmark`, `code-paths`, `investigation-logger`, `perf-analyzer`, `profile`, `theory-gatherer`, `theory-tester` |
153
157
  | **Cleanup** | `deslop`, `sync-docs` |
154
158
  | **Code Review** | `audit-project` |
@@ -157,6 +161,7 @@ Each command works standalone. Together, they compose into end-to-end pipelines.
157
161
  | **Web** | `web-auth`, `web-browse` |
158
162
  | **Release** | `release` |
159
163
  | **Analysis** | `drift-analysis`, `repo-intel` |
164
+ | **Memory** | `axiom`, `banthis` |
160
165
  | **Linting** | `agnix` |
161
166
 
162
167
  **External skill plugins** (standalone repos, installed separately):
@@ -175,8 +180,8 @@ Skills are the reusable implementation units. Agents invoke skills; commands orc
175
180
  |---------|--------------|
176
181
  | [The Approach](#the-approach) | Why it's built this way |
177
182
  | [Benchmarks](#benchmarks) | Sonnet + agentsys vs raw Opus |
178
- | [Commands](#commands) | All 20 commands overview |
179
- | [Skills](#skills) | 41 skills across plugins |
183
+ | [Commands](#commands) | All 24 commands overview |
184
+ | [Skills](#skills) | 45 skills across plugins |
180
185
  | [Skill-Only Plugins](#skill-only-plugins) | glide-mq and other non-command plugins |
181
186
  | [Command Details](#command-details) | Deep dive into each command |
182
187
  | [How Commands Work Together](#how-commands-work-together) | Standalone vs integrated |
@@ -307,6 +312,61 @@ Each piece runs independently - use `/prepare-delivery` alone to review before d
307
312
 
308
313
  ---
309
314
 
315
+ ### /axiom
316
+
317
+ **Purpose:** Durable, queryable memory for agents. Load the smallest useful context, query project or global knowledge, and propose new records without bloating `AGENTS.md`.
318
+
319
+ **[axiom](https://github.com/agent-sh/axiom)** is a standalone plugin and CLI. It creates a private `axiom-based` knowledge repo after explicit approval, keeps only thin context loaded automatically, and stores durable decisions, memories, preferences, and project notes in queryable files.
320
+
321
+ **What it does:**
322
+
323
+ | Command | Use |
324
+ |---------|-----|
325
+ | `axiom before-any --quiet` | Load global thin context at the start of meaningful work |
326
+ | `axiom before-any --project <slug>` | Load project context and create missing project scaffolds |
327
+ | `axiom query "<keyword>" --project <slug>` | Retrieve focused, source-backed project knowledge |
328
+ | `axiom list --topics --project <slug>` | Explore what knowledge exists before querying |
329
+ | `axiom record ...` | Propose a durable record through a temp clone, diff, and human approval |
330
+
331
+ **Usage:**
332
+
333
+ ```bash
334
+ /axiom before-any --quiet
335
+ /axiom before-any --project flowfabric
336
+ /axiom query "lease based" --project flowfabric
337
+ /axiom record --project flowfabric --kind decision "Lease-based claiming v2" "We switched because it gives stronger safety during restarts."
338
+ ```
339
+
340
+ **External tool:** Requires the [axiom CLI](https://github.com/agent-sh/axiom) from the plugin package.
341
+
342
+ ---
343
+
344
+ ### /banthis
345
+
346
+ **Purpose:** Durable negative memory for repeated agent mistakes. Turn a user's "stop doing this" correction into a persistent rule in `CLAUDE.md` or `AGENTS.md`.
347
+
348
+ **[banthis](https://github.com/agent-sh/banthis)** is a tiny standalone CLI plus skill. It maintains a managed banned-behaviors section, supports project or global targets, and includes an `init` meta-rule so agents learn when to invoke it automatically.
349
+
350
+ **What it does:**
351
+
352
+ | Command | Use |
353
+ |---------|-----|
354
+ | `banthis add "<title>" "<rule>"` | Add or update a banned behavior |
355
+ | `banthis list` | List current bans |
356
+ | `banthis show` | Print the managed section |
357
+ | `banthis remove "<title>"` | Remove a ban |
358
+ | `banthis init` | Install the meta-rule that teaches agents to call `banthis` |
359
+
360
+ **Usage:**
361
+
362
+ ```bash
363
+ /banthis "stop ending with vague optional follow-up offers"
364
+ banthis add "No vague endings" "Do not end with vague optional follow-up offers."
365
+ banthis init --file AGENTS.md
366
+ ```
367
+
368
+ ---
369
+
310
370
  ### /agnix
311
371
 
312
372
  **Purpose:** Lint agent configurations before they break your workflow. The first dedicated linter for AI agent configs.
@@ -953,6 +1013,36 @@ No per-turn overhead - it reads transcripts that Claude Code already saves.
953
1013
 
954
1014
  ---
955
1015
 
1016
+ ### /skill-curator
1017
+
1018
+ > Create and improve reliable `SKILL.md` files
1019
+
1020
+ ```bash
1021
+ /skill-curator "create a skill for reviewing background jobs"
1022
+ /skill-curator --improve path/to/SKILL.md --category review
1023
+ ```
1024
+
1025
+ The skill curator focuses on trigger quality, clear scope, router patterns, concrete `Skip unless:` gates, token budgets, and agnix-ready structure across Claude Code, Codex, OpenCode, Cursor, Kiro, and similar tools.
1026
+
1027
+ **Skill:** skill-curator
1028
+
1029
+ ---
1030
+
1031
+ ### /system-prompt-curator
1032
+
1033
+ > Create and improve autonomous coding-agent system prompts
1034
+
1035
+ ```bash
1036
+ /system-prompt-curator "GitHub issue resolver"
1037
+ /system-prompt-curator --improve path/to/prompt.md --for-orchestrator
1038
+ ```
1039
+
1040
+ The system prompt curator rewrites prompts around task-matched identity, phased workflow, explicit tools, evidence-based completion criteria, and realistic error recovery examples. It separates prompt guidance from harness-level checks that belong in code.
1041
+
1042
+ **Skill:** system-prompt-curator
1043
+
1044
+ ---
1045
+
956
1046
  ### /onboard
957
1047
 
958
1048
  **Purpose:** Get oriented in any codebase in under 3 minutes.
@@ -1237,7 +1327,7 @@ The system is built on research, not guesswork.
1237
1327
  - Instruction following reliability
1238
1328
 
1239
1329
  **Testing:**
1240
- - 3,507 tests passing
1330
+ - 3,513 tests passing
1241
1331
  - Drift-detect validated on 1,000+ repositories
1242
1332
  - E2E workflow testing across all commands
1243
1333
  - Cross-platform validation (Claude Code, OpenCode, Codex CLI, Cursor, Kiro)
@@ -19,6 +19,22 @@
19
19
  * script validates every zip entry before extracting it and rejects
20
20
  * absolute, UNC, and parent-traversal entries.
21
21
  *
22
+ * Verification chain (in order, each gate must pass to proceed):
23
+ * 1. TLS - https.get() pins the GitHub CA chain at the OS level.
24
+ * 2. SHA-256 sidecar - `<asset>.sha256` fetched from the same release and
25
+ * verified against the downloaded bytes. Closes basic tampering.
26
+ * 3. SLSA build provenance (optional / required) - `gh attestation verify`
27
+ * checks the Sigstore-signed attestation that agent-analyzer's release
28
+ * workflow publishes via `actions/attest-build-provenance`. This closes
29
+ * the "stolen release token uploads attacker binary + attacker sha256"
30
+ * hole that steps 1 and 2 cannot see.
31
+ *
32
+ * SLSA verification is SOFT by default: if `gh` is not on PATH we log
33
+ * a warning and proceed with just SHA-256. Set env var
34
+ * `AGENT_ANALYZER_REQUIRE_ATTESTATION=1` to make a missing `gh` a hard
35
+ * failure (recommended for CI). A present `gh` that reports a failed
36
+ * verification is ALWAYS a hard failure regardless of the env var.
37
+ *
22
38
  * @module lib/binary
23
39
  */
24
40
 
@@ -572,6 +588,117 @@ function findBinaryInScratch(scratch, binaryBaseName) {
572
588
  return null;
573
589
  }
574
590
 
591
+ // ---------------------------------------------------------------------------
592
+ // SLSA build provenance verification
593
+ // ---------------------------------------------------------------------------
594
+
595
+ /**
596
+ * Result of an attempted SLSA attestation verification.
597
+ * @typedef {Object} SlsaResult
598
+ * @property {'verified'|'skipped'|'failed'} status
599
+ * @property {string} [reason] human-readable detail (for skipped/failed)
600
+ * @property {string} [stderr] captured stderr from `gh` (failed only)
601
+ */
602
+
603
+ /**
604
+ * Default runner: spawn `gh attestation verify` and return the captured
605
+ * exit code, stdout, and stderr. Injectable for tests.
606
+ * @param {string} filePath
607
+ * @param {string} repo e.g. `agent-sh/agent-analyzer`
608
+ * @returns {{ status: number|null, stdout: string, stderr: string }}
609
+ */
610
+ function defaultGhRunner(filePath, repo) {
611
+ try {
612
+ const stdout = cp.execFileSync(
613
+ 'gh',
614
+ ['attestation', 'verify', filePath, '--repo', repo, '--format', 'json'],
615
+ {
616
+ encoding: 'utf8',
617
+ stdio: ['ignore', 'pipe', 'pipe'],
618
+ timeout: 60000,
619
+ windowsHide: true
620
+ }
621
+ );
622
+ return { status: 0, stdout: stdout || '', stderr: '' };
623
+ } catch (err) {
624
+ return {
625
+ status: typeof err.status === 'number' ? err.status : null,
626
+ stdout: err.stdout ? String(err.stdout) : '',
627
+ stderr: err.stderr ? String(err.stderr) : (err.message || '')
628
+ };
629
+ }
630
+ }
631
+
632
+ /**
633
+ * Returns true if the `gh` CLI is on PATH. Uses a short, non-privileged probe.
634
+ * @param {function} [runner] optional probe; defaults to real `gh --version`
635
+ * @returns {boolean}
636
+ */
637
+ function isGhAvailable(runner) {
638
+ if (typeof runner === 'function') {
639
+ try { return !!runner(); } catch (e) { return false; }
640
+ }
641
+ try {
642
+ cp.execFileSync('gh', ['--version'], {
643
+ stdio: 'ignore',
644
+ timeout: 5000,
645
+ windowsHide: true
646
+ });
647
+ return true;
648
+ } catch (e) {
649
+ return false;
650
+ }
651
+ }
652
+
653
+ /**
654
+ * Verify a downloaded asset's SLSA build provenance attestation via the
655
+ * GitHub CLI. The check is SOFT by default: if `gh` is not installed the
656
+ * function returns { status: 'skipped' } and the caller logs a warning. Set
657
+ * `requireAttestation` (or the env var) to make a missing `gh` a failure.
658
+ *
659
+ * A present `gh` that reports verification failure ALWAYS returns
660
+ * { status: 'failed' } regardless of `requireAttestation`; the caller is
661
+ * expected to abort in that case.
662
+ *
663
+ * @param {string} filePath absolute path to the downloaded archive
664
+ * @param {Object} [options]
665
+ * @param {string} [options.repo] e.g. `agent-sh/agent-analyzer`
666
+ * @param {boolean} [options.requireAttestation] defaults to env
667
+ * `AGENT_ANALYZER_REQUIRE_ATTESTATION === '1'`
668
+ * @param {function} [options.ghRunner] injectable runner for tests. Receives
669
+ * (filePath, repo), returns { status, stdout, stderr }.
670
+ * @param {function} [options.ghProbe] injectable gh-on-PATH probe for tests.
671
+ * @returns {SlsaResult}
672
+ */
673
+ function verifySlsaAttestation(filePath, options) {
674
+ const opts = options || {};
675
+ const repo = opts.repo || GITHUB_REPO;
676
+ const runner = typeof opts.ghRunner === 'function' ? opts.ghRunner : defaultGhRunner;
677
+ const require_ = typeof opts.requireAttestation === 'boolean'
678
+ ? opts.requireAttestation
679
+ : process.env.AGENT_ANALYZER_REQUIRE_ATTESTATION === '1';
680
+
681
+ const ghPresent = isGhAvailable(opts.ghProbe);
682
+ if (!ghPresent) {
683
+ const reason = '`gh` CLI not found on PATH';
684
+ if (require_) {
685
+ return { status: 'failed', reason: reason + ' (AGENT_ANALYZER_REQUIRE_ATTESTATION=1)' };
686
+ }
687
+ return { status: 'skipped', reason: reason };
688
+ }
689
+
690
+ const result = runner(filePath, repo);
691
+ if (result && result.status === 0) {
692
+ return { status: 'verified' };
693
+ }
694
+ return {
695
+ status: 'failed',
696
+ reason: 'gh attestation verify exited with status ' +
697
+ (result && result.status !== null ? result.status : 'unknown'),
698
+ stderr: (result && result.stderr) || ''
699
+ };
700
+ }
701
+
575
702
  // ---------------------------------------------------------------------------
576
703
  // Download + install
577
704
  // ---------------------------------------------------------------------------
@@ -582,11 +709,19 @@ function findBinaryInScratch(scratch, binaryBaseName) {
582
709
  * @param {Object} [options]
583
710
  * @param {boolean} [options.skipChecksum=false] LOCAL DEV ONLY. Skips the
584
711
  * `.sha256` sidecar fetch and verification. NEVER set this in production.
712
+ * @param {boolean} [options.skipAttestation=false] LOCAL DEV ONLY. Skips the
713
+ * SLSA attestation check entirely.
714
+ * @param {boolean} [options.requireAttestation] when true, a missing `gh`
715
+ * CLI becomes a hard failure. Defaults to
716
+ * `process.env.AGENT_ANALYZER_REQUIRE_ATTESTATION === '1'`.
717
+ * @param {function} [options.ghRunner] injectable runner for tests.
718
+ * @param {function} [options.ghProbe] injectable gh-on-PATH probe for tests.
585
719
  * @returns {Promise<string>} path to the installed binary
586
720
  */
587
721
  async function downloadBinary(ver, options) {
588
722
  const opts = options || {};
589
723
  const skipChecksum = opts.skipChecksum === true;
724
+ const skipAttestation = opts.skipAttestation === true;
590
725
 
591
726
  const platformKey = getPlatformKey();
592
727
  if (!platformKey) {
@@ -643,6 +778,47 @@ async function downloadBinary(ver, options) {
643
778
  verifySha256(buf, expected, filename);
644
779
  }
645
780
 
781
+ // --- 2b. Verify SLSA build provenance (optional / required) ------------
782
+ if (skipAttestation) {
783
+ process.stderr.write(
784
+ '[WARN] skipAttestation=true - SLSA verification disabled. ' +
785
+ 'This is LOCAL DEV ONLY and MUST NOT be used in production.\n'
786
+ );
787
+ } else {
788
+ // `gh attestation verify` needs a real file. Persist buf to a tmp path,
789
+ // verify, then drop it. Extraction continues from the in-memory buf so
790
+ // we don't need the tmp file beyond the verify call.
791
+ const attestDir = fs.mkdtempSync(path.join(os.tmpdir(), 'agent-analyzer-slsa-'));
792
+ const attestFile = path.join(attestDir, filename);
793
+ try {
794
+ fs.writeFileSync(attestFile, buf);
795
+ const result = verifySlsaAttestation(attestFile, {
796
+ repo: GITHUB_REPO,
797
+ requireAttestation: opts.requireAttestation,
798
+ ghRunner: opts.ghRunner,
799
+ ghProbe: opts.ghProbe
800
+ });
801
+ if (result.status === 'verified') {
802
+ process.stderr.write('[OK] SLSA attestation verified for ' + filename + '\n');
803
+ } else if (result.status === 'skipped') {
804
+ process.stderr.write(
805
+ '[WARN] SLSA attestation check skipped: ' + result.reason + '. ' +
806
+ 'Install the GitHub CLI (`gh`) to enable provenance verification. ' +
807
+ 'Set AGENT_ANALYZER_REQUIRE_ATTESTATION=1 to require it.\n'
808
+ );
809
+ } else {
810
+ // 'failed'
811
+ throw new Error(
812
+ 'SLSA attestation verification failed for ' + filename + ': ' +
813
+ result.reason + '. Refusing to execute binary.' +
814
+ (result.stderr ? '\n--- gh stderr ---\n' + result.stderr : '')
815
+ );
816
+ }
817
+ } finally {
818
+ rmrf(attestDir);
819
+ }
820
+ }
821
+
646
822
  // --- 3. Extract to isolated scratch dir + validate entries -------------
647
823
  const binaryBaseName = path.basename(binPath);
648
824
  let scratch;
@@ -707,7 +883,13 @@ async function ensureBinary(options) {
707
883
  }
708
884
  }
709
885
 
710
- return downloadBinary(targetVer, { skipChecksum: opts.skipChecksum === true });
886
+ return downloadBinary(targetVer, {
887
+ skipChecksum: opts.skipChecksum === true,
888
+ skipAttestation: opts.skipAttestation === true,
889
+ requireAttestation: opts.requireAttestation,
890
+ ghRunner: opts.ghRunner,
891
+ ghProbe: opts.ghProbe
892
+ });
711
893
  }
712
894
 
713
895
  /**
@@ -730,11 +912,27 @@ function ensureBinarySync(options) {
730
912
 
731
913
  const targetVer = (options && options.version) || ANALYZER_MIN_VERSION;
732
914
  const skipChecksum = !!(options && options.skipChecksum);
915
+ const skipAttestation = !!(options && options.skipAttestation);
916
+ // Forward requireAttestation when explicitly set (tri-state: undefined
917
+ // lets the child fall back to the AGENT_ANALYZER_REQUIRE_ATTESTATION
918
+ // env var, matching ensureBinary()). Without this forwarding, a sync
919
+ // caller with requireAttestation:true would silently lose the hard-fail
920
+ // intent when gh is missing.
921
+ const requireAttestation = options && typeof options.requireAttestation === 'boolean'
922
+ ? options.requireAttestation
923
+ : undefined;
733
924
  const selfPath = __filename;
925
+ const ensureOpts = {
926
+ version: targetVer,
927
+ skipChecksum: skipChecksum,
928
+ skipAttestation: skipAttestation
929
+ };
930
+ if (requireAttestation !== undefined) {
931
+ ensureOpts.requireAttestation = requireAttestation;
932
+ }
734
933
  const helperLines = [
735
934
  'var b = require(' + JSON.stringify(selfPath) + ');',
736
- 'b.ensureBinary({ version: ' + JSON.stringify(targetVer) +
737
- ', skipChecksum: ' + JSON.stringify(skipChecksum) + ' })',
935
+ 'b.ensureBinary(' + JSON.stringify(ensureOpts) + ')',
738
936
  ' .then(function(p) { process.stdout.write(p); })',
739
937
  ' .catch(function(e) { process.stderr.write(e.message); process.exit(1); });'
740
938
  ];
@@ -798,6 +996,8 @@ module.exports = {
798
996
  assertSafeArchiveEntry,
799
997
  assertInsideRoot,
800
998
  downloadBinary,
999
+ verifySlsaAttestation,
1000
+ isGhAvailable,
801
1001
  // Exported for tests only
802
1002
  extractTarGzToScratch,
803
1003
  extractZipToScratch,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentsys",
3
- "version": "5.11.0",
3
+ "version": "5.13.0",
4
4
  "description": "A modular runtime and orchestration system for AI agents - works with Claude Code, OpenCode, and Codex CLI",
5
5
  "main": "lib/platform/detect-platform.js",
6
6
  "type": "commonjs",
@@ -55,11 +55,15 @@ const CATEGORY_MAP = {
55
55
  'sync-docs': 'Cleanup',
56
56
  'drift-detect': 'Analysis',
57
57
  'repo-intel': 'Analysis',
58
+ 'axiom': 'Memory',
59
+ 'banthis': 'Memory',
58
60
  'learn': 'AI Collaboration',
59
61
  'agnix': 'Linting',
60
62
  'consult': 'AI Collaboration',
61
63
  'debate': 'AI Collaboration',
62
64
  'skillers': 'AI Collaboration',
65
+ 'skill-curator': 'Enhancement',
66
+ 'system-prompt-curator': 'Enhancement',
63
67
  'web-ctl': 'Web',
64
68
  'ship': 'Release',
65
69
  'onboard': 'Onboarding',
@@ -96,12 +100,16 @@ const STATIC_SKILLS = [
96
100
  { plugin: 'sync-docs', name: 'sync-docs' },
97
101
  { plugin: 'drift-detect', name: 'drift-analysis' },
98
102
  { plugin: 'repo-intel', name: 'repo-intel' },
103
+ { plugin: 'axiom', name: 'axiom' },
104
+ { plugin: 'banthis', name: 'banthis' },
99
105
  { plugin: 'consult', name: 'consult' },
100
106
  { plugin: 'debate', name: 'debate' },
101
107
  { plugin: 'learn', name: 'learn' },
102
108
  { plugin: 'web-ctl', name: 'web-auth' },
103
109
  { plugin: 'web-ctl', name: 'web-browse' },
104
110
  { plugin: 'ship', name: 'release' },
111
+ { plugin: 'skill-curator', name: 'skill-curator' },
112
+ { plugin: 'system-prompt-curator', name: 'system-prompt-curator' },
105
113
  { plugin: 'skillers', name: 'skillers-compact' },
106
114
  { plugin: 'skillers', name: 'recommend' },
107
115
  { plugin: 'onboard', name: 'onboard' },
@@ -126,12 +134,16 @@ const PURPOSE_MAP = {
126
134
  'drift-detect': 'Plan drift detection',
127
135
  'repo-intel': 'Unified static analysis',
128
136
  'sync-docs': 'Documentation sync',
137
+ 'axiom': 'Durable agent-native memory',
138
+ 'banthis': 'Durable negative behavior memory',
129
139
  'learn': 'Topic research and learning guides',
130
140
  'agnix': 'Agent config linting',
131
141
  'consult': 'Cross-tool AI consultation',
132
142
  'debate': 'Multi-perspective debate analysis',
133
143
  'web-ctl': 'Browser automation for AI agents',
134
144
  'skillers': 'Workflow pattern learning',
145
+ 'skill-curator': 'Skill authoring and review',
146
+ 'system-prompt-curator': 'System prompt curation',
135
147
  'onboard': 'Codebase onboarding',
136
148
  'can-i-help': 'Contributor guidance'
137
149
  };
@@ -181,10 +193,11 @@ function generateCommandsTable(commands) {
181
193
  // Curated display order (featured commands first, then alphabetical)
182
194
  const COMMAND_ORDER = [
183
195
  'next-task', 'prepare-delivery', 'gate-and-ship',
184
- 'agnix', 'ship', 'deslop', 'perf',
196
+ 'axiom', 'banthis', 'agnix', 'ship', 'deslop', 'perf',
185
197
  'drift-detect', 'audit-project', 'enhance',
186
198
  'repo-intel', 'sync-docs', 'learn', 'consult',
187
199
  'debate', 'web-ctl', 'release', 'skillers',
200
+ 'skill-curator', 'system-prompt-curator',
188
201
  'onboard', 'can-i-help'
189
202
  ];
190
203
 
@@ -193,6 +206,8 @@ function generateCommandsTable(commands) {
193
206
  'next-task': 'Task workflow: discovery, implementation, PR, merge',
194
207
  'prepare-delivery': 'Pre-ship quality gates: deslop, review, validation, docs sync',
195
208
  'gate-and-ship': 'Quality gates then ship (/prepare-delivery + /ship)',
209
+ 'axiom': 'Durable memory: load, query, list, bootstrap projects, and record approved knowledge',
210
+ 'banthis': 'Durable negative memory: persist banned agent behaviors',
196
211
  'agnix': 'Lint agent configurations (399 rules)',
197
212
  'ship': 'PR creation, CI monitoring, merge',
198
213
  'deslop': 'Clean AI slop patterns',
@@ -208,6 +223,8 @@ function generateCommandsTable(commands) {
208
223
  'web-ctl': 'Browser automation for AI agents',
209
224
  'release': 'Versioned release with ecosystem detection',
210
225
  'skillers': 'Workflow pattern learning and automation',
226
+ 'skill-curator': 'Create and improve reliable SKILL.md files',
227
+ 'system-prompt-curator': 'Create and improve autonomous agent system prompts',
211
228
  'onboard': 'Codebase orientation for newcomers',
212
229
  'can-i-help': 'Match contributor skills to project needs'
213
230
  };
@@ -267,7 +284,7 @@ function generateSkillsTable(skills) {
267
284
  const categoryOrder = [
268
285
  'Workflow', 'Message Queues', 'Enhancement', 'Performance', 'Cleanup',
269
286
  'Code Review', 'AI Collaboration', 'Onboarding',
270
- 'Web', 'Release', 'Analysis', 'Linting', 'Other'
287
+ 'Web', 'Release', 'Analysis', 'Memory', 'Linting', 'Other'
271
288
  ];
272
289
 
273
290
  const lines = [
@@ -289,28 +306,36 @@ function generateSkillsTable(skills) {
289
306
  * Generate the architecture table for CLAUDE.md / AGENTS.md.
290
307
  */
291
308
  function generateArchitectureTable(plugins, agents, skills) {
292
- const fileBasedAgents = agents.length;
293
- const totalAgents = fileBasedAgents + ROLE_BASED_AGENT_COUNT;
294
- const totalSkills = skills.length;
309
+ const effectivePlugins = plugins.length > 0 ? plugins : Object.keys(STATIC_PLUGIN_AGENT_COUNTS);
310
+ const effectiveSkills = skills.length > 0 ? skills : STATIC_SKILLS;
311
+ const fileBasedAgents = agents.length > 0 ? agents.length : STATIC_FILE_BASED_AGENT_COUNT;
312
+ const totalAgents = agents.length > 0
313
+ ? fileBasedAgents + ROLE_BASED_AGENT_COUNT
314
+ : STATIC_AGENT_COUNT;
315
+ const totalSkills = effectiveSkills.length;
295
316
 
296
317
  // Count agents per plugin (file-based only)
297
318
  const agentsByPlugin = {};
298
- for (const agent of agents) {
299
- agentsByPlugin[agent.plugin] = (agentsByPlugin[agent.plugin] || 0) + 1;
319
+ if (agents.length > 0) {
320
+ for (const agent of agents) {
321
+ agentsByPlugin[agent.plugin] = (agentsByPlugin[agent.plugin] || 0) + 1;
322
+ }
323
+ } else {
324
+ Object.assign(agentsByPlugin, STATIC_PLUGIN_AGENT_COUNTS);
300
325
  }
301
326
  // audit-project has role-based agents
302
327
  agentsByPlugin['audit-project'] = (agentsByPlugin['audit-project'] || 0) + ROLE_BASED_AGENT_COUNT;
303
328
 
304
329
  // Count skills per plugin
305
330
  const skillsByPlugin = {};
306
- for (const skill of skills) {
331
+ for (const skill of effectiveSkills) {
307
332
  skillsByPlugin[skill.plugin] = (skillsByPlugin[skill.plugin] || 0) + 1;
308
333
  }
309
334
 
310
335
  const lines = [
311
336
  '```',
312
337
  'lib/ \u2192 Shared library (vendored to plugins)',
313
- `plugins/ \u2192 ${plugins.length} plugins, ${totalAgents} agents (${fileBasedAgents} file-based + ${ROLE_BASED_AGENT_COUNT} role-based), ${totalSkills} skills`,
338
+ `plugins/ \u2192 ${effectivePlugins.length} plugins, ${totalAgents} agents (${fileBasedAgents} file-based + ${ROLE_BASED_AGENT_COUNT} role-based), ${totalSkills} skills`,
314
339
  'adapters/ \u2192 Platform adapters (opencode-plugin/, opencode/, codex/)',
315
340
  'checklists/ \u2192 Action checklists (9 files)',
316
341
  'bin/cli.js \u2192 npm CLI installer',
@@ -320,7 +345,7 @@ function generateArchitectureTable(plugins, agents, skills) {
320
345
  '|--------|--------|--------|---------|'
321
346
  ];
322
347
 
323
- for (const plugin of plugins) {
348
+ for (const plugin of effectivePlugins) {
324
349
  const agentCount = agentsByPlugin[plugin] || 0;
325
350
  const skillCount = skillsByPlugin[plugin] || 0;
326
351
  const purpose = PURPOSE_MAP[plugin] || '';
@@ -421,12 +446,16 @@ const STATIC_PLUGIN_AGENT_COUNTS = {
421
446
  'enhance': 8,
422
447
  'sync-docs': 1,
423
448
  'repo-intel': 1,
449
+ 'axiom': 0,
450
+ 'banthis': 0,
424
451
  'perf': 6,
425
452
  'learn': 1,
426
453
  'agnix': 1,
427
454
  'consult': 1,
428
455
  'debate': 1,
429
456
  'web-ctl': 1,
457
+ 'skill-curator': 0,
458
+ 'system-prompt-curator': 0,
430
459
  'skillers': 2,
431
460
  'onboard': 1,
432
461
  'can-i-help': 1,
@@ -1,5 +1,7 @@
1
1
  agnix
2
+ axiom
2
3
  audit-project
4
+ banthis
3
5
  can-i-help
4
6
  consult
5
7
  debate
@@ -14,7 +16,9 @@ perf
14
16
  prepare-delivery
15
17
  repo-intel
16
18
  ship
19
+ skill-curator
17
20
  skillers
18
21
  sync-docs
22
+ system-prompt-curator
19
23
  web-ctl
20
24
  zig-lsp
package/site/content.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "meta": {
3
3
  "title": "agentsys",
4
- "description": "A modular runtime and orchestration system for AI agents. 20 plugins, 49 agents, 41 skills - structured pipelines for Claude Code, OpenCode, Codex CLI, Cursor, and Kiro.",
4
+ "description": "A modular runtime and orchestration system for AI agents. 24 plugins, 49 agents, 45 skills - structured pipelines for Claude Code, OpenCode, Codex CLI, Cursor, and Kiro.",
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.11.0",
8
+ "version": "5.13.0",
9
9
  "author": "Avi Fenesh",
10
10
  "author_url": "https://github.com/avifenesh"
11
11
  },
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "stats": [
25
25
  {
26
- "value": "20",
26
+ "value": "24",
27
27
  "label": "Plugins",
28
28
  "suffix": ""
29
29
  },
@@ -33,7 +33,7 @@
33
33
  "suffix": ""
34
34
  },
35
35
  {
36
- "value": "41",
36
+ "value": "45",
37
37
  "label": "Skills",
38
38
  "suffix": ""
39
39
  },
@@ -43,7 +43,7 @@
43
43
  "suffix": ""
44
44
  },
45
45
  {
46
- "value": "3,507",
46
+ "value": "3,513",
47
47
  "label": "Tests",
48
48
  "suffix": ""
49
49
  },
@@ -109,6 +109,20 @@
109
109
  "example": "/gate-and-ship",
110
110
  "category": "workflow"
111
111
  },
112
+ {
113
+ "name": "/axiom",
114
+ "tagline": "Durable memory for agents",
115
+ "description": "Load thin context, query project or global knowledge, create missing project scaffolds, and propose human-approved records in a private axiom-based knowledge repo.",
116
+ "example": "/axiom before-any --project flowfabric",
117
+ "category": "workflow"
118
+ },
119
+ {
120
+ "name": "/banthis",
121
+ "tagline": "Durable negative memory",
122
+ "description": "Capture repeated agent mistakes as managed banned-behavior rules in CLAUDE.md or AGENTS.md. Includes a tiny CLI, skill, slash command, and init meta-rule.",
123
+ "example": "/banthis \"stop ending with vague offers\"",
124
+ "category": "workflow"
125
+ },
112
126
  {
113
127
  "name": "/agnix",
114
128
  "tagline": "Lint agent configs before they break",
@@ -214,6 +228,20 @@
214
228
  "example": "/skillers compact",
215
229
  "category": "learning"
216
230
  },
231
+ {
232
+ "name": "/skill-curator",
233
+ "tagline": "Design reliable SKILL.md files",
234
+ "description": "Create and improve cross-tool skills with strong activation triggers, tight scope, router patterns, Skip unless gates, and agnix-ready structure.",
235
+ "example": "/skill-curator --improve skills/example/SKILL.md",
236
+ "category": "maintenance"
237
+ },
238
+ {
239
+ "name": "/system-prompt-curator",
240
+ "tagline": "Design autonomous agent prompts",
241
+ "description": "Create and improve system prompts with task-matched identity, phased workflows, explicit tools, evidence-based completion criteria, and error recovery examples.",
242
+ "example": "/system-prompt-curator \"GitHub issue resolver\"",
243
+ "category": "maintenance"
244
+ },
217
245
  {
218
246
  "name": "/onboard",
219
247
  "tagline": "Oriented in any codebase in 3 minutes",
@@ -531,7 +559,7 @@
531
559
  ],
532
560
  "research": {
533
561
  "knowledge_base": "8,000 lines of curated documentation from Anthropic, OpenAI, Google, and Microsoft",
534
- "testing": "3,507 tests passing",
562
+ "testing": "3,513 tests passing",
535
563
  "drift_detect_repos": "1,000+ repositories validated",
536
564
  "token_reduction": "77% fewer tokens for drift-detect vs multi-agent approaches"
537
565
  },
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 &amp; Orchestration System</title>
7
- <meta name="description" content="A modular runtime and orchestration system for AI agents. 20 plugins, 49 agents, 41 skills - structured pipelines for Claude Code, OpenCode, Codex CLI, Cursor, and Kiro.">
7
+ <meta name="description" content="A modular runtime and orchestration system for AI agents. 24 plugins, 49 agents, 45 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. 20 plugins, 49 agents, 41 skills.">
12
+ <meta property="og:description" content="A modular runtime and orchestration system for AI agents. 24 plugins, 49 agents, 45 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 plugins, 49 agents, 41 skills.">
20
+ <meta name="twitter:description" content="AI workflow automation. 24 plugins, 49 agents, 45 skills.">
21
21
  <meta name="twitter:image" content="https://agent-sh.github.io/agentsys/assets/logo.png">
22
22
 
23
23
  <!-- Content Security Policy -->
@@ -107,14 +107,14 @@
107
107
  <div class="hero__inner">
108
108
  <div class="hero__content">
109
109
  <div class="hero__badge anim-fade-in" data-delay="100">
110
- 20 plugins &middot; 49 agents &middot; 41 skills
110
+ 24 plugins &middot; 49 agents &middot; 45 skills
111
111
  </div>
112
112
  <h1 class="hero__title anim-fade-up" id="hero-title" data-delay="200">
113
113
  A modular <span class="text-gradient">runtime and orchestration system</span><br>
114
114
  for AI agents.
115
115
  </h1>
116
116
  <p class="hero__subtitle anim-fade-up" data-delay="350">
117
- Structured pipelines, gated phases, specialized agents. Works with Claude Code, OpenCode, Codex CLI, Cursor, and Kiro. 3,507 tests. Production-grade.
117
+ Structured pipelines, gated phases, specialized agents. Works with Claude Code, OpenCode, Codex CLI, Cursor, and Kiro. 3,513 tests. Production-grade.
118
118
  </p>
119
119
  <div class="hero__ctas anim-fade-up" data-delay="500">
120
120
  <a href="#install" class="btn btn--primary">Get Started</a>
@@ -156,7 +156,7 @@
156
156
  <section class="stats" id="stats" aria-label="Project statistics">
157
157
  <div class="stats__inner">
158
158
  <div class="stats__item">
159
- <span class="stats__number" aria-live="polite" data-target="20">0</span>
159
+ <span class="stats__number" aria-live="polite" data-target="24">0</span>
160
160
  <span class="stats__label">Plugins</span>
161
161
  </div>
162
162
  <div class="stats__item">
@@ -164,11 +164,11 @@
164
164
  <span class="stats__label">Agents</span>
165
165
  </div>
166
166
  <div class="stats__item">
167
- <span class="stats__number" aria-live="polite" data-target="41">0</span>
167
+ <span class="stats__number" aria-live="polite" data-target="45">0</span>
168
168
  <span class="stats__label">Skills</span>
169
169
  </div>
170
170
  <div class="stats__item">
171
- <span class="stats__number" aria-live="polite" data-target="3507">0</span>
171
+ <span class="stats__number" aria-live="polite" data-target="3513">0</span>
172
172
  <span class="stats__label">Tests Passing</span>
173
173
  </div>
174
174
  </div>
@@ -177,7 +177,7 @@
177
177
  <!-- ===== COMMANDS ===== -->
178
178
  <section class="commands" id="commands" aria-labelledby="commands-title">
179
179
  <div class="commands__inner">
180
- <h2 class="commands__title anim-fade-up" id="commands-title">20 Commands. One Toolkit.</h2>
180
+ <h2 class="commands__title anim-fade-up" id="commands-title">24 Commands. One Toolkit.</h2>
181
181
  <p class="commands__subtitle anim-fade-up" data-delay="100">Each works standalone. Together, they automate everything.</p>
182
182
 
183
183
  <div class="commands__tabs anim-fade-up" data-delay="200">
@@ -202,6 +202,10 @@
202
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
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
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>
205
+ <button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-20" id="tab-20" tabindex="-1" data-index="20">/axiom</button>
206
+ <button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-21" id="tab-21" tabindex="-1" data-index="21">/banthis</button>
207
+ <button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-22" id="tab-22" tabindex="-1" data-index="22">/skill-curator</button>
208
+ <button class="tabs__tab" role="tab" aria-selected="false" aria-controls="tab-panel-23" id="tab-23" tabindex="-1" data-index="23">/system-prompt-curator</button>
205
209
  </div>
206
210
 
207
211
  <!-- Tab panels -->
@@ -584,6 +588,82 @@
584
588
  <span class="code-prompt">$</span> /can-i-help --skills=typescript <span class="code-comment"># Match specific skills</span></code></pre>
585
589
  </div>
586
590
  </div>
591
+
592
+ <div class="tabs__panel" role="tabpanel" id="tab-panel-20" aria-labelledby="tab-20" hidden>
593
+ <h3 class="tabs__panel-name">/axiom</h3>
594
+ <p class="tabs__panel-tagline">Durable memory for agents</p>
595
+ <ul class="tabs__panel-features">
596
+ <li>Loads thin global and project context</li>
597
+ <li>Queries durable decisions, memories, and preferences</li>
598
+ <li>Creates missing project scaffolds automatically</li>
599
+ <li>Records only through a diff and human approval</li>
600
+ </ul>
601
+ <div class="code-block">
602
+ <button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/axiom before-any --project flowfabric
603
+ /axiom query &quot;lease based&quot; --project flowfabric">
604
+ <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>
605
+ </button>
606
+ <pre><code><span class="code-prompt">$</span> /axiom before-any --project flowfabric
607
+ <span class="code-prompt">$</span> /axiom query "lease based" --project flowfabric</code></pre>
608
+ </div>
609
+ </div>
610
+
611
+ <div class="tabs__panel" role="tabpanel" id="tab-panel-21" aria-labelledby="tab-21" hidden>
612
+ <h3 class="tabs__panel-name">/banthis</h3>
613
+ <p class="tabs__panel-tagline">Durable negative memory</p>
614
+ <ul class="tabs__panel-features">
615
+ <li>Persists banned agent behaviors into CLAUDE.md or AGENTS.md</li>
616
+ <li>Maintains a managed section with add, list, show, remove</li>
617
+ <li>Includes init meta-rule so agents invoke it automatically</li>
618
+ <li>Works project-local or global with explicit flags</li>
619
+ </ul>
620
+ <div class="code-block">
621
+ <button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/banthis &quot;stop ending with vague optional offers&quot;
622
+ banthis list">
623
+ <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>
624
+ </button>
625
+ <pre><code><span class="code-prompt">$</span> /banthis "stop ending with vague optional offers"
626
+ <span class="code-prompt">$</span> banthis list</code></pre>
627
+ </div>
628
+ </div>
629
+
630
+ <div class="tabs__panel" role="tabpanel" id="tab-panel-22" aria-labelledby="tab-22" hidden>
631
+ <h3 class="tabs__panel-name">/skill-curator</h3>
632
+ <p class="tabs__panel-tagline">Design reliable SKILL.md files</p>
633
+ <ul class="tabs__panel-features">
634
+ <li>Writes strong trigger descriptions and tight scopes</li>
635
+ <li>Uses router patterns for broad skills</li>
636
+ <li>Adds concrete Skip unless gates for pattern rules</li>
637
+ <li>Keeps skills cross-tool and agnix-ready</li>
638
+ </ul>
639
+ <div class="code-block">
640
+ <button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/skill-curator &quot;create a skill for reviewing background jobs&quot;
641
+ /skill-curator --improve path/to/SKILL.md">
642
+ <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>
643
+ </button>
644
+ <pre><code><span class="code-prompt">$</span> /skill-curator "create a skill for reviewing background jobs"
645
+ <span class="code-prompt">$</span> /skill-curator --improve path/to/SKILL.md</code></pre>
646
+ </div>
647
+ </div>
648
+
649
+ <div class="tabs__panel" role="tabpanel" id="tab-panel-23" aria-labelledby="tab-23" hidden>
650
+ <h3 class="tabs__panel-name">/system-prompt-curator</h3>
651
+ <p class="tabs__panel-tagline">Design autonomous agent prompts</p>
652
+ <ul class="tabs__panel-features">
653
+ <li>Matches identity to task and tool surface</li>
654
+ <li>Builds phased workflows with evidence gates</li>
655
+ <li>Includes realistic error recovery examples</li>
656
+ <li>Separates prompt guidance from harness checks</li>
657
+ </ul>
658
+ <div class="code-block">
659
+ <button class="code-block__copy" aria-label="Copy code to clipboard" data-code="/system-prompt-curator &quot;GitHub issue resolver&quot;
660
+ /system-prompt-curator --improve prompt.md --for-orchestrator">
661
+ <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>
662
+ </button>
663
+ <pre><code><span class="code-prompt">$</span> /system-prompt-curator "GitHub issue resolver"
664
+ <span class="code-prompt">$</span> /system-prompt-curator --improve prompt.md --for-orchestrator</code></pre>
665
+ </div>
666
+ </div>
587
667
  </div>
588
668
  </div>
589
669
  </section>
@@ -662,7 +742,7 @@
662
742
  <!-- ===== AGENTS & SKILLS ===== -->
663
743
  <section class="agents-skills" id="agents-skills" aria-labelledby="as-title">
664
744
  <div class="agents-skills__inner">
665
- <h2 class="agents-skills__title anim-fade-up" id="as-title">49 Agents. 41 Skills.</h2>
745
+ <h2 class="agents-skills__title anim-fade-up" id="as-title">49 Agents. 45 Skills.</h2>
666
746
  <p class="agents-skills__subtitle anim-fade-up" data-delay="100">Right model for the task. Opus reasons. Sonnet validates. Haiku executes.</p>
667
747
 
668
748
  <!-- Agent tier tabs -->
@@ -749,7 +829,7 @@
749
829
  </div>
750
830
 
751
831
  <!-- Skills grid -->
752
- <h3 class="agents-skills__skills-title anim-fade-up" data-delay="300">41 Skills across 19 Plugins</h3>
832
+ <h3 class="agents-skills__skills-title anim-fade-up" data-delay="300">45 Skills across 24 Plugins</h3>
753
833
  <div class="skills-grid anim-fade-up" data-delay="350">
754
834
  <div class="skill-group">
755
835
  <span class="skill-group__label">prepare-delivery</span>
@@ -815,9 +895,13 @@
815
895
  <span class="skill-card">repo-intel</span>
816
896
  <span class="skill-card">sync-docs</span>
817
897
  <span class="skill-card">learn</span>
898
+ <span class="skill-card">axiom</span>
899
+ <span class="skill-card">banthis</span>
818
900
  <span class="skill-card">consult</span>
819
901
  <span class="skill-card">debate</span>
820
902
  <span class="skill-card">release</span>
903
+ <span class="skill-card">skill-curator</span>
904
+ <span class="skill-card">system-prompt-curator</span>
821
905
  <span class="skill-card">onboard</span>
822
906
  <span class="skill-card">can-i-help</span>
823
907
  <span class="skill-card">audit-project</span>
package/site/ux-spec.md CHANGED
@@ -94,7 +94,7 @@ Scroll order with rationale for each section. All sections are full-width, alter
94
94
  - **Single column on mobile:** Text above, terminal below. Stack with 48px gap.
95
95
 
96
96
  ### Left Column Content
97
- 1. **Badge** (top, above title): Small pill showing version or "20 plugins . 49 agents . 41 skills"
97
+ 1. **Badge** (top, above title): Small pill showing version or "24 plugins . 49 agents . 45 skills"
98
98
  - Background: `rgba(99, 102, 241, 0.12)`, border: `1px solid rgba(99, 102, 241, 0.25)`, border-radius: 9999px
99
99
  - Font: 13px, font-weight 500, primary accent color
100
100
  - Padding: 4px 14px
@@ -104,7 +104,7 @@ Scroll order with rationale for each section. All sections are full-width, alter
104
104
  - Color: white
105
105
  - "entire dev workflow" portion highlighted with a subtle gradient text (primary-to-secondary accent via `background-clip: text`)
106
106
 
107
- 3. **Subtitle:** "20 plugins, 49 agents, 41 skills. From task selection to merged PR. Works with Claude Code, OpenCode, Codex CLI, Cursor, and Kiro."
107
+ 3. **Subtitle:** "24 plugins, 49 agents, 45 skills. From task selection to merged PR. Works with Claude Code, OpenCode, Codex CLI, Cursor, and Kiro."
108
108
  - Font: 18px on desktop, 16px on mobile, font-weight 400, line-height 1.6
109
109
  - Color: `rgba(255, 255, 255, 0.6)`
110
110
  - Max-width: 520px
@@ -229,7 +229,7 @@ Done. Task to merged PR in 12 minutes.
229
229
  | 1 | 20 | Plugins |
230
230
  | 2 | 49 | Agents |
231
231
  | 3 | 41 | Skills |
232
- | 4 | 3,507 | Tests Passing |
232
+ | 4 | 3,513 | Tests Passing |
233
233
 
234
234
  ### Styling
235
235
  - **Number:** 48px, font-weight 700, white, `font-variant-numeric: tabular-nums` (prevents layout shift during count)
@@ -265,7 +265,7 @@ Done. Task to merged PR in 12 minutes.
265
265
  - On mobile: naturally scrollable, slight gradient fade on right edge to indicate scrollability (20px gradient from transparent to section background)
266
266
 
267
267
  ### Tab Order
268
- `/next-task`, `/ship`, `/deslop`, `/perf`, `/drift-detect`, `/audit-project`, `/enhance`, `/repo-intel`, `/sync-docs`, `/learn`, `/agnix`
268
+ `/next-task`, `/ship`, `/deslop`, `/perf`, `/drift-detect`, `/audit-project`, `/enhance`, `/repo-intel`, `/sync-docs`, `/axiom`, `/learn`, `/agnix`
269
269
 
270
270
  (Most impactful first: the full workflow command, then the shipper, then individual tools)
271
271
 
@@ -650,13 +650,13 @@ This disables:
650
650
  ### Head Content
651
651
  ```html
652
652
  <title>AgentSys - Agent Runtime &amp; Orchestration System</title>
653
- <meta name="description" content="A modular runtime and orchestration system for AI agents. 20 plugins, 49 agents, 41 skills - structured pipelines for Claude Code, OpenCode, Codex CLI, Cursor, and Kiro.">
653
+ <meta name="description" content="A modular runtime and orchestration system for AI agents. 24 plugins, 49 agents, 45 skills - structured pipelines for Claude Code, OpenCode, Codex CLI, Cursor, and Kiro.">
654
654
  <meta name="viewport" content="width=device-width, initial-scale=1">
655
655
  <meta name="theme-color" content="#0a0a0f">
656
656
 
657
657
  <!-- Open Graph -->
658
658
  <meta property="og:title" content="AgentSys">
659
- <meta property="og:description" content="AI workflow automation. 20 plugins, 49 agents, 41 skills. Task to merged PR.">
659
+ <meta property="og:description" content="AI workflow automation. 24 plugins, 49 agents, 45 skills. Task to merged PR.">
660
660
  <meta property="og:image" content="https://agent-sh.github.io/agentsys/assets/og-image.png">
661
661
  <meta property="og:url" content="https://agent-sh.github.io/agentsys/">
662
662
  <meta property="og:type" content="website">
@@ -664,7 +664,7 @@ This disables:
664
664
  <!-- Twitter Card -->
665
665
  <meta name="twitter:card" content="summary_large_image">
666
666
  <meta name="twitter:title" content="AgentSys">
667
- <meta name="twitter:description" content="AI workflow automation. 20 plugins, 49 agents, 41 skills.">
667
+ <meta name="twitter:description" content="AI workflow automation. 24 plugins, 49 agents, 45 skills.">
668
668
  <meta name="twitter:image" content="https://agent-sh.github.io/agentsys/assets/og-image.png">
669
669
  ```
670
670