@hybridlabor-api/aos 4.5.2 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.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/basic/godmode-hardware-pcb/SKILL.md +64 -10
- 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.1",
|
|
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": {
|
|
@@ -57,46 +57,100 @@ Before issuing schematic edits, layout changes, or fabrication exports, the agen
|
|
|
57
57
|
|
|
58
58
|
---
|
|
59
59
|
|
|
60
|
+
## 6. Iterative Visual Loop — Render as Complement, Not Gate
|
|
61
|
+
|
|
62
|
+
A render never replaces ERC/DRC, but every edit must be seen before the next
|
|
63
|
+
one lands. Generate in small batches, render after each batch, and compare
|
|
64
|
+
against the reference with a vision-capable model before continuing:
|
|
65
|
+
|
|
66
|
+
1. **Orient first:** locate project files (the kicad-project-find helper in
|
|
67
|
+
the companion module, or raw `find` for `*.kicad_pro`, `*.kicad_sch`,
|
|
68
|
+
`*.kicad_pcb`), then report `kicad-cli` path and version. If `kicad-cli`
|
|
69
|
+
is absent, stop and say `BLOCKED` — do not emit commands that will fail
|
|
70
|
+
downstream.
|
|
71
|
+
2. **Small batches:** place or edit at most 5–10 components per batch, on a
|
|
72
|
+
fixed 0.5mm or 1mm placement grid. Never generate a whole schematic or
|
|
73
|
+
board in one shot.
|
|
74
|
+
3. **Render after every batch:**
|
|
75
|
+
- schematic: `kicad-cli sch export svg --output out/ design.kicad_sch`
|
|
76
|
+
- board layers: `kicad-cli pcb export svg --output out/ board.kicad_pcb`
|
|
77
|
+
- board 3D: `kicad-cli pcb render --output board-top.png board.kicad_pcb`
|
|
78
|
+
- The companion module ships these as the kicad-render, kicad-drc-json,
|
|
79
|
+
and kicad-erc-json helper scripts.
|
|
80
|
+
4. **Vision diff:** load the fresh render into the vision model alongside the
|
|
81
|
+
reference (photo, datasheet figure, or schematic from the web). On chaos —
|
|
82
|
+
overlapping symbols, nets crossing the sheet, decoupling far from pins —
|
|
83
|
+
fix before the next batch.
|
|
84
|
+
5. **Machine checks per batch:** `kicad-cli sch erc` and `kicad-cli pcb drc`
|
|
85
|
+
with `--exit-code-violations`. Unconnected-pin warnings after a messy
|
|
86
|
+
batch are worked off systematically, not batched up for the end.
|
|
87
|
+
6. **Substrate routing:** live board/session edits prefer `kicad-python` IPC;
|
|
88
|
+
render, export, DRC/ERC, and fabrication outputs use `kicad-cli`;
|
|
89
|
+
deterministic offline file edits use a structured S-expression parser
|
|
90
|
+
(e.g. `kiutils`), never hand-rolled regex on `.kicad_sch` / `.kicad_pcb`.
|
|
91
|
+
7. **Evidence report:** close every batch with target, commands run, artifact
|
|
92
|
+
paths, check outputs, and one of
|
|
93
|
+
`DONE` / `DONE_WITH_CONCERNS` / `BLOCKED` / `NEEDS_CONTEXT`.
|
|
94
|
+
|
|
95
|
+
### Shared placement preamble (applies to every schematic/layout batch)
|
|
96
|
+
|
|
97
|
+
- Schematic flow goes left to right (inputs left, outputs right); VCC points
|
|
98
|
+
up, GND points down; use global labels or hierarchical sheets instead of
|
|
99
|
+
dragging dozens of wires across the sheet.
|
|
100
|
+
- Every decoupling capacitor sits on the same layer as its IC, within 1.5mm
|
|
101
|
+
of the power pin, in the sequence rail-via → cap pad → IC pin.
|
|
102
|
+
- Reverse-engineering work (rebuilding a board photo or web schematic in
|
|
103
|
+
KiCad) routes to `schematic-reverse-engineering` first: identify parts via
|
|
104
|
+
a parts source, record manufacturer part numbers, verify symbol/footprint
|
|
105
|
+
visually before use, and never invent pinouts from memory.
|
|
106
|
+
|
|
60
107
|
## Universal Agent Harness Integration
|
|
61
108
|
|
|
62
|
-
This Godmode rulebook is universally available across the BDB ecosystem, installed alongside the `@hybridlabor-api/bdb-hardware-pcb` module (KiCad + OpenSCAD MCP servers,
|
|
109
|
+
This Godmode rulebook is universally available across the BDB ecosystem, installed alongside the `@hybridlabor-api/bdb-hardware-pcb` module (KiCad + OpenSCAD MCP servers, 6 companion skills under the `engineering-hardware` category):
|
|
63
110
|
* **Claude Code / CLI Agents:** loaded during electrical, PCB, and enclosure design sessions.
|
|
64
|
-
* **Peer skills:** `code-first-hardware-design`, `pcb-constraint-definition`, `pcb-layout-routing-automation`, `pcb-validation-dfm-signoff`, `schematic-datasheet-analysis`.
|
|
111
|
+
* **Peer skills:** `code-first-hardware-design`, `pcb-constraint-definition`, `pcb-layout-routing-automation`, `pcb-validation-dfm-signoff`, `schematic-datasheet-analysis`, `schematic-reverse-engineering`.
|
|
65
112
|
|
|
66
113
|
## Overview
|
|
67
|
-
This skill acts as the architectural authority for electrical and PCB design, enforcing IPC-standard physical constraints, headless validation gates, and hardware/software co-design boundaries.
|
|
114
|
+
This skill acts as the architectural authority for electrical and PCB design, enforcing IPC-standard physical constraints, iterative visual verification, headless validation gates, and hardware/software co-design boundaries.
|
|
68
115
|
|
|
69
116
|
## When to Use
|
|
70
|
-
- **Trigger:** The user is designing or modifying a schematic, PCB layout, layer stackup, netclass, or an OpenSCAD enclosure meant to house the board.
|
|
117
|
+
- **Trigger:** The user is designing or modifying a schematic, PCB layout, layer stackup, netclass, or an OpenSCAD enclosure meant to house the board — including rebuilding a board photo or web schematic in KiCad.
|
|
71
118
|
- **Exclude:** Do not use for firmware/register-level software running on the board (hand off to `godmode-engineering`), or for live show-control signal routing in the field (hand off to `godmode-eventtech`).
|
|
72
119
|
|
|
73
120
|
## Core Process
|
|
74
121
|
1. Derive every trace width, impedance target, and clearance from the formulas above or a cited IPC standard — never from a rounded-up guess.
|
|
75
|
-
2. Validate KiCad and OpenSCAD MCP servers are actually responsive before issuing edits.
|
|
76
|
-
3.
|
|
77
|
-
4.
|
|
78
|
-
5.
|
|
122
|
+
2. Validate KiCad and OpenSCAD MCP servers are actually responsive before issuing edits; confirm `kicad-cli` path and version.
|
|
123
|
+
3. Work in batches of at most 5–10 components on a fixed grid; render after every batch and vision-diff against the reference before continuing (see section 6).
|
|
124
|
+
4. Run headless ERC and DRC with `--exit-code-violations` per batch; treat any non-zero exit as a hard stop.
|
|
125
|
+
5. Benchmark the layout against the real target fab house's DFM limits before calling a design release-ready.
|
|
126
|
+
6. Cross-check the enclosure (OpenSCAD) against the board outline and connector placements (KiCad) before sign-off.
|
|
79
127
|
|
|
80
128
|
## Common Rationalizations
|
|
81
129
|
|
|
82
130
|
| Rationalization | Reality |
|
|
83
131
|
|---|---|
|
|
84
132
|
| "0.25mm default trace width is fine for a power rail." | IPC-2152 current-capacity math, not the CAD tool's default, sets minimum trace width — a 2.5A rail needs ~0.79mm at 1oz copper, not the default. |
|
|
85
|
-
| "The 3D viewer looks correct, so the board is done." | A
|
|
133
|
+
| "The 3D viewer looks correct, so the board is done." | A render complements ERC/DRC, it never replaces them. A clean render with a non-zero ERC/DRC exit code is still BLOCKED; a passing exit code with no render is DONE_WITH_CONCERNS. |
|
|
134
|
+
| "Rendering every few components slows me down; one big generation is faster." | One-shot generation produces overlapping symbols and unconnected pins that cost more to untangle than batches of 5–10 with a render between them. |
|
|
86
135
|
| "USB and Ethernet differential pairs can use the same spacing." | USB targets 90Ω differential, Ethernet/PCIe targets 100Ω — same formula, different required spacing for the same dielectric height. |
|
|
87
136
|
| "The GPIO can be reassigned in layout; firmware can just adapt." | A pin reassignment is a breaking change to any firmware that already assumed the old pinout — it must be flagged to the software side, not silently absorbed. |
|
|
88
137
|
|
|
89
138
|
## Red Flags
|
|
90
139
|
|
|
91
140
|
- Proceeding to layout with unconstrained nets or no defined netclasses.
|
|
141
|
+
- Generating a whole schematic or board in one shot with no intermediate render.
|
|
92
142
|
- Treating a clean-looking 3D render as equivalent to a passing ERC/DRC exit code.
|
|
143
|
+
- Skipping the vision diff against the reference photo or schematic after a batch.
|
|
93
144
|
- Skipping DFM benchmarking against the actual target fab house's capabilities.
|
|
94
145
|
- Changing a pinout or connector placement without flagging the firmware or enclosure impact.
|
|
146
|
+
- Inventing a footprint or pinout from memory when a parts source was available.
|
|
95
147
|
|
|
96
148
|
## Verification
|
|
97
149
|
|
|
98
150
|
- [ ] Every load-bearing trace width/impedance/clearance traces back to a formula or IPC standard, not a default or a guess.
|
|
151
|
+
- [ ] Work proceeded in batches of at most 5–10 components with a render and vision diff per batch; artifact paths are reported.
|
|
99
152
|
- [ ] ERC and DRC were run headless with `--exit-code-violations`, and the actual exit code — not a description of the run — was checked.
|
|
100
|
-
- [ ] KiCad and OpenSCAD MCP tool availability was validated before issuing edits.
|
|
153
|
+
- [ ] KiCad and OpenSCAD MCP tool availability was validated before issuing edits; `kicad-cli` path and version are on record.
|
|
101
154
|
- [ ] DFM limits were checked against the real target fab house, not a generic assumption.
|
|
102
155
|
- [ ] Any pinout/connector change was cross-checked against firmware assumptions and enclosure geometry.
|
|
156
|
+
- [ ] Reverse-engineered parts cite a real manufacturer part number and source, not memory.
|
|
@@ -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".
|