@hybridlabor-api/aos 4.13.2 → 4.14.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/AGENTS.md +8 -0
- package/.agents/nodes.json +5 -2
- package/.claude/hooks/conventional-commits.mjs +14 -15
- package/.claude/hooks/env-file-protection.mjs +14 -15
- package/.claude/hooks/go-gate.mjs +152 -10
- package/.claude/hooks/go-token.mjs +55 -0
- package/.claude/hooks/memb-inject.mjs +75 -62
- package/.claude/hooks/trail-autostart.mjs +27 -0
- package/.claude/hooks/trail-relay.mjs +1 -0
- package/.claude/settings.json +22 -4
- package/.claude/workflows/startcycle-dispatch.mjs +11 -4
- package/.opencode/plugins/bdb-aos.js +98 -121
- package/.opencode/plugins/lib/trail-autostart.js +38 -0
- package/CLAUDE.md +1 -1
- package/README.de.md +6 -6
- package/README.md +6 -6
- package/README.pt.md +6 -6
- package/THIRD_PARTY_NOTICES.md +19 -3
- package/assets/header-v5.png +0 -0
- package/bin/aos-acp.mjs +211 -0
- package/bin/aos-doctor.mjs +1 -1
- package/bin/aos-uninstall.mjs +2 -2
- package/docs/master-session-acp.md +51 -0
- package/installer.js +314 -42
- package/mcps/mcsc/packages/mcp/server.js +6 -7
- package/package.json +4 -3
- package/scripts/validate-skills.mjs +76 -0
- package/skills/basic/bdbmediastorm/SKILL.md +1 -1
- package/skills/basic/godmode-shipping/SKILL.md +3 -0
- package/skills/basic/master-session/SKILL.md +89 -0
- package/skills/basic/startcycle/SKILL.md +1 -1
- package/skills/basic/startcycle-graph/SKILL.md +2 -2
- package/skills/basic/startcycle-graph-user/SKILL.md +1 -1
- package/skills/basic/teamwork-preview/SKILL.md +1 -1
- package/skills/bdbrainstorm/SKILL.md +7 -1
- package/skills/global_config/agentic-harness-patterns/SKILL.md +257 -0
- package/skills/global_config/agentic-harness-patterns/metadata.json +10 -0
- package/skills/global_config/agentic-harness-patterns/references/agent-orchestration-pattern.md +97 -0
- package/skills/global_config/agentic-harness-patterns/references/bootstrap-sequence-pattern.md +106 -0
- package/skills/global_config/agentic-harness-patterns/references/context-engineering/compress-pattern.md +78 -0
- package/skills/global_config/agentic-harness-patterns/references/context-engineering/isolate-pattern.md +82 -0
- package/skills/global_config/agentic-harness-patterns/references/context-engineering/select-pattern.md +86 -0
- package/skills/global_config/agentic-harness-patterns/references/context-engineering-pattern.md +29 -0
- package/skills/global_config/agentic-harness-patterns/references/hook-lifecycle-pattern.md +111 -0
- package/skills/global_config/agentic-harness-patterns/references/memory-persistence-pattern.md +109 -0
- package/skills/global_config/agentic-harness-patterns/references/permission-gate-pattern.md +111 -0
- package/skills/global_config/agentic-harness-patterns/references/skill-runtime-pattern.md +104 -0
- package/skills/global_config/agentic-harness-patterns/references/task-decomposition-pattern.md +92 -0
- package/skills/global_config/agentic-harness-patterns/references/tool-registry-pattern.md +101 -0
- package/skills/global_config/agenttrail/SKILL.md +8 -0
- package/skills/global_config/agenttrail/bin/agenttrail.mjs +14 -0
- package/skills/global_config/agenttrail/bin/ensure.mjs +118 -0
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +1 -1
- package/skills/global_config/bdb-visual-edit/SKILL.md +51 -0
- package/skills/global_config/bdb-visual-edit/references/vite-react-source-attr.md +59 -0
- package/skills/global_config/bdb-visual-edit/scripts/pick-snippet.js +27 -0
- package/skills/global_config/bdb-visual-edit/scripts/sanitize-element.mjs +123 -0
- package/skills/global_config/factory-collect/SKILL.md +74 -0
- package/skills/global_config/factory-human-digest/SKILL.md +92 -0
- package/skills/global_config/factory-lookback/SKILL.md +95 -0
- package/skills/global_config/factory-review-prs/SKILL.md +63 -0
- package/skills/global_config/git-pr-review/SKILL.md +3 -0
- package/skills/global_config/grilling/SKILL.md +2 -0
- package/skills/global_config/mcsc/SKILL.md +1 -1
- package/skills/global_config/plan-arbiter/SKILL.md +125 -0
- package/skills/global_config/plan-canvas/SKILL.md +62 -5
- package/skills/global_config/plan-canvas/scripts/lib/loopback-guard.js +19 -3
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/README.md +285 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/agent-trail.js +129 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/board-client.js +124 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/demo-plan/canvas.mdx +19 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/demo-plan/plan.mdx +18 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/recap-demo/plan.mdx +72 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/README.md +29 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/architecture.json +30 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/00_architecture.html +14950 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/canvas.mdx +511 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/builder/plan.mdx +208 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/recap/plan.mdx +102 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/showcase/standard/plan.md +136 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/signup-storyboard/canvas.mdx +124 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/examples/signup-storyboard/plan.mdx +37 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/index.js +188 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/kit.js +123 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/mdx.js +411 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/render.js +1291 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/plan.mdx +195 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/architecture/standard.md +95 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/plan.mdx +105 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/bugfix/standard.md +76 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/canvas.mdx +81 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/plan.mdx +145 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/feature/standard.md +76 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/plan.mdx +172 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/migration/standard.md +100 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/plan.mdx +67 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap/standard.md +49 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/canvas.mdx +63 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/plan.mdx +49 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-board/standard.md +39 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/plan.mdx +118 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/recap-review/standard.md +57 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/plan.mdx +173 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/release/standard.md +96 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/plan.mdx +91 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/research/standard.md +54 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/canvas.mdx +53 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/meta.json +1 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/plan.mdx +225 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/templates/show-control/standard.md +111 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/theme.css +472 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-builder/trail.js +216 -0
- package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/markdown.js +1 -1
- package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/server.js +37 -4
- package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/ui.js +125 -29
- package/skills/global_config/plan-canvas/scripts/plan-canvas.js +196 -8
- package/skills/global_config/pr-recap/SKILL.md +47 -0
- package/skills/global_config/pr-recap/scripts/pr-recap.mjs +200 -0
- package/skills/global_config/quick-recap/SKILL.md +55 -0
- package/skills/global_config/stay-within-limits/SKILL.md +85 -0
- package/skills/global_config/triage/SKILL.md +3 -0
- package/skills/global_config/visual-edit/README.md +96 -0
- package/skills/global_config/visual-edit/SKILL.md +615 -0
- package/skills/global_config/visual-plan/README.md +93 -0
- package/skills/global_config/visual-plan/SKILL.md +544 -0
- package/skills/global_config/visual-plan/references/canvas.md +139 -0
- package/skills/global_config/visual-plan/references/connection.md +51 -0
- package/skills/global_config/visual-plan/references/document-quality.md +186 -0
- package/skills/global_config/visual-plan/references/exemplar.md +62 -0
- package/skills/global_config/visual-plan/references/local-files.md +99 -0
- package/skills/global_config/visual-plan/references/wireframe.md +319 -0
- package/skills/global_config/visual-recap/README.md +103 -0
- package/skills/global_config/visual-recap/SKILL.md +560 -0
- package/skills/global_config/visual-recap/references/connection.md +51 -0
- package/skills/global_config/visual-recap/references/local-files.md +99 -0
- package/skills/global_config/visual-recap/references/wireframe.md +319 -0
- package/skills/playbooks/pb-ci-fix/SKILL.md +49 -0
- package/skills/playbooks/pb-event-tracker/SKILL.md +45 -0
- package/skills/playbooks/pb-meeting-actions/SKILL.md +42 -0
- package/skills/playbooks/pb-project-new/SKILL.md +48 -0
- package/skills/playbooks/pb-week-plan/SKILL.md +45 -0
- package/assets/header-v4.jpg +0 -0
package/.claude/settings.json
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/go-gate.mjs\""
|
|
9
|
+
"command": "node \"${CLAUDE_PROJECT_DIR}/.claude/hooks/go-gate.mjs\""
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"type": "command",
|
|
13
|
-
"command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/conventional-commits.mjs\""
|
|
13
|
+
"command": "node \"${CLAUDE_PROJECT_DIR}/.claude/hooks/conventional-commits.mjs\""
|
|
14
14
|
}
|
|
15
15
|
]
|
|
16
16
|
},
|
|
@@ -19,7 +19,17 @@
|
|
|
19
19
|
"hooks": [
|
|
20
20
|
{
|
|
21
21
|
"type": "command",
|
|
22
|
-
"command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/env-file-protection.mjs\""
|
|
22
|
+
"command": "node \"${CLAUDE_PROJECT_DIR}/.claude/hooks/env-file-protection.mjs\""
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"matcher": "Agent|Task",
|
|
28
|
+
"hooks": [
|
|
29
|
+
{
|
|
30
|
+
"type": "command",
|
|
31
|
+
"command": "node \"$HOME/.claude/hooks/trail-autostart.mjs\"",
|
|
32
|
+
"timeout": 3
|
|
23
33
|
}
|
|
24
34
|
]
|
|
25
35
|
},
|
|
@@ -38,7 +48,7 @@
|
|
|
38
48
|
"hooks": [
|
|
39
49
|
{
|
|
40
50
|
"type": "command",
|
|
41
|
-
"command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/graph-gate.mjs\""
|
|
51
|
+
"command": "node \"${CLAUDE_PROJECT_DIR}/.claude/hooks/graph-gate.mjs\""
|
|
42
52
|
}
|
|
43
53
|
]
|
|
44
54
|
},
|
|
@@ -105,6 +115,14 @@
|
|
|
105
115
|
}
|
|
106
116
|
],
|
|
107
117
|
"UserPromptSubmit": [
|
|
118
|
+
{
|
|
119
|
+
"hooks": [
|
|
120
|
+
{
|
|
121
|
+
"type": "command",
|
|
122
|
+
"command": "node \"${CLAUDE_PROJECT_DIR}/.claude/hooks/go-token.mjs\""
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
108
126
|
{
|
|
109
127
|
"hooks": [
|
|
110
128
|
{
|
|
@@ -545,15 +545,20 @@ function reviewerStateNote() {
|
|
|
545
545
|
);
|
|
546
546
|
}
|
|
547
547
|
|
|
548
|
-
//
|
|
548
|
+
// Skills every node should know about (registry `common`), set once the registry is loaded.
|
|
549
|
+
let commonSkills = [];
|
|
550
|
+
|
|
551
|
+
// Injects the node's registry-declared skills plus the shared `common` set as
|
|
552
|
+
// the preferred skills. Other installed skills stay usable when they fit.
|
|
549
553
|
// Applies to every node, build and sequential alike.
|
|
550
554
|
function skillsNote(node) {
|
|
551
|
-
const
|
|
555
|
+
const own = Array.isArray(node?.skills) ? node.skills : [];
|
|
556
|
+
const skills = [...new Set([...commonSkills, ...own])];
|
|
552
557
|
const parts = [];
|
|
553
558
|
if (skills.length > 0) {
|
|
554
559
|
parts.push(
|
|
555
|
-
`
|
|
556
|
-
'
|
|
560
|
+
` Prefer these skills for this work: ${skills.join(', ')}. ` +
|
|
561
|
+
'Any other installed skill may be used when the task genuinely calls for it.'
|
|
557
562
|
);
|
|
558
563
|
}
|
|
559
564
|
// A --skill flag is a hard requirement from the user, not the registry's
|
|
@@ -693,6 +698,7 @@ const REGISTRY_SCHEMA = {
|
|
|
693
698
|
properties: {
|
|
694
699
|
version: { type: 'number' },
|
|
695
700
|
description: { type: 'string' },
|
|
701
|
+
common: { type: 'array', items: { type: 'string' } },
|
|
696
702
|
nodes: {
|
|
697
703
|
type: 'object',
|
|
698
704
|
minProperties: 1,
|
|
@@ -733,6 +739,7 @@ const registryResult = await agent(
|
|
|
733
739
|
);
|
|
734
740
|
|
|
735
741
|
const registryNodes = registryResult?.nodes ?? {};
|
|
742
|
+
commonSkills = Array.isArray(registryResult?.common) ? registryResult.common.filter((s) => typeof s === 'string') : [];
|
|
736
743
|
const missingNodeIds = REQUIRED_NODE_IDS.filter((id) => !registryNodes[id]);
|
|
737
744
|
if (missingNodeIds.length > 0) {
|
|
738
745
|
return await escalate(
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Implements:
|
|
5
5
|
* 1. tool.execute.before: Releases gatekeeper (go-gate). Guards outward-facing
|
|
6
6
|
* or hard-to-reverse actions (git push, npm publish, npm version, rm -rf)
|
|
7
|
-
* unless the user explicitly authorized it with the literal word "GO"
|
|
7
|
+
* unless the user explicitly authorized it with the literal word "GO", or a
|
|
8
|
+
* master session issued a GO token for this session (~/.aos/go/<name>.token).
|
|
8
9
|
* 2. chat.message: Ambient memory injection (memB). Injects relevant project & user
|
|
9
10
|
* memories as ephemeral context from ~/.MemBDB/memb.db via node:sqlite.
|
|
10
11
|
* 3. tool.execute.before/after: Best-effort live-map telemetry for the AOS
|
|
@@ -15,21 +16,15 @@
|
|
|
15
16
|
*/
|
|
16
17
|
|
|
17
18
|
import { existsSync, readFileSync } from 'node:fs';
|
|
18
|
-
import os from 'node:os';
|
|
19
19
|
import path from 'node:path';
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
/(?:^|[;&|]\s*)git\s+clean\s+-[a-zA-Z]*f\b/i,
|
|
29
|
-
/(?:^|[;&|]\s*)rm\s+(?:-\w*[rR]\w*|--recursive)\b/i,
|
|
30
|
-
];
|
|
31
|
-
|
|
32
|
-
let lastHumanPrompt = '';
|
|
21
|
+
// Decision logic lives in the shared hooks: installed copy next to this file
|
|
22
|
+
// (plugins/aos-hooks), else the repo's .claude/hooks. existsSync, not try/catch,
|
|
23
|
+
// so a broken installed hook fails loudly instead of silently falling back.
|
|
24
|
+
const HOOKS = existsSync(new URL('./aos-hooks/go-gate.mjs', import.meta.url)) ? './aos-hooks/' : '../../.claude/hooks/';
|
|
25
|
+
const hook = (f) => import(new URL(HOOKS + f, import.meta.url).href);
|
|
26
|
+
const [{ GUARDED_PATTERNS, tokenGrantsGo }, { issueGoToken }, { checkConventionalCommit }, { envFileReason }, { buildMemoryBlock }] =
|
|
27
|
+
await Promise.all(['go-gate.mjs', 'go-token.mjs', 'conventional-commits.mjs', 'env-file-protection.mjs', 'memb-inject.mjs'].map(hook));
|
|
33
28
|
|
|
34
29
|
// ---------------------------------------------------------------------------
|
|
35
30
|
// Graph gate (W-5, W-6)
|
|
@@ -125,14 +120,14 @@ function matchPipelineCommand(text) {
|
|
|
125
120
|
return PIPELINE_COMMANDS.find(c => c.name === m[1].toLowerCase()) || null;
|
|
126
121
|
}
|
|
127
122
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
123
|
+
// This session's name for the token: env (set by aos-acp / the user), else the
|
|
124
|
+
// OpenCode session title.
|
|
125
|
+
async function ownSessionName(client, sessionID) {
|
|
126
|
+
if (process.env.AOS_SESSION_NAME) return process.env.AOS_SESSION_NAME;
|
|
127
|
+
try {
|
|
128
|
+
const res = await client?.session?.get?.({ path: { id: sessionID } });
|
|
129
|
+
return res?.data?.title || '';
|
|
130
|
+
} catch { return ''; }
|
|
136
131
|
}
|
|
137
132
|
|
|
138
133
|
// Best-effort fire-and-forget telemetry for the AOS live map (agenttrail daemon).
|
|
@@ -179,83 +174,51 @@ function mapTrailToolInput(args, directory) {
|
|
|
179
174
|
return mapped;
|
|
180
175
|
}
|
|
181
176
|
|
|
182
|
-
//
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (!existsSync(dbPath)) return null;
|
|
187
|
-
|
|
177
|
+
// Live-map autostart: on the first subagent spawn per session, ensure the agenttrail map runs
|
|
178
|
+
// and show its URL. Best-effort; never affects the gate logic.
|
|
179
|
+
const trailSeen = new Set();
|
|
180
|
+
async function trailAutostart(toolInput, directory, client) {
|
|
188
181
|
try {
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
try {
|
|
199
|
-
for (const line of readFileSync(personaFile, 'utf8').split('\n')) {
|
|
200
|
-
const t = line.trim();
|
|
201
|
-
if (t && !t.startsWith('#')) contextItems.push(`- ${t}`);
|
|
202
|
-
}
|
|
203
|
-
} catch {}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// Resolve project ID candidate
|
|
207
|
-
let projectName = path.basename(currentDir);
|
|
208
|
-
const pkgPath = path.join(currentDir, 'package.json');
|
|
209
|
-
if (existsSync(pkgPath)) {
|
|
210
|
-
try {
|
|
211
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
212
|
-
if (pkg?.name) projectName = pkg.name;
|
|
213
|
-
} catch {}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Query project memories
|
|
217
|
-
try {
|
|
218
|
-
const sql = `
|
|
219
|
-
SELECT payload FROM memb_vectors
|
|
220
|
-
WHERE collection = 'bdb_agent_memory'
|
|
221
|
-
AND (
|
|
222
|
-
json_extract(payload, '$.project_id') = ?
|
|
223
|
-
OR json_extract(payload, '$.metadata.project_id') = ?
|
|
224
|
-
OR json_extract(payload, '$.project') = ?
|
|
225
|
-
OR json_extract(payload, '$.metadata.project') = ?
|
|
226
|
-
)
|
|
227
|
-
ORDER BY rowid DESC
|
|
228
|
-
LIMIT 3
|
|
229
|
-
`;
|
|
230
|
-
const rows = db.prepare(sql).all(projectName, projectName, projectName, projectName);
|
|
231
|
-
for (const r of rows) {
|
|
232
|
-
try {
|
|
233
|
-
const p = JSON.parse(r.payload);
|
|
234
|
-
const text = (p.memory || p.data || '').trim().replace(/\s+/g, ' ');
|
|
235
|
-
if (text.length > 10) {
|
|
236
|
-
contextItems.push(`- Project [${projectName}]: ${text.slice(0, 180)}`);
|
|
237
|
-
}
|
|
238
|
-
} catch {}
|
|
239
|
-
}
|
|
240
|
-
} catch {}
|
|
241
|
-
|
|
242
|
-
db.close();
|
|
243
|
-
|
|
244
|
-
if (contextItems.length === 0) return null;
|
|
245
|
-
return `[AOS Ambient Memory - memB]\n${contextItems.join('\n')}`;
|
|
246
|
-
} catch {
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
182
|
+
const lib = await import('./lib/trail-autostart.js');
|
|
183
|
+
if (!lib.isSpawnTool(toolInput.tool) || trailSeen.has(toolInput.sessionID)) return;
|
|
184
|
+
const r = lib.trailEnsure({ cwd: directory, sessionId: toolInput.sessionID });
|
|
185
|
+
if (!r) return;
|
|
186
|
+
trailSeen.add(toolInput.sessionID);
|
|
187
|
+
await client?.tui?.showToast?.({
|
|
188
|
+
body: { title: 'AOS agenttrail', message: r.url, variant: 'info' },
|
|
189
|
+
});
|
|
190
|
+
} catch {}
|
|
249
191
|
}
|
|
250
192
|
|
|
251
193
|
export default async function bdbAosPlugin(input) {
|
|
252
194
|
const directory = input.directory || process.cwd();
|
|
253
195
|
|
|
196
|
+
// ponytail: entries live for the process lifetime (a few bytes per session); add cleanup if sessions ever pile up.
|
|
197
|
+
const sessions = new Map();
|
|
198
|
+
const sess = (id) => {
|
|
199
|
+
if (!sessions.has(id)) sessions.set(id, { prompt: '', parentID: null, identitySent: false });
|
|
200
|
+
return sessions.get(id);
|
|
201
|
+
};
|
|
202
|
+
const trail = (hook_event_name, session_id, extra = {}) =>
|
|
203
|
+
void postTrail({ hook_event_name, session_id, cwd: directory, agent: 'opencode', ...extra });
|
|
204
|
+
|
|
254
205
|
return {
|
|
255
206
|
// W-6 loop-keeper. Fires whenever a session goes idle. Reads the graph
|
|
256
207
|
// state and, while work is still open, prompts the session to continue.
|
|
257
208
|
// Never throws: a graph that cannot be read must not wedge the session.
|
|
258
209
|
event: async ({ event }) => {
|
|
210
|
+
try {
|
|
211
|
+
const props = (event && event.properties) || {};
|
|
212
|
+
if (event?.type === 'session.created' && props.info?.id) {
|
|
213
|
+
sess(props.info.id).parentID = props.info.parentID ?? null;
|
|
214
|
+
trail('SessionStart', props.info.id);
|
|
215
|
+
} else if (event?.type === 'permission.updated') {
|
|
216
|
+
trail('Notification', props.sessionID, { message: props.title });
|
|
217
|
+
} else if (event?.type === 'session.idle' && props.sessionID) {
|
|
218
|
+
trail(sess(props.sessionID).parentID ? 'SubagentStop' : 'Stop', props.sessionID);
|
|
219
|
+
}
|
|
220
|
+
} catch {}
|
|
221
|
+
|
|
259
222
|
try {
|
|
260
223
|
if (!event || event.type !== 'session.idle') return;
|
|
261
224
|
const sessionID = event.properties && event.properties.sessionID;
|
|
@@ -283,16 +246,19 @@ export default async function bdbAosPlugin(input) {
|
|
|
283
246
|
},
|
|
284
247
|
|
|
285
248
|
'chat.message': async (msgInput, msgOutput) => {
|
|
286
|
-
|
|
287
|
-
const textParts = (msgOutput.parts || []).filter((p) => p && p.type === 'text' && typeof p.text === 'string');
|
|
249
|
+
const textParts = (msgOutput.parts || []).filter((p) => p && p.type === 'text' && typeof p.text === 'string' && !p.synthetic);
|
|
288
250
|
const fullText = textParts.map((p) => p.text).join('\n').trim();
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
251
|
+
const s = sess(msgInput.sessionID);
|
|
252
|
+
s.prompt = fullText;
|
|
253
|
+
|
|
254
|
+
try {
|
|
255
|
+
if (!s.parentID) issueGoToken(fullText, { session_id: msgInput.sessionID, message_id: msgInput.messageID || msgOutput.message?.id });
|
|
256
|
+
} catch {}
|
|
292
257
|
|
|
293
|
-
// Inject memB ambient memory
|
|
294
258
|
try {
|
|
295
|
-
const
|
|
259
|
+
const event = s.identitySent || s.parentID ? 'UserPromptSubmit' : 'SessionStart';
|
|
260
|
+
s.identitySent = true;
|
|
261
|
+
const membContext = await buildMemoryBlock({ event, prompt: fullText, cwd: directory });
|
|
296
262
|
if (membContext) {
|
|
297
263
|
msgOutput.parts.unshift({
|
|
298
264
|
id: `memb-${Date.now()}`,
|
|
@@ -336,47 +302,65 @@ export default async function bdbAosPlugin(input) {
|
|
|
336
302
|
const tool_name = mapTrailToolName(toolInput.tool);
|
|
337
303
|
const tool_input = mapTrailToolInput(toolOutput?.args, directory);
|
|
338
304
|
pendingArgs.set(toolInput.callID, tool_input);
|
|
339
|
-
|
|
340
|
-
hook_event_name: 'PreToolUse',
|
|
341
|
-
session_id: toolInput.sessionID,
|
|
342
|
-
cwd: directory,
|
|
343
|
-
agent: 'opencode',
|
|
344
|
-
tool_name,
|
|
345
|
-
tool_input,
|
|
346
|
-
});
|
|
305
|
+
trail('PreToolUse', toolInput.sessionID, { tool_name, tool_input });
|
|
347
306
|
} catch {}
|
|
307
|
+
await trailAutostart(toolInput, directory, input.client);
|
|
348
308
|
const toolName = (toolInput.tool || '').toLowerCase();
|
|
349
309
|
// Intercept bash, terminal, or command execution tools
|
|
350
310
|
if (toolName === 'bash' || toolName === 'terminal' || toolName === 'shell' || toolName === 'exec' || toolName === 'run_command') {
|
|
351
311
|
const cmd = toolOutput?.args?.command || toolOutput?.args?.cmd || toolOutput?.args?.script || '';
|
|
352
|
-
if (
|
|
353
|
-
|
|
312
|
+
if (typeof cmd === 'string' && GUARDED_PATTERNS.some((re) => re.test(cmd))) {
|
|
313
|
+
const s = sess(toolInput.sessionID);
|
|
314
|
+
// An unanswered lookup is not proof of a root session: token-only for this call, not cached.
|
|
315
|
+
let tokenOnly = !!s.parentID;
|
|
316
|
+
if (!tokenOnly && input.client && toolInput.sessionID) {
|
|
317
|
+
try {
|
|
318
|
+
const res = await input.client.session.get({ path: { id: toolInput.sessionID } });
|
|
319
|
+
if (res?.data) s.parentID = res.data.parentID ?? null;
|
|
320
|
+
else tokenOnly = true;
|
|
321
|
+
} catch { tokenOnly = true; }
|
|
322
|
+
tokenOnly = tokenOnly || !!s.parentID;
|
|
323
|
+
}
|
|
324
|
+
// Subagent prompts are agent-written, so only a token can open their gate.
|
|
325
|
+
let authorized = !tokenOnly && s.prompt.toUpperCase() === 'GO';
|
|
354
326
|
|
|
355
|
-
// If
|
|
356
|
-
if (!authorized && input.client && toolInput.sessionID) {
|
|
327
|
+
// If this session's cached prompt wasn't GO, query recent session messages via OpenCode client as fallback
|
|
328
|
+
if (!authorized && !tokenOnly && input.client && toolInput.sessionID) {
|
|
357
329
|
try {
|
|
358
330
|
const res = await input.client.session.messages({ path: { id: toolInput.sessionID } });
|
|
359
331
|
const msgs = res?.data || [];
|
|
360
332
|
for (let i = msgs.length - 1; i >= 0; i--) {
|
|
361
333
|
const m = msgs[i];
|
|
362
|
-
if (m.role === 'user') {
|
|
334
|
+
if ((m.info?.role ?? m.role) === 'user') {
|
|
363
335
|
const parts = m.parts || [];
|
|
364
|
-
const text = parts.filter((p) => p.type === 'text').map((p) => p.text).join('\n').trim();
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
break;
|
|
368
|
-
}
|
|
336
|
+
const text = parts.filter((p) => p.type === 'text' && !p.synthetic).map((p) => p.text).join('\n').trim();
|
|
337
|
+
authorized = text.toUpperCase() === 'GO';
|
|
338
|
+
break;
|
|
369
339
|
}
|
|
370
340
|
}
|
|
371
341
|
} catch {}
|
|
372
342
|
}
|
|
373
343
|
|
|
344
|
+
if (!authorized) {
|
|
345
|
+
authorized = tokenGrantsGo(await ownSessionName(input.client, toolInput.sessionID)).ok;
|
|
346
|
+
}
|
|
347
|
+
|
|
374
348
|
if (!authorized) {
|
|
375
349
|
throw new Error(
|
|
376
350
|
`Blocked by BDB go-gate: Command "${cmd.slice(0, 80)}" is guarded and requires explicit authorization with the literal word "GO" before proceeding.`
|
|
377
351
|
);
|
|
378
352
|
}
|
|
379
353
|
}
|
|
354
|
+
const reason = checkConventionalCommit(cmd);
|
|
355
|
+
if (reason) throw new Error(reason);
|
|
356
|
+
} else if (['write', 'edit', 'multiedit', 'patch', 'apply_patch'].includes(toolName)) {
|
|
357
|
+
const args = toolOutput?.args || {};
|
|
358
|
+
const paths = [args.filePath ?? ''];
|
|
359
|
+
for (const m of String(args.patchText ?? '').matchAll(/^\*\*\* (?:(?:Add|Update) File|Move to): (.+)$/gm)) paths.push(m[1].trim());
|
|
360
|
+
for (const f of paths) {
|
|
361
|
+
const reason = envFileReason(f);
|
|
362
|
+
if (reason) throw new Error(reason);
|
|
363
|
+
}
|
|
380
364
|
}
|
|
381
365
|
},
|
|
382
366
|
|
|
@@ -384,14 +368,7 @@ export default async function bdbAosPlugin(input) {
|
|
|
384
368
|
try {
|
|
385
369
|
const tool_input = pendingArgs.get(toolInput.callID);
|
|
386
370
|
pendingArgs.delete(toolInput.callID);
|
|
387
|
-
|
|
388
|
-
hook_event_name: 'PostToolUse',
|
|
389
|
-
session_id: toolInput.sessionID,
|
|
390
|
-
cwd: directory,
|
|
391
|
-
agent: 'opencode',
|
|
392
|
-
tool_name: mapTrailToolName(toolInput.tool),
|
|
393
|
-
tool_input,
|
|
394
|
-
});
|
|
371
|
+
trail('PostToolUse', toolInput.sessionID, { tool_name: mapTrailToolName(toolInput.tool), tool_input });
|
|
395
372
|
} catch {}
|
|
396
373
|
},
|
|
397
374
|
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode counterpart of the Claude PreToolUse agenttrail autostart.
|
|
3
|
+
* Pure and injectable so it is testable without OpenCode. Never throws.
|
|
4
|
+
* Tool args/prompts are deliberately not an input: nothing user-authored
|
|
5
|
+
* can reach the command line.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { spawnSync as realSpawnSync } from 'node:child_process';
|
|
9
|
+
|
|
10
|
+
export const TRAIL_TIMEOUT_MS = 1800;
|
|
11
|
+
export const SPAWN_TOOLS = new Set(['task']);
|
|
12
|
+
|
|
13
|
+
export function isSpawnTool(tool) {
|
|
14
|
+
return SPAWN_TOOLS.has(String(tool || '').toLowerCase());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Returns { url, hint } or null (no URL, binary missing, timeout, bad output).
|
|
18
|
+
export function trailEnsure({ spawnSync = realSpawnSync, env = process.env, cwd, sessionId } = {}) {
|
|
19
|
+
try {
|
|
20
|
+
const args = ['--ensure'];
|
|
21
|
+
if (cwd) args.push('--cwd', String(cwd));
|
|
22
|
+
if (sessionId) args.push('--session', String(sessionId));
|
|
23
|
+
args.push('--json');
|
|
24
|
+
const res = spawnSync(env.AOS_TRAIL_BIN || 'aos-trail', args, {
|
|
25
|
+
encoding: 'utf8',
|
|
26
|
+
timeout: TRAIL_TIMEOUT_MS,
|
|
27
|
+
killSignal: 'SIGKILL',
|
|
28
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
29
|
+
env,
|
|
30
|
+
});
|
|
31
|
+
if (!res || res.error || res.status !== 0) return null;
|
|
32
|
+
const out = JSON.parse(String(res.stdout || '').trim());
|
|
33
|
+
if (!out || typeof out.url !== 'string' || !out.url) return null;
|
|
34
|
+
return { url: out.url, hint: typeof out.hint === 'string' ? out.hint : null };
|
|
35
|
+
} catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
package/CLAUDE.md
CHANGED
|
@@ -23,7 +23,7 @@ These ship as Claude Code plugins and are the preferred path over shelling out
|
|
|
23
23
|
to the underlying CLI, because they already handle wrapper flags, cost
|
|
24
24
|
discipline, and the digest contract:
|
|
25
25
|
|
|
26
|
-
- `antigravity:
|
|
26
|
+
- `antigravity:delegate` — agy / Gemini
|
|
27
27
|
- `opencode:opencode-rescue`
|
|
28
28
|
- `codex:codex-rescue`
|
|
29
29
|
|
package/README.de.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
3
|
🌐 **Language / Sprache / Idioma**: [ 🇬🇧 English ](README.md) | **Deutsch** | [ 🇵🇹 Português ](README.pt.md)
|
|
4
4
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/hybridlabor-api/aos/actions)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
[](package.json)
|
|
14
|
-
[](#skills)
|
|
15
15
|
[](#mcp-server)
|
|
16
16
|
[](#unterstützte-harnesses)
|
|
17
17
|
[](https://github.com/NVIDIA/SkillSpector)
|
|
@@ -27,7 +27,7 @@ Entwickelt für Nutzer, die bereits **Claude Code, Google Antigravity, Codex CLI
|
|
|
27
27
|
|
|
28
28
|
Nach der Installation hast du:
|
|
29
29
|
|
|
30
|
-
- **<!-- count:skills -->
|
|
30
|
+
- **<!-- count:skills -->224<!-- /count --> Skills** in sechs Kategorien, von jedem Harness als `<name>/SKILL.md` auffindbar.
|
|
31
31
|
- **<!-- count:agents -->13<!-- /count --> Subagents** (Architect, TechLead, Reviewer, die Godmodes, Security- und Silent-Failure-Reviewer) als natives Agenten-Format jedes Harness kompiliert.
|
|
32
32
|
- **<!-- count:mcps -->21<!-- /count --> MCP-Server** für Creative Software, Betriebssystemsteuerung, Memory und Harness-übergreifende Delegation.
|
|
33
33
|
- **Drei Pipelines** — `/startcycle`, `/startcycle-graph`, `/startcycle-graph-user` — und ein **GO-Gate**, das `git push`, `npm publish`, `npm version` und rekursive `rm` mechanisch blockiert.
|
|
@@ -208,7 +208,7 @@ Installiere es durch den AOS Installer mit dem AOS CLI Target: `npx -y @hybridla
|
|
|
208
208
|
npx skills add hybridlabor-api/aos
|
|
209
209
|
```
|
|
210
210
|
|
|
211
|
-
Dies entdeckt alle <!-- count:skills -->
|
|
211
|
+
Dies entdeckt alle <!-- count:skills -->224<!-- /count --> kuratierten Skills und installiert sie in das universelle `~/.agents/skills` Verzeichnis (verwendet von allen Harnesses und dem AOS CLI).
|
|
212
212
|
|
|
213
213
|
---
|
|
214
214
|
|
|
@@ -249,7 +249,7 @@ Der Dispatcher-Graph kompiliert diese Agents, verfügbar als Claude Code Subagen
|
|
|
249
249
|
|
|
250
250
|
### Skills nach Kategorie
|
|
251
251
|
|
|
252
|
-
<!-- count:skills -->
|
|
252
|
+
<!-- count:skills -->224<!-- /count --> kuratierte Skills, von jedem Harness auffindbar:
|
|
253
253
|
|
|
254
254
|
- **bdb-core** (31 Skills): Core AOS Infrastruktur, Pipelines, Tools und Utilities — `startcycle`, `startcycle-graph`, `startcycle-graph-user`, `agent-orchestrator`, `agenttrail`, `plan-canvas`, `aos-doctor`, `aos-store`, `bdb-dev-os-skill` und mehr.
|
|
255
255
|
- **design-ui-ux** (19 Skills): Frontend, UI Design, Barrierefreiheit, Tokens, Motion, Anti-Slop — `senior-frontend`, `ui-component`, `ui-review`, `tailwind-patterns`, `shadcn`, `wcag-audit-patterns` und mehr.
|
|
@@ -264,7 +264,7 @@ Der vollständige Katalog mit detaillierten Beschreibungen: [docs/skills_table.m
|
|
|
264
264
|
|
|
265
265
|
## Skills
|
|
266
266
|
|
|
267
|
-
<!-- count:skills -->
|
|
267
|
+
<!-- count:skills -->224<!-- /count --> Skills, kuratiert aus Open-Source- und proprietären Sammlungen, die die gesamte Software-Entwicklung und Creative-Pipeline abdecken. Jeder Skill ist ein Verzeichnis mit einem `SKILL.md` Frontmatter, das `name`, `description` und eine `category` erklärt: `bdb-core`, `design-ui-ux`, `engineering-method`, `engineering-hardware`, `media-eventtech`, `library`.
|
|
268
268
|
|
|
269
269
|
**Persona Layer:** Die **Godmode** Skills sind spezialisierte Personas, die direkt den Build- und Shipping-Knoten des Dispatcher-Graphs zugeordnet sind:
|
|
270
270
|
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
3
|
🌐 **Language / Sprache / Idioma**: **English** | [ 🇩🇪 Deutsch ](README.de.md) | [ 🇵🇹 Português ](README.pt.md)
|
|
4
4
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/hybridlabor-api/aos/actions)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
[](package.json)
|
|
14
|
-
[](#skills)
|
|
15
15
|
[](#mcp-servers)
|
|
16
16
|
[](#supported-harnesses)
|
|
17
17
|
[](https://github.com/NVIDIA/SkillSpector)
|
|
@@ -27,7 +27,7 @@ Built for people who already run **Claude Code, Google Antigravity, Codex CLI, O
|
|
|
27
27
|
|
|
28
28
|
After install you have:
|
|
29
29
|
|
|
30
|
-
- **<!-- count:skills -->
|
|
30
|
+
- **<!-- count:skills -->224<!-- /count --> skills** in six categories, discoverable by every harness as `<name>/SKILL.md`.
|
|
31
31
|
- **<!-- count:agents -->13<!-- /count --> subagents** (Architect, TechLead, Reviewer, the Godmodes, security and silent-failure reviewers) compiled into each harness's native agent format.
|
|
32
32
|
- **<!-- count:mcps -->21<!-- /count --> MCP servers** for creative software, OS control, memory and cross-harness delegation.
|
|
33
33
|
- **Three pipelines** — `/startcycle`, `/startcycle-graph`, `/startcycle-graph-user` — and a **GO gate** that mechanically blocks `git push`, `npm publish`, `npm version` and recursive `rm`.
|
|
@@ -208,7 +208,7 @@ Install it through the AOS installer with the AOS CLI target: `npx -y @hybridlab
|
|
|
208
208
|
npx skills add hybridlabor-api/aos
|
|
209
209
|
```
|
|
210
210
|
|
|
211
|
-
This discovers all <!-- count:skills -->
|
|
211
|
+
This discovers all <!-- count:skills -->224<!-- /count --> curated skills and installs them into the universal `~/.agents/skills` directory (used by all harnesses and the AOS CLI).
|
|
212
212
|
|
|
213
213
|
---
|
|
214
214
|
|
|
@@ -249,7 +249,7 @@ The dispatcher graph compiles these agents, available as Claude Code subagents a
|
|
|
249
249
|
|
|
250
250
|
### Skills by Category
|
|
251
251
|
|
|
252
|
-
<!-- count:skills -->
|
|
252
|
+
<!-- count:skills -->224<!-- /count --> curated skills, discoverable by every harness:
|
|
253
253
|
|
|
254
254
|
- **bdb-core** (31 skills): Core AOS infrastructure, pipelines, tools, and utilities — `startcycle`, `startcycle-graph`, `startcycle-graph-user`, `agent-orchestrator`, `agenttrail`, `plan-canvas`, `aos-doctor`, `aos-store`, `bdb-dev-os-skill`, and more.
|
|
255
255
|
- **design-ui-ux** (19 skills): Frontend, UI design, accessibility, tokens, motion, anti-slop — `senior-frontend`, `ui-component`, `ui-review`, `tailwind-patterns`, `shadcn`, `wcag-audit-patterns`, and more.
|
|
@@ -264,7 +264,7 @@ The full catalog with detailed descriptions: [docs/skills_table.md](docs/skills_
|
|
|
264
264
|
|
|
265
265
|
## Skills
|
|
266
266
|
|
|
267
|
-
<!-- count:skills -->
|
|
267
|
+
<!-- count:skills -->224<!-- /count --> skills, curated from open-source and proprietary collections, covering the full software development and creative pipeline. Every skill is a directory with a `SKILL.md` frontmatter declaring `name`, `description`, and one `category`: `bdb-core`, `design-ui-ux`, `engineering-method`, `engineering-hardware`, `media-eventtech`, `library`.
|
|
268
268
|
|
|
269
269
|
**Persona Layer:** The **Godmode** skills are specialized personas that directly map to the build and ship nodes of the dispatcher graph:
|
|
270
270
|
|
package/README.pt.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
3
|
🌐 **Language / Sprache / Idioma**: [ 🇬🇧 English ](README.md) | [ 🇩🇪 Deutsch ](README.de.md) | **Português**
|
|
4
4
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/hybridlabor-api/aos/actions)
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
[](package.json)
|
|
14
|
-
[](#skills)
|
|
15
15
|
[](#servidores-mcp)
|
|
16
16
|
[](#harnesses-suportados)
|
|
17
17
|
[](https://github.com/NVIDIA/SkillSpector)
|
|
@@ -27,7 +27,7 @@ Construído para pessoas que já executam **Claude Code, Google Antigravity, Cod
|
|
|
27
27
|
|
|
28
28
|
Após a instalação, você tem:
|
|
29
29
|
|
|
30
|
-
- **<!-- count:skills -->
|
|
30
|
+
- **<!-- count:skills -->224<!-- /count --> skills** em seis categorias, descobríveis por cada harness como `<name>/SKILL.md`.
|
|
31
31
|
- **<!-- count:agents -->13<!-- /count --> subagentes** (Architect, TechLead, Reviewer, os Godmodes, revisores de segurança e falhas silenciosas) compilados em cada formato nativo de agente do harness.
|
|
32
32
|
- **<!-- count:mcps -->21<!-- /count --> servidores MCP** para software criativo, controle de SO, memória e delegação entre harnesses.
|
|
33
33
|
- **Três pipelines** — `/startcycle`, `/startcycle-graph`, `/startcycle-graph-user` — e um **portão GO** que bloqueia mecanicamente `git push`, `npm publish`, `npm version` e `rm` recursivo.
|
|
@@ -208,7 +208,7 @@ Instale através do instalador AOS com o alvo AOS CLI: `npx -y @hybridlabor-api/
|
|
|
208
208
|
npx skills add hybridlabor-api/aos
|
|
209
209
|
```
|
|
210
210
|
|
|
211
|
-
Isto descobre todas as <!-- count:skills -->
|
|
211
|
+
Isto descobre todas as <!-- count:skills -->224<!-- /count --> skills curadas e as instala no diretório universal `~/.agents/skills` (usado por todos os harnesses e o AOS CLI).
|
|
212
212
|
|
|
213
213
|
---
|
|
214
214
|
|
|
@@ -249,7 +249,7 @@ O grafo do dispatcher compila estes agentes, disponíveis como subagentes Claude
|
|
|
249
249
|
|
|
250
250
|
### Skills por Categoria
|
|
251
251
|
|
|
252
|
-
<!-- count:skills -->
|
|
252
|
+
<!-- count:skills -->224<!-- /count --> skills curadas, descobríveis por todo harness:
|
|
253
253
|
|
|
254
254
|
- **bdb-core** (31 skills): Infraestrutura AOS principal, pipelines, ferramentas e utilidades — `startcycle`, `startcycle-graph`, `startcycle-graph-user`, `agent-orchestrator`, `agenttrail`, `plan-canvas`, `aos-doctor`, `aos-store`, `bdb-dev-os-skill` e mais.
|
|
255
255
|
- **design-ui-ux** (19 skills): Frontend, design UI, acessibilidade, tokens, movimento, anti-slop — `senior-frontend`, `ui-component`, `ui-review`, `tailwind-patterns`, `shadcn`, `wcag-audit-patterns` e mais.
|
|
@@ -264,7 +264,7 @@ O catálogo completo com descrições detalhadas: [docs/skills_table.md](docs/sk
|
|
|
264
264
|
|
|
265
265
|
## Skills
|
|
266
266
|
|
|
267
|
-
<!-- count:skills -->
|
|
267
|
+
<!-- count:skills -->224<!-- /count --> skills, curadas de coleções de código aberto e proprietárias, cobrindo o pipeline completo de desenvolvimento de software e criativo. Cada skill é um diretório com um `SKILL.md` frontmatter declarando `name`, `description` e uma `category`: `bdb-core`, `design-ui-ux`, `engineering-method`, `engineering-hardware`, `media-eventtech`, `library`.
|
|
268
268
|
|
|
269
269
|
**Camada de Persona:** As skills **Godmode** são personas especializadas que mapeiam diretamente para os nós de compilação e envio do grafo do dispatcher:
|
|
270
270
|
|