@hybridlabor-api/aos 4.5.2 → 4.6.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.
- package/.agents/rules/antigravity-rtk-rules.md +32 -0
- package/.claude/agents/architect.md +0 -1
- package/.claude/agents/database-reviewer.md +3 -102
- package/.claude/agents/go-build-resolver.md +3 -105
- package/.claude/agents/godmode-engineering.md +1 -2
- package/.claude/agents/godmode-media-eventtech.md +1 -2
- package/.claude/agents/godmode-shipping.md +2 -3
- package/.claude/agents/godmode-ui-ux.md +2 -3
- package/.claude/agents/opensource-forker.md +4 -210
- package/.claude/agents/opensource-sanitizer.md +3 -199
- package/.claude/agents/reviewer.md +1 -2
- package/.claude/agents/security-reviewer.md +3 -119
- package/.claude/agents/silent-failure-hunter.md +3 -61
- package/.claude/agents/techlead.md +1 -2
- package/.opencode/agents/architect.md +1 -0
- package/.opencode/agents/database-reviewer.md +10 -0
- package/.opencode/agents/go-build-resolver.md +10 -0
- package/.opencode/agents/godmode-engineering.md +1 -0
- package/.opencode/agents/godmode-media-eventtech.md +1 -0
- package/.opencode/agents/godmode-shipping.md +2 -1
- package/.opencode/agents/godmode-ui-ux.md +1 -0
- package/.opencode/agents/opensource-forker.md +10 -0
- package/.opencode/agents/opensource-sanitizer.md +10 -0
- package/.opencode/agents/reviewer.md +1 -0
- package/.opencode/agents/security-reviewer.md +10 -0
- package/.opencode/agents/silent-failure-hunter.md +10 -0
- package/.opencode/agents/techlead.md +1 -0
- package/docs/email/aos-4.5.0-update-banner.html +211 -0
- package/installer.js +157 -25
- package/package.json +1 -1
- package/skills/global_config/aos-project-init/SKILL.md +2 -0
- package/skills/global_config/subagent-setup/SKILL.md +71 -0
- package/skills/global_config/subagent-setup/scripts/setup-subagents.mjs +185 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
BDB Agent OS -- v4.5.0 update email banner.
|
|
3
|
+
Table-based, inline-styled for email client compatibility (Outlook/Gmail/Apple Mail).
|
|
4
|
+
Width: 600px (standard email content width). Drop this <table> straight into a mail body.
|
|
5
|
+
Layout modeled on a "Company Update" newsletter template: light header banner with a
|
|
6
|
+
big centered mark + issue line, then alternating icon-left/icon-right feature rows
|
|
7
|
+
(git-graph / brain / box / message-square-heart, all Lucide). Icons are static inline
|
|
8
|
+
SVG -- no animation, since real email clients strip <script> and don't reliably run
|
|
9
|
+
CSS keyframes across clients.
|
|
10
|
+
-->
|
|
11
|
+
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" align="center" style="width:600px; max-width:100%; background-color:#ffffff; border:1px solid #e5e5e5; border-radius:8px; overflow:hidden; font-family:Helvetica, Arial, sans-serif;">
|
|
12
|
+
|
|
13
|
+
<!-- ============ Header banner ============ -->
|
|
14
|
+
<tr>
|
|
15
|
+
<td align="center" style="background-color:#f3e8ff; padding:24px 24px 18px 24px;">
|
|
16
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="52" height="52" style="display:block; margin:0 auto;">
|
|
17
|
+
<g transform="translate(70, 68)" fill="#0a0a0a">
|
|
18
|
+
<path d="M181.63.05c101.39-2.47,184.56,80.09,190.14,179.93,5.53,99.03-66.16,185.42-165.11,195.46-87.39,8.86-171.1-45.56-197.67-128.96C-28.74,128.03,56.78,3.1,181.63.05h0ZM177.5,21.3C69.09,25.31-7.16,129.62,21.76,234.52c18.72,67.88,81.56,116.7,151.53,121.32,106.21,7.03,195.6-81.63,179.68-189.06-12.54-84.65-89.81-148.66-175.47-145.49h0Z"/>
|
|
19
|
+
<path d="M147.69,120.05c12.04.36,24.64-.72,36.62-.07,24.29,1.32,41.37,20.13,42.91,43.99-.69,16.35.57,33.42-.28,49.69-1.31,25.42-18.55,43.75-44.02,45.64-9.59.72-20.14.69-29.78.84-4.97.08-9.9.68-10.37-5.66s.43-9.41.34-14.03c12.65-11.84,14.75-31.17,4.75-45.41-.63-.9-2.26-2.34-2.62-3.17s-.46-12.58-.26-14.37,1.1-3.52,1.46-5.16c1.21-5.42,1.06-11.26-.39-16.62-.41-1.54-1.48-3.56-1.63-4.99-.47-4.28-.14-9.67-.26-14.08-.11-3.56-.84-8.43-.57-11.86s1.32-4.35,4.08-4.75h0ZM162.03,135.5c-4.32.73-3.34,6.65-3.26,10.01.17,6.21.91,12.51,1.13,18.73.83,23.13-1.03,45.49-1.41,68.42-.07,3.93-1.27,10.87,4.01,11.46,10.36-.51,21.39,1.89,31.38-1.45,13.74-4.59,20.43-17.79,19.81-31.81-1.77-14.46-1.19-29.09-1.94-43.58-.52-10.12-3.97-20.33-12.44-26.46-10.8-7.82-24.82-4.88-37.29-5.34h0Z"/>
|
|
20
|
+
<path d="M232.66,132.46c9.53.36,19.74-.72,29.19-.08,22.64,1.52,33.92,28.58,21.93,47.05-1.49,2.3-4.32,4.47-3.85,7.42.47,2.95,5.64,6.21,7.42,8.3,11.88,13.96,8.41,35.69-6.91,45.49-7.85,5.02-14.69,4.43-23.56,4.86-7.67.37-16.24,1.05-23.91.66-1.66-.08-2.98-.73-3.68-2.32s-.52-7.28-.43-9.26c.36-6.63,3.52-13.04,3.89-20.39.58-11.38-.1-23.12-.3-34.49-.1-5.68.32-11.44-.3-17.08-.41-3.82-1.64-7.52-1.89-11.35-.25-3.85-.18-7.99-.26-11.88-.07-2.84-1.26-6.03,2.68-6.95h-.01ZM243.68,144.59c-3.41.77-2.55,6.7-2.66,9.2-.28,6.08-.58,12.36-.29,18.47.1,2.06.36,6.36.9,8.21.54,1.85.84,1.79,1.66,2.19,1.66.83,8-.68,10.26-.88,4.22-.39,8.12.03,12.28-1.24,16.76-5.12,16.53-26.53,1.01-33.02-15.52-6.5-13.5-2.7-18.82-2.98-5.31-.28-3.37-.17-4.36.06h.03ZM243.68,194.52c-3.49.79-2.58,8.66-2.68,11.39-.26,7.05-1.06,17.41.07,24.21,1.13,6.8,2.63,3.38,5.32,3.26,3.96-.19,8.36-1.32,12.4-1.67,5.85-.5,10.68.22,16.24-2.25,13.6-6.04,12.62-25.27-.46-31.46-5.63-2.66-9.89-1.97-15.78-2.43-3.57-.28-7.2-.92-10.76-1.1-1.12-.06-3.35-.17-4.36.06h0Z"/>
|
|
21
|
+
<path d="M90.59,133.03c8.84-.44,25.24-1.08,33.23,1.92,18.07,6.77,23.99,29.96,13.56,45.7-1.6,2.41-4.52,4.44-3.28,7.75.69,1.85,5.41,5.42,7.03,7.31,11.86,13.82,8.77,35.23-6.25,45.33-15.02,10.1-23.31,5.27-34.44,5.56-4.12.11-10.36.88-14.32.28-2.22-.34-3.45-2.79-3.48-4.83-.11-7.84.77-15.89,1.1-23.71.99-23.09,1.31-45.33.57-68.43-.14-4.15-1.05-9.79-.57-13.79.43-3.52,4.1-2.95,6.84-3.09h0ZM98.3,145.15c-1.71.29-2.98,1.7-3.21,3.41-.15,1.19-.23,3.13-.3,4.39-.39,8.01-.9,19.53.58,27.27.23,1.24.57,2.55,1.82,3.15,1.81.84,7.03-.55,9.32-.76,3.3-.3,6.62-.1,9.89-.59,21.2-3.21,21.02-29.7,1.28-34.86-4.36-1.14-13.16-1.92-17.79-2.07-.55-.01-1.03-.03-1.59.07h0ZM98.03,195.09c-4.25.88-2.46,6.76-3.24,9.72-.06,7.92-.55,15.86,0,23.75.22,3.21.77,5.75,4.57,5.67,3.82-.08,8.46-1.32,12.41-1.67,5.55-.48,11.21.12,16.48-2,14.62-5.88,13.53-26.13-.52-32.17-5.13-2.21-8.25-1.59-13.48-1.97-4.69-.34-9.7-1.23-14.35-1.38-.62-.01-1.26-.07-1.86.06h-.01Z"/>
|
|
22
|
+
</g>
|
|
23
|
+
</svg>
|
|
24
|
+
<div style="font-size:30px; font-weight:800; letter-spacing:-0.5px; color:#0a0a0a; padding-top:12px;">BDB AGENT OS</div>
|
|
25
|
+
<div style="font-size:13px; font-weight:700; letter-spacing:1.5px; text-transform:uppercase; color:#7c1fa0; padding-top:6px;">Update · AOS v4.5.0</div>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
|
|
29
|
+
<tr>
|
|
30
|
+
<td align="center" style="padding:20px 32px 8px 32px;">
|
|
31
|
+
<span style="font-size:14px; line-height:1.5; color:#4a4a4a;">AOS Skills & Tools for Agents and Humans.</span>
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
<tr>
|
|
35
|
+
<td align="center" style="padding:0 40px 32px 40px;">
|
|
36
|
+
<span style="font-size:12.5px; line-height:1.6; color:#6b6b6b;">
|
|
37
|
+
Countless fixes, plus a loop-and-graph engineering pipeline that actually delivers.
|
|
38
|
+
</span>
|
|
39
|
+
</td>
|
|
40
|
+
</tr>
|
|
41
|
+
|
|
42
|
+
<!-- ============ Feature 01 -- icon RIGHT (GitGraph / multi-agent pipeline) ============ -->
|
|
43
|
+
<tr>
|
|
44
|
+
<td style="padding:12px 40px 0 40px;">
|
|
45
|
+
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
46
|
+
<tr>
|
|
47
|
+
<td valign="middle">
|
|
48
|
+
<div style="font-size:17px; font-weight:700; color:#0a0a0a; line-height:1.3;">Multi-Agent Graph Pipeline & Smarter Setup</div>
|
|
49
|
+
<div style="font-size:13px; color:#525252; line-height:1.65; padding-top:9px;">
|
|
50
|
+
The real headline this cycle: a sharper dispatcher graph routes every task straight to the
|
|
51
|
+
right domain — Backend, UI/UX, Show Control & Media, Hardware & PCB, or the Remote Gateway —
|
|
52
|
+
through <code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">/startcycle</code>,
|
|
53
|
+
<code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">/startcycle-graph</code> and
|
|
54
|
+
<code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">/startcycle-graph-user</code>.
|
|
55
|
+
A new <code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">ask-tim</code> skill router
|
|
56
|
+
helps you pick the right one, and <code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">aos-setup</code> /
|
|
57
|
+
<code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">aos-project-init</code> make
|
|
58
|
+
environment injection noticeably smoother.
|
|
59
|
+
</div>
|
|
60
|
+
</td>
|
|
61
|
+
<td width="112" align="center" valign="middle" style="padding-left:20px;">
|
|
62
|
+
<table role="presentation" width="100" height="100" cellpadding="0" cellspacing="0" border="0" style="background-color:#f3e8ff; border-radius:20px; box-shadow:6px 6px 0 0 #ece2fb;">
|
|
63
|
+
<tr>
|
|
64
|
+
<td align="center" valign="middle">
|
|
65
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#51116F" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
66
|
+
<circle cx="5" cy="6" r="3" />
|
|
67
|
+
<path d="M5 9v6" />
|
|
68
|
+
<circle cx="5" cy="18" r="3" />
|
|
69
|
+
<path d="M12 3v18" />
|
|
70
|
+
<circle cx="19" cy="6" r="3" />
|
|
71
|
+
<path d="M16 15.7A9 9 0 0 0 19 9" />
|
|
72
|
+
</svg>
|
|
73
|
+
</td>
|
|
74
|
+
</tr>
|
|
75
|
+
</table>
|
|
76
|
+
</td>
|
|
77
|
+
</tr>
|
|
78
|
+
</table>
|
|
79
|
+
</td>
|
|
80
|
+
</tr>
|
|
81
|
+
|
|
82
|
+
<!-- ============ Feature 02 -- icon LEFT (Brain / memB / OpenWiki) ============ -->
|
|
83
|
+
<tr>
|
|
84
|
+
<td style="padding:52px 40px 0 40px;">
|
|
85
|
+
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
86
|
+
<tr>
|
|
87
|
+
<td width="112" align="center" valign="middle" style="padding-right:20px;">
|
|
88
|
+
<table role="presentation" width="100" height="100" cellpadding="0" cellspacing="0" border="0" style="background-color:#f3e8ff; border-radius:20px; box-shadow:-6px 6px 0 0 #ece2fb;">
|
|
89
|
+
<tr>
|
|
90
|
+
<td align="center" valign="middle">
|
|
91
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#51116F" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
92
|
+
<path d="M12 18V5" />
|
|
93
|
+
<path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4" />
|
|
94
|
+
<path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5" />
|
|
95
|
+
<path d="M17.997 5.125a4 4 0 0 1 2.526 5.77" />
|
|
96
|
+
<path d="M18 18a4 4 0 0 0 2-7.464" />
|
|
97
|
+
<path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517" />
|
|
98
|
+
<path d="M6 18a4 4 0 0 1-2-7.464" />
|
|
99
|
+
<path d="M6.003 5.125a4 4 0 0 0-2.526 5.77" />
|
|
100
|
+
</svg>
|
|
101
|
+
</td>
|
|
102
|
+
</tr>
|
|
103
|
+
</table>
|
|
104
|
+
</td>
|
|
105
|
+
<td valign="middle">
|
|
106
|
+
<div style="font-size:17px; font-weight:700; color:#0a0a0a; line-height:1.3;">AO, memB & the Documentation Engine</div>
|
|
107
|
+
<div style="font-size:13px; color:#525252; line-height:1.65; padding-top:9px;">
|
|
108
|
+
The agent ecosystem keeps evolving: memB's vector memory and OpenWiki's auto-generated,
|
|
109
|
+
evidence-grounded docs both got real upgrades this cycle — multi-provider LLM support and
|
|
110
|
+
a live background visualizer.
|
|
111
|
+
</div>
|
|
112
|
+
</td>
|
|
113
|
+
</tr>
|
|
114
|
+
</table>
|
|
115
|
+
</td>
|
|
116
|
+
</tr>
|
|
117
|
+
|
|
118
|
+
<!-- ============ Feature 03 -- icon RIGHT (Box / design canvas) ============ -->
|
|
119
|
+
<tr>
|
|
120
|
+
<td style="padding:52px 40px 0 40px;">
|
|
121
|
+
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
122
|
+
<tr>
|
|
123
|
+
<td valign="middle">
|
|
124
|
+
<div style="font-size:17px; font-weight:700; color:#0a0a0a; line-height:1.3;">Intuitive Plan & Design Canvas — 2D, 3D and Web</div>
|
|
125
|
+
<div style="font-size:13px; color:#525252; line-height:1.65; padding-top:9px;">
|
|
126
|
+
A new live-preview-canvas skill in combination with our plan-canvas turns any draft
|
|
127
|
+
into a click-to-annotate feedback loop. Paired with plan-canvas for comments and
|
|
128
|
+
decisions, it spans everything from web layouts to CAD, media and 3D scenes.
|
|
129
|
+
</div>
|
|
130
|
+
</td>
|
|
131
|
+
<td width="112" align="center" valign="middle" style="padding-left:20px;">
|
|
132
|
+
<table role="presentation" width="100" height="100" cellpadding="0" cellspacing="0" border="0" style="background-color:#f3e8ff; border-radius:20px; box-shadow:6px 6px 0 0 #ece2fb;">
|
|
133
|
+
<tr>
|
|
134
|
+
<td align="center" valign="middle">
|
|
135
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#51116F" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
136
|
+
<path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z" />
|
|
137
|
+
<path d="m3.3 7 8.7 5 8.7-5" />
|
|
138
|
+
<path d="M12 22V12" />
|
|
139
|
+
</svg>
|
|
140
|
+
</td>
|
|
141
|
+
</tr>
|
|
142
|
+
</table>
|
|
143
|
+
</td>
|
|
144
|
+
</tr>
|
|
145
|
+
</table>
|
|
146
|
+
</td>
|
|
147
|
+
</tr>
|
|
148
|
+
|
|
149
|
+
<!-- ============ Feature 04 -- icon LEFT (MessageSquareHeart / new & rewritten skills) ============ -->
|
|
150
|
+
<tr>
|
|
151
|
+
<td style="padding:52px 40px 48px 40px;">
|
|
152
|
+
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
153
|
+
<tr>
|
|
154
|
+
<td width="112" align="center" valign="middle" style="padding-right:20px;">
|
|
155
|
+
<table role="presentation" width="100" height="100" cellpadding="0" cellspacing="0" border="0" style="background-color:#f3e8ff; border-radius:20px; box-shadow:-6px 6px 0 0 #ece2fb;">
|
|
156
|
+
<tr>
|
|
157
|
+
<td align="center" valign="middle">
|
|
158
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="#51116F" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
159
|
+
<path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z" />
|
|
160
|
+
<path d="M7.5 9.5c0 .687.265 1.383.697 1.844l3.009 3.264a1.14 1.14 0 0 0 .407.314 1 1 0 0 0 .783-.004 1.14 1.14 0 0 0 .398-.31l3.008-3.264A2.77 2.77 0 0 0 16.5 9.5 2.5 2.5 0 0 0 12 8a2.5 2.5 0 0 0-4.5 1.5" />
|
|
161
|
+
</svg>
|
|
162
|
+
</td>
|
|
163
|
+
</tr>
|
|
164
|
+
</table>
|
|
165
|
+
</td>
|
|
166
|
+
<td valign="middle">
|
|
167
|
+
<div style="font-size:17px; font-weight:700; color:#0a0a0a; line-height:1.3;">New & Rewritten Skills Across the Stack</div>
|
|
168
|
+
<div style="font-size:13px; color:#525252; line-height:1.65; padding-top:9px;">
|
|
169
|
+
<code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">Godmode_Hardware_PCB</code>
|
|
170
|
+
joins the dispatcher graph with a full schematic-to-fab pipeline. The Creator Extension got
|
|
171
|
+
real engine work, six ECC review subagents and Matt Pocock's grilling toolkit landed, and
|
|
172
|
+
<code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">bdbdesignpro</code>
|
|
173
|
+
now gates every motion decision against BDB's brand and accessibility rules.
|
|
174
|
+
</div>
|
|
175
|
+
</td>
|
|
176
|
+
</tr>
|
|
177
|
+
</table>
|
|
178
|
+
</td>
|
|
179
|
+
</tr>
|
|
180
|
+
|
|
181
|
+
<tr>
|
|
182
|
+
<td style="height:1px; background-color:#e5e5e5; line-height:1px; font-size:1px;"> </td>
|
|
183
|
+
</tr>
|
|
184
|
+
<tr>
|
|
185
|
+
<td align="center" style="padding:24px 40px 4px 40px;">
|
|
186
|
+
<span style="font-size:12.5px; color:#6b6b6b; line-height:1.6;">
|
|
187
|
+
<strong style="color:#0a0a0a;">AO</strong> — our own Agent cockpit is close to release, landing in the
|
|
188
|
+
next few days as part of BDB AOS v5.0.0.
|
|
189
|
+
</span>
|
|
190
|
+
</td>
|
|
191
|
+
</tr>
|
|
192
|
+
<tr>
|
|
193
|
+
<td align="center" style="padding:16px 24px 4px 24px;">
|
|
194
|
+
<img src="https://img.shields.io/badge/NVIDIA%20SkillSpector-CLEAN-76B900?logo=nvidia&logoColor=white" width="150" height="20" alt="NVIDIA SkillSpector: CLEAN" style="display:inline-block; border:0;">
|
|
195
|
+
</td>
|
|
196
|
+
</tr>
|
|
197
|
+
<tr>
|
|
198
|
+
<td align="center" style="padding:16px 24px 8px 24px;">
|
|
199
|
+
<span style="font-size:12px; color:#4a4a4a; line-height:1.6;">
|
|
200
|
+
<a href="https://github.com/hybridlabor-api/aos" style="color:#7c1fa0; text-decoration:none;">github.com/hybridlabor-api/aos</a>
|
|
201
|
+
·
|
|
202
|
+
<code style="background:#f3e8ff; padding:1px 5px; border-radius:4px; color:#7c1fa0;">npm i -g @hybridlabor-api/aos</code>
|
|
203
|
+
</span>
|
|
204
|
+
</td>
|
|
205
|
+
</tr>
|
|
206
|
+
<tr>
|
|
207
|
+
<td align="center" style="padding:8px 24px 24px 24px;">
|
|
208
|
+
<span style="font-size:11px; color:#9a9a9a; letter-spacing:0.3px;">© Hybridlabor Global LLC · BDB Agent OS</span>
|
|
209
|
+
</td>
|
|
210
|
+
</tr>
|
|
211
|
+
</table>
|
package/installer.js
CHANGED
|
@@ -2919,17 +2919,83 @@ function yamlQuote(str) {
|
|
|
2919
2919
|
return `"${str.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, ' ')}"`;
|
|
2920
2920
|
}
|
|
2921
2921
|
|
|
2922
|
+
// Canonical model tiers mapped to verified provider-specific model IDs for each harness.
|
|
2923
|
+
// Protects against vendor model churn and provides seamless cross-harness defaults.
|
|
2924
|
+
const CANONICAL_TIERS = {
|
|
2925
|
+
reasoning_max: {
|
|
2926
|
+
claude: 'opus',
|
|
2927
|
+
antigravity: 'gemini-3.1-pro-high',
|
|
2928
|
+
opencode: 'opencode/muse-spark-1.3-contributor-free',
|
|
2929
|
+
codex: 'o3-mini'
|
|
2930
|
+
},
|
|
2931
|
+
standard_fast: {
|
|
2932
|
+
claude: 'sonnet',
|
|
2933
|
+
antigravity: 'gemini-3.8-flash-high',
|
|
2934
|
+
opencode: 'opencode/muse-spark-1.3-contributor-free',
|
|
2935
|
+
codex: 'gpt-4o'
|
|
2936
|
+
},
|
|
2937
|
+
trivial_low: {
|
|
2938
|
+
claude: 'haiku',
|
|
2939
|
+
antigravity: 'gemini-3.8-flash-low',
|
|
2940
|
+
opencode: 'opencode/muse-spark-1.3-contributor-free',
|
|
2941
|
+
codex: 'gpt-4o-mini'
|
|
2942
|
+
}
|
|
2943
|
+
};
|
|
2944
|
+
|
|
2945
|
+
// Loads .aos/pipeline.json or .aos/project.json containing role-to-model/harness mappings.
|
|
2946
|
+
function loadPipelineConfig(projectDir = currentDir) {
|
|
2947
|
+
const candidates = [
|
|
2948
|
+
path.join(projectDir, '.aos', 'pipeline.json'),
|
|
2949
|
+
path.join(projectDir, '.aos', 'project.json'),
|
|
2950
|
+
path.join(homeDir, '.aos', 'pipeline.json')
|
|
2951
|
+
];
|
|
2952
|
+
for (const p of candidates) {
|
|
2953
|
+
if (fs.existsSync(p)) {
|
|
2954
|
+
try {
|
|
2955
|
+
const data = JSON.parse(fs.readFileSync(p, 'utf8'));
|
|
2956
|
+
if (data && data.pipeline) return data.pipeline;
|
|
2957
|
+
} catch {}
|
|
2958
|
+
}
|
|
2959
|
+
}
|
|
2960
|
+
return null;
|
|
2961
|
+
}
|
|
2962
|
+
|
|
2963
|
+
// Resolves model ID, tier, and enabled status for a given agent role and target harness.
|
|
2964
|
+
function resolveAgentConfig(agentSlug, harness, pipelineConfig = null) {
|
|
2965
|
+
const normSlug = agentSlug.toLowerCase().replace(/-/g, '_');
|
|
2966
|
+
const roleCfg = pipelineConfig ? (pipelineConfig[normSlug] || pipelineConfig[agentSlug]) : null;
|
|
2967
|
+
if (roleCfg) {
|
|
2968
|
+
if (roleCfg.model) {
|
|
2969
|
+
return {
|
|
2970
|
+
model: roleCfg.model,
|
|
2971
|
+
tier: roleCfg.tier || 'custom',
|
|
2972
|
+
enabled: roleCfg.enabled !== false,
|
|
2973
|
+
harness: roleCfg.harness || harness
|
|
2974
|
+
};
|
|
2975
|
+
}
|
|
2976
|
+
if (roleCfg.tier && CANONICAL_TIERS[roleCfg.tier] && CANONICAL_TIERS[roleCfg.tier][harness]) {
|
|
2977
|
+
return {
|
|
2978
|
+
model: CANONICAL_TIERS[roleCfg.tier][harness],
|
|
2979
|
+
tier: roleCfg.tier,
|
|
2980
|
+
enabled: roleCfg.enabled !== false,
|
|
2981
|
+
harness: roleCfg.harness || harness
|
|
2982
|
+
};
|
|
2983
|
+
}
|
|
2984
|
+
}
|
|
2985
|
+
const defaultTier = (normSlug === 'architect' || normSlug === 'reviewer') ? 'reasoning_max' : 'standard_fast';
|
|
2986
|
+
const fallbackModel = (CANONICAL_TIERS[defaultTier] && CANONICAL_TIERS[defaultTier][harness]) || 'inherit';
|
|
2987
|
+
return { model: fallbackModel, tier: defaultTier, enabled: true, harness };
|
|
2988
|
+
}
|
|
2989
|
+
|
|
2922
2990
|
// Generates .claude/agents/<name>.md — Claude Code's native subagent format.
|
|
2923
2991
|
// Only frontmatter fields confirmed against code.claude.com/docs/en/sub-agents
|
|
2924
|
-
// are emitted (name, description, model).
|
|
2925
|
-
|
|
2926
|
-
// list -- an unverified mapping there would silently over- or under-scope a
|
|
2927
|
-
// subagent's tool access, which is worse than inheriting the default set.
|
|
2928
|
-
function compileClaudeAgents(agents, targetDir) {
|
|
2992
|
+
// are emitted (name, description, model).
|
|
2993
|
+
function compileClaudeAgents(agents, targetDir, pipelineConfig = null) {
|
|
2929
2994
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
2930
2995
|
for (const a of agents) {
|
|
2931
2996
|
const slug = a.name.toLowerCase().replace(/_/g, '-');
|
|
2932
|
-
const
|
|
2997
|
+
const resolved = resolveAgentConfig(slug, 'claude', pipelineConfig);
|
|
2998
|
+
const model = (resolved && resolved.model) ? resolved.model.toLowerCase() : (a.model ? a.model.toLowerCase() : 'inherit');
|
|
2933
2999
|
const body = [
|
|
2934
3000
|
a.role,
|
|
2935
3001
|
a.skills.length ? `**Primary skills:** ${a.skills.join(', ')}` : null,
|
|
@@ -2950,18 +3016,13 @@ function compileClaudeAgents(agents, targetDir) {
|
|
|
2950
3016
|
}
|
|
2951
3017
|
}
|
|
2952
3018
|
|
|
2953
|
-
// Generates .opencode/agents/<name>.md.
|
|
2954
|
-
|
|
2955
|
-
// `permission` are left unset: OpenCode's model-id format and its mapping
|
|
2956
|
-
// from an MCP-server list to `permission` keys are not verified against its
|
|
2957
|
-
// docs, so guessing either would risk emitting a value OpenCode silently
|
|
2958
|
-
// can't resolve. `mode: subagent` is used for every generated agent, since
|
|
2959
|
-
// none of these five is meant to be a primary/default agent a user talks to
|
|
2960
|
-
// directly.
|
|
2961
|
-
function compileOpenCodeAgents(agents, targetDir) {
|
|
3019
|
+
// Generates .opencode/agents/<name>.md. Emits description, mode: subagent, and model.
|
|
3020
|
+
function compileOpenCodeAgents(agents, targetDir, pipelineConfig = null) {
|
|
2962
3021
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
2963
3022
|
for (const a of agents) {
|
|
2964
3023
|
const slug = a.name.toLowerCase().replace(/_/g, '-');
|
|
3024
|
+
const resolved = resolveAgentConfig(slug, 'opencode', pipelineConfig);
|
|
3025
|
+
const model = resolved && resolved.model ? resolved.model : null;
|
|
2965
3026
|
const body = [
|
|
2966
3027
|
a.role,
|
|
2967
3028
|
a.skills.length ? `**Primary skills:** ${a.skills.join(', ')}` : null,
|
|
@@ -2969,18 +3030,54 @@ function compileOpenCodeAgents(agents, targetDir) {
|
|
|
2969
3030
|
a.output ? `**Output artifact(s):** ${a.output}` : null,
|
|
2970
3031
|
].filter(Boolean).join('\n\n');
|
|
2971
3032
|
|
|
2972
|
-
const
|
|
3033
|
+
const frontmatterLines = [
|
|
2973
3034
|
'---',
|
|
2974
3035
|
`description: ${yamlQuote(a.role)}`,
|
|
2975
3036
|
'mode: subagent',
|
|
2976
|
-
|
|
2977
|
-
|
|
3037
|
+
];
|
|
3038
|
+
if (model) {
|
|
3039
|
+
frontmatterLines.push(`model: ${model}`);
|
|
3040
|
+
}
|
|
3041
|
+
frontmatterLines.push('---', '');
|
|
3042
|
+
|
|
3043
|
+
fs.writeFileSync(path.join(targetDir, `${slug}.md`), frontmatterLines.join('\n') + body + '\n');
|
|
3044
|
+
}
|
|
3045
|
+
}
|
|
3046
|
+
|
|
3047
|
+
// Generates .codex/agents/<name>.toml and .codex/agents/<name>.md for ChatGPT Codex CLI.
|
|
3048
|
+
function compileCodexAgents(agents, targetDir, pipelineConfig = null) {
|
|
3049
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
3050
|
+
for (const a of agents) {
|
|
3051
|
+
const slug = a.name.toLowerCase().replace(/_/g, '-');
|
|
3052
|
+
const resolved = resolveAgentConfig(slug, 'codex', pipelineConfig);
|
|
3053
|
+
const model = resolved && resolved.model ? resolved.model : 'o3-mini';
|
|
3054
|
+
|
|
3055
|
+
const tomlContent = [
|
|
3056
|
+
`# Codex subagent configuration for ${slug}`,
|
|
3057
|
+
`name = "${slug}"`,
|
|
3058
|
+
`description = ${JSON.stringify(a.role)}`,
|
|
3059
|
+
`model = "${model}"`,
|
|
3060
|
+
`tier = "${resolved.tier || 'standard_fast'}"`,
|
|
3061
|
+
`enabled = ${resolved.enabled !== false}`,
|
|
3062
|
+
`prompt_file = "${slug}.md"`
|
|
2978
3063
|
].join('\n');
|
|
3064
|
+
fs.writeFileSync(path.join(targetDir, `${slug}.toml`), tomlContent + '\n');
|
|
2979
3065
|
|
|
2980
|
-
|
|
3066
|
+
const body = [
|
|
3067
|
+
`# Role: ${a.name}`,
|
|
3068
|
+
a.role,
|
|
3069
|
+
a.skills.length ? `**Primary skills:** ${a.skills.join(', ')}` : null,
|
|
3070
|
+
a.mcpServers.length ? `**MCP servers used:** ${a.mcpServers.join(', ')}` : null,
|
|
3071
|
+
a.output ? `**Output artifact(s):** ${a.output}` : null,
|
|
3072
|
+
'',
|
|
3073
|
+
'## Instructions',
|
|
3074
|
+
a.systemPrompt
|
|
3075
|
+
].filter(Boolean).join('\n\n');
|
|
3076
|
+
fs.writeFileSync(path.join(targetDir, `${slug}.md`), body + '\n');
|
|
2981
3077
|
}
|
|
2982
3078
|
}
|
|
2983
3079
|
|
|
3080
|
+
|
|
2984
3081
|
function injectHarnessRules() {
|
|
2985
3082
|
const geminiMdSrc = path.join(srcDir, 'GEMINI.md');
|
|
2986
3083
|
const agentsMdSrc = path.join(srcDir, '.agents', 'agents.md');
|
|
@@ -3034,11 +3131,16 @@ function injectHarnessRules() {
|
|
|
3034
3131
|
const agyAgentsDir = path.join(geminiDir, 'config', 'agents');
|
|
3035
3132
|
if (!fs.existsSync(agyAgentsDir)) fs.mkdirSync(agyAgentsDir, { recursive: true });
|
|
3036
3133
|
|
|
3134
|
+
const pipelineConfig = loadPipelineConfig();
|
|
3037
3135
|
const agents = parseAgentsMd(agentsMdContent);
|
|
3038
3136
|
for (const a of agents) {
|
|
3137
|
+
const slug = a.name.toLowerCase().replace(/_/g, '-');
|
|
3138
|
+
const resolved = resolveAgentConfig(slug, 'antigravity', pipelineConfig);
|
|
3039
3139
|
const agentConfig = {
|
|
3040
3140
|
name: a.name,
|
|
3041
3141
|
description: a.role,
|
|
3142
|
+
model: resolved.model,
|
|
3143
|
+
model_tier: resolved.tier,
|
|
3042
3144
|
enable_write_tools: true,
|
|
3043
3145
|
enable_subagent_tools: true,
|
|
3044
3146
|
enable_mcp_tools: true,
|
|
@@ -3053,22 +3155,34 @@ function injectHarnessRules() {
|
|
|
3053
3155
|
|
|
3054
3156
|
installStep('compile Claude Code subagents', () => {
|
|
3055
3157
|
if (agentsMdContent) {
|
|
3158
|
+
const pipelineConfig = loadPipelineConfig();
|
|
3056
3159
|
const agents = parseAgentsMd(agentsMdContent);
|
|
3057
3160
|
const claudeAgentsDir = path.join(homeDir, '.claude', 'agents');
|
|
3058
|
-
compileClaudeAgents(agents, claudeAgentsDir);
|
|
3161
|
+
compileClaudeAgents(agents, claudeAgentsDir, pipelineConfig);
|
|
3059
3162
|
log.step(`Compiled AGENTS.md to Claude Code subagents in ${claudeAgentsDir}`);
|
|
3060
3163
|
}
|
|
3061
3164
|
}, 'Claude Code agents unchanged');
|
|
3062
3165
|
|
|
3063
3166
|
installStep('compile OpenCode subagents', () => {
|
|
3064
3167
|
if (agentsMdContent) {
|
|
3168
|
+
const pipelineConfig = loadPipelineConfig();
|
|
3065
3169
|
const agents = parseAgentsMd(agentsMdContent);
|
|
3066
3170
|
const opencodeAgentsDir = path.join(homeDir, '.opencode', 'agents');
|
|
3067
|
-
compileOpenCodeAgents(agents, opencodeAgentsDir);
|
|
3171
|
+
compileOpenCodeAgents(agents, opencodeAgentsDir, pipelineConfig);
|
|
3068
3172
|
log.step(`Compiled AGENTS.md to OpenCode subagents in ${opencodeAgentsDir}`);
|
|
3069
3173
|
}
|
|
3070
3174
|
}, 'OpenCode agents unchanged');
|
|
3071
3175
|
|
|
3176
|
+
installStep('compile Codex subagents', () => {
|
|
3177
|
+
if (agentsMdContent) {
|
|
3178
|
+
const pipelineConfig = loadPipelineConfig();
|
|
3179
|
+
const agents = parseAgentsMd(agentsMdContent);
|
|
3180
|
+
const codexAgentsDir = path.join(homeDir, '.codex', 'agents');
|
|
3181
|
+
compileCodexAgents(agents, codexAgentsDir, pipelineConfig);
|
|
3182
|
+
log.step(`Compiled AGENTS.md to Codex subagents in ${codexAgentsDir}`);
|
|
3183
|
+
}
|
|
3184
|
+
}, 'Codex agents unchanged');
|
|
3185
|
+
|
|
3072
3186
|
const claudeMdPath = path.join(currentDir, 'CLAUDE.md');
|
|
3073
3187
|
installStep(`sync ${claudeMdPath}`, () => {
|
|
3074
3188
|
let claudeContent = fs.existsSync(claudeMdPath) ? fs.readFileSync(claudeMdPath, 'utf8') : '';
|
|
@@ -3513,10 +3627,20 @@ function installProjectHarness() {
|
|
|
3513
3627
|
}, 'go-gate / graph-gate enforcement stays inactive in this project.');
|
|
3514
3628
|
|
|
3515
3629
|
installStep('copy agent definitions into project', () => {
|
|
3516
|
-
const
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3630
|
+
const agentsMdSrc = path.join(srcDir, '.agents', 'agents.md');
|
|
3631
|
+
const pipelineConfig = loadPipelineConfig(currentDir);
|
|
3632
|
+
if (fs.existsSync(agentsMdSrc)) {
|
|
3633
|
+
const agents = parseAgentsMd(fs.readFileSync(agentsMdSrc, 'utf8'));
|
|
3634
|
+
compileClaudeAgents(agents, path.join(projectClaudeDir, 'agents'), pipelineConfig);
|
|
3635
|
+
compileOpenCodeAgents(agents, path.join(currentDir, '.opencode', 'agents'), pipelineConfig);
|
|
3636
|
+
compileCodexAgents(agents, path.join(projectCodexDir, 'agents'), pipelineConfig);
|
|
3637
|
+
log.step(`Compiled project agent definitions for Claude, OpenCode, and Codex`);
|
|
3638
|
+
} else {
|
|
3639
|
+
const agentsSrc = path.join(srcDir, '.claude', 'agents');
|
|
3640
|
+
if (fs.existsSync(agentsSrc)) {
|
|
3641
|
+
copyDirRecursiveSync(agentsSrc, path.join(projectClaudeDir, 'agents'));
|
|
3642
|
+
log.step(`Copied agent definitions to ${path.join(projectClaudeDir, 'agents')}`);
|
|
3643
|
+
}
|
|
3520
3644
|
}
|
|
3521
3645
|
}, 'The dispatcher runs, but its agent-file pointers resolve to nothing.');
|
|
3522
3646
|
|
|
@@ -4715,4 +4839,12 @@ module.exports = {
|
|
|
4715
4839
|
flushSessionManifest,
|
|
4716
4840
|
copyDirRecursiveSync,
|
|
4717
4841
|
INSTALL_MANIFEST_PATH,
|
|
4842
|
+
// Agent compilers & pipeline helpers
|
|
4843
|
+
parseAgentsMd,
|
|
4844
|
+
compileClaudeAgents,
|
|
4845
|
+
compileOpenCodeAgents,
|
|
4846
|
+
compileCodexAgents,
|
|
4847
|
+
loadPipelineConfig,
|
|
4848
|
+
resolveAgentConfig,
|
|
4849
|
+
CANONICAL_TIERS,
|
|
4718
4850
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hybridlabor-api/aos",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.6.0",
|
|
4
4
|
"description": "AOS — A Curated AI AGENT OS. Optimized agent skills and add-ons like memB, OpenWiki, Heimdall Token Saver, and Godmode architectures.",
|
|
5
5
|
"main": "installer.js",
|
|
6
6
|
"engines": {
|
|
@@ -77,6 +77,8 @@ your head. Ask; do not default it on.
|
|
|
77
77
|
holds content, merge it into `AGENTS.md` first and only then replace it with a
|
|
78
78
|
symlink. Never silently overwrite it.
|
|
79
79
|
|
|
80
|
+
**Subagents & Multi-Harness Pipeline.** Offer to initialize `.aos/pipeline.json` using canonical tiers (or custom roles via `/subagent-setup`). Ensures subagents are automatically compiled across Claude Code, Antigravity, OpenCode, and Codex CLI.
|
|
81
|
+
|
|
80
82
|
**With a GitHub remote, two more.** Skip both entirely without a remote — a
|
|
81
83
|
local-only repo has nowhere to put them, and a skipped question is clearer than
|
|
82
84
|
one answered "no".
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: subagent-setup
|
|
3
|
+
description: Configure and synchronize multi-harness subagents (Claude Code, Google Antigravity, OpenCode, ChatGPT Codex CLI) with canonical model tiers and single source of truth in .aos/pipeline.json.
|
|
4
|
+
category: bdb-core
|
|
5
|
+
risk: low
|
|
6
|
+
source: bdb
|
|
7
|
+
date_added: "2026-09-20"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Skill: subagent-setup — Multi-Harness Subagent Configuration
|
|
11
|
+
|
|
12
|
+
Manages and synchronizes autonomous subagent roles across all four supported execution harnesses:
|
|
13
|
+
1. **Claude Code** (`.claude/agents/*.md`)
|
|
14
|
+
2. **Google Antigravity** (`~/.gemini/config/agents/*.json`)
|
|
15
|
+
3. **OpenCode** (`.opencode/agents/*.md`)
|
|
16
|
+
4. **ChatGPT Codex CLI** (`.codex/agents/*.toml` & `.codex/agents/*.md`)
|
|
17
|
+
|
|
18
|
+
Single Source of Truth: **`.aos/pipeline.json`** (compatible with AO Orchestrator Pipeline Wizard).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 1. Canonical Model Tiers (Resilience against Model Churn)
|
|
23
|
+
|
|
24
|
+
To prevent breaking configurations when providers update model names, roles map to canonical tiers:
|
|
25
|
+
|
|
26
|
+
| Tier | Description | Claude Code | Antigravity | OpenCode | Codex CLI |
|
|
27
|
+
|---|---|---|---|---|---|
|
|
28
|
+
| `reasoning_max` | Deep reasoning, planning, adversarial review | `opus` | `gemini-3.1-pro-high` | `opencode/muse-spark-1.3-contributor-free` | `o3-mini` |
|
|
29
|
+
| `standard_fast` | Fast coding, frontend/backend engineering | `sonnet` | `gemini-3.8-flash-high` | `opencode/muse-spark-1.3-contributor-free` | `gpt-4o` |
|
|
30
|
+
| `trivial_low` | Mechanical tasks, summaries | `haiku` | `gemini-3.8-flash-low` | `opencode/muse-spark-1.3-contributor-free` | `gpt-4o-mini` |
|
|
31
|
+
|
|
32
|
+
*Note:* Custom model IDs can also be set directly per role and harness.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. CLI Usage
|
|
37
|
+
|
|
38
|
+
### View Current Pipeline Status
|
|
39
|
+
```bash
|
|
40
|
+
node skills/global_config/subagent-setup/scripts/setup-subagents.mjs --show
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Initialize Default Pipeline Configuration
|
|
44
|
+
```bash
|
|
45
|
+
node skills/global_config/subagent-setup/scripts/setup-subagents.mjs --init-default
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Update a Specific Role
|
|
49
|
+
```bash
|
|
50
|
+
# Example: Set Reviewer to Codex with o3-mini
|
|
51
|
+
node skills/global_config/subagent-setup/scripts/setup-subagents.mjs \
|
|
52
|
+
--set-role reviewer --harness codex --model o3-mini --tier reasoning_max
|
|
53
|
+
|
|
54
|
+
# Example: Set Shipping to OpenCode with Free Tier
|
|
55
|
+
node skills/global_config/subagent-setup/scripts/setup-subagents.mjs \
|
|
56
|
+
--set-role shipping --harness opencode --model opencode/muse-spark-1.3-contributor-free
|
|
57
|
+
|
|
58
|
+
# Example: Enable or Disable a Role
|
|
59
|
+
node skills/global_config/subagent-setup/scripts/setup-subagents.mjs --set-role media_eventtech --enable
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Synchronize to All Harnesses
|
|
63
|
+
```bash
|
|
64
|
+
node skills/global_config/subagent-setup/scripts/setup-subagents.mjs --sync
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 3. Integration with `aos-project-init` & AO Orchestrator
|
|
70
|
+
- **AO Orchestrator (Port 3101)**: The Pipeline Wizard (Schritt 3 von 4: Agenten & Rollen) directly reads and writes `.aos/pipeline.json`.
|
|
71
|
+
- **`aos-project-init`**: Offers subagent configuration during project interview, defaulting to the canonical tier matrix.
|