ma-agents 2.9.0 → 2.11.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/.antigravity/skills/.ma-agents.json +14 -0
- package/.antigravity/skills/MANIFEST.yaml +7 -0
- package/.antigravity/skills/docker-image-signing/SKILL.md +28 -0
- package/.antigravity/skills/docker-image-signing/scripts/sign-image.sh +33 -0
- package/bin/cli.js +4 -2
- package/lib/agents.js +13 -13
- package/lib/bmad.js +14 -6
- package/lib/installer.js +1 -1
- package/package.json +1 -1
- /package/{CLAUDE.md → .antigravity/antigravity.md} +0 -0
- /package/lib/bmad-customizations/{cyber.customize.yaml → bmm-cyber.customize.yaml} +0 -0
- /package/lib/bmad-customizations/{devops.customize.yaml → bmm-devops.customize.yaml} +0 -0
- /package/lib/bmad-customizations/{sre.customize.yaml → bmm-sre.customize.yaml} +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestVersion": "1.0.0",
|
|
3
|
+
"agent": "antigravity",
|
|
4
|
+
"scope": "project",
|
|
5
|
+
"skills": {
|
|
6
|
+
"docker-image-signing": {
|
|
7
|
+
"version": "1.0.0",
|
|
8
|
+
"installedAt": "2026-03-01T10:05:53.821Z",
|
|
9
|
+
"updatedAt": "2026-03-01T10:05:53.821Z",
|
|
10
|
+
"installerVersion": "2.10.0",
|
|
11
|
+
"agentVersion": "1.0.0"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Docker Image Signing
|
|
3
|
+
description: Automates the signing of Docker images using certificates and Cosign/Notary.
|
|
4
|
+
---
|
|
5
|
+
# Docker Image Signing
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
Ensure the integrity and authenticity of Docker images by signing them with a cryptographic key/certificate. This prevents unauthorized image substitution and ensures only trusted images are deployed.
|
|
9
|
+
|
|
10
|
+
## Instructions
|
|
11
|
+
1. **Tool Selection**: Use `cosign` (recommended) or `notary`.
|
|
12
|
+
2. **Environment Check**: Verify that the signing tool and Docker/Podman are installed.
|
|
13
|
+
3. **Signing Process**:
|
|
14
|
+
- Load the provided certificate/key.
|
|
15
|
+
- Run the signing command against the target image (using its SHA256 digest for immutability).
|
|
16
|
+
4. **Verification**: Always run a verification check immediately after signing.
|
|
17
|
+
|
|
18
|
+
## Rules
|
|
19
|
+
- NEVER sign images by tag alone; use the immutable digest (e.g., `image@sha256:...`).
|
|
20
|
+
- Private keys must be handled as secrets and never stored in the clear.
|
|
21
|
+
- Ensure the certificate provided is valid and not expired.
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
Run the provided script in `scripts/sign-image.sh` with:
|
|
25
|
+
- `IMAGE`: The image reference with digest.
|
|
26
|
+
- `CERT`: Path to the certificate file.
|
|
27
|
+
- `KEY`: Path to the private key file.
|
|
28
|
+
- `PASSPHRASE`: (Optional) Key passphrase.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# sign-image.sh - Part of ma-agents docker-image-signing skill
|
|
3
|
+
|
|
4
|
+
IMAGE=$1
|
|
5
|
+
CERT=$2
|
|
6
|
+
KEY=$3
|
|
7
|
+
PASSPHRASE=$4
|
|
8
|
+
|
|
9
|
+
if [ -z "$IMAGE" ] || [ -z "$CERT" ] || [ -z "$KEY" ]; then
|
|
10
|
+
echo "Usage: $0 <image_digest> <cert_file> <key_file> [passphrase]"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
echo "Signing image: $IMAGE"
|
|
15
|
+
|
|
16
|
+
# Check for cosign
|
|
17
|
+
if command -v cosign &> /dev/null; then
|
|
18
|
+
echo "Using Cosign for signing..."
|
|
19
|
+
if [ -n "$PASSPHRASE" ]; then
|
|
20
|
+
export COSIGN_PASSWORD=$PASSPHRASE
|
|
21
|
+
fi
|
|
22
|
+
cosign sign --key "$KEY" --cert "$CERT" "$IMAGE"
|
|
23
|
+
else
|
|
24
|
+
echo "Error: cosign not found. Please install cosign to use this skill."
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
if [ $? -eq 0 ]; then
|
|
29
|
+
echo "Successfully signed $IMAGE"
|
|
30
|
+
else
|
|
31
|
+
echo "Failed to sign $IMAGE"
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
package/bin/cli.js
CHANGED
|
@@ -281,7 +281,8 @@ async function installWizard(preselectedSkill, preselectedAgents, customPath, fo
|
|
|
281
281
|
|
|
282
282
|
if (installBmad) {
|
|
283
283
|
console.log(chalk.cyan('\n Installing BMAD-METHOD...'));
|
|
284
|
-
const
|
|
284
|
+
const bmadTools = selectedAgentIds.filter(id => ['claude-code', 'cursor', 'cline', 'gemini', 'antigravity'].includes(id));
|
|
285
|
+
const success = await bmad.installBmad(['bmm', 'bmb'], bmadTools);
|
|
285
286
|
if (success) {
|
|
286
287
|
console.log(chalk.green(' BMAD-METHOD installed successfully!'));
|
|
287
288
|
console.log(chalk.cyan(' Applying ma-agents customizations...'));
|
|
@@ -298,7 +299,8 @@ async function installWizard(preselectedSkill, preselectedAgents, customPath, fo
|
|
|
298
299
|
|
|
299
300
|
if (updateBmad) {
|
|
300
301
|
console.log(chalk.cyan('\n Updating BMAD-METHOD...'));
|
|
301
|
-
const
|
|
302
|
+
const bmadTools = selectedAgentIds.filter(id => ['claude-code', 'cursor', 'cline', 'gemini', 'antigravity'].includes(id));
|
|
303
|
+
const success = await bmad.updateBmad(['bmm', 'bmb'], bmadTools);
|
|
302
304
|
if (success) {
|
|
303
305
|
console.log(chalk.green(' BMAD-METHOD updated successfully!'));
|
|
304
306
|
console.log(chalk.cyan(' Re-applying ma-agents customizations...'));
|
package/lib/agents.js
CHANGED
|
@@ -32,7 +32,7 @@ const agents = [
|
|
|
32
32
|
},
|
|
33
33
|
fileExtension: '.md',
|
|
34
34
|
template: 'claude-code',
|
|
35
|
-
instructionFiles: ['CLAUDE.md']
|
|
35
|
+
instructionFiles: ['.claude/CLAUDE.md']
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
id: 'gemini',
|
|
@@ -52,7 +52,7 @@ const agents = [
|
|
|
52
52
|
},
|
|
53
53
|
fileExtension: '.md',
|
|
54
54
|
template: 'generic',
|
|
55
|
-
instructionFiles: []
|
|
55
|
+
instructionFiles: ['.gemini/gemini.md']
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
id: 'copilot',
|
|
@@ -72,7 +72,7 @@ const agents = [
|
|
|
72
72
|
},
|
|
73
73
|
fileExtension: '.md',
|
|
74
74
|
template: 'generic',
|
|
75
|
-
instructionFiles: [
|
|
75
|
+
instructionFiles: ['.github/copilot/copilot.md']
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
id: 'kilocode',
|
|
@@ -92,7 +92,7 @@ const agents = [
|
|
|
92
92
|
},
|
|
93
93
|
fileExtension: '.md',
|
|
94
94
|
template: 'generic',
|
|
95
|
-
instructionFiles: []
|
|
95
|
+
instructionFiles: ['.kilocode/kilocode.md']
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
id: 'cline',
|
|
@@ -117,7 +117,7 @@ const agents = [
|
|
|
117
117
|
'references': 'docs',
|
|
118
118
|
'assets': 'templates'
|
|
119
119
|
},
|
|
120
|
-
instructionFiles: ['.clinerules']
|
|
120
|
+
instructionFiles: ['.cline/clinerules.md', '.clinerules']
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
123
|
id: 'cursor',
|
|
@@ -137,10 +137,10 @@ const agents = [
|
|
|
137
137
|
},
|
|
138
138
|
fileExtension: '.md',
|
|
139
139
|
template: 'generic',
|
|
140
|
-
instructionFiles: [
|
|
140
|
+
instructionFiles: ['.cursor/cursor.md']
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
|
-
id: 'sre',
|
|
143
|
+
id: 'bmm-sre',
|
|
144
144
|
name: 'SRE Agent',
|
|
145
145
|
version: '1.0.0',
|
|
146
146
|
description: 'Specialized SRE Agent for BMAD-METHOD',
|
|
@@ -157,7 +157,7 @@ const agents = [
|
|
|
157
157
|
},
|
|
158
158
|
fileExtension: '.md',
|
|
159
159
|
template: 'generic',
|
|
160
|
-
instructionFiles: []
|
|
160
|
+
instructionFiles: ['.sre/sre.md']
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
id: 'antigravity',
|
|
@@ -177,10 +177,10 @@ const agents = [
|
|
|
177
177
|
},
|
|
178
178
|
fileExtension: '.md',
|
|
179
179
|
template: 'generic',
|
|
180
|
-
instructionFiles: []
|
|
180
|
+
instructionFiles: ['.antigravity/antigravity.md']
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
|
-
id: 'devops',
|
|
183
|
+
id: 'bmm-devops',
|
|
184
184
|
name: 'DevOps Agent',
|
|
185
185
|
version: '1.0.0',
|
|
186
186
|
description: 'Specialized DevOps Agent for BMAD-METHOD',
|
|
@@ -197,10 +197,10 @@ const agents = [
|
|
|
197
197
|
},
|
|
198
198
|
fileExtension: '.md',
|
|
199
199
|
template: 'generic',
|
|
200
|
-
instructionFiles: []
|
|
200
|
+
instructionFiles: ['.devops/devops.md']
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
|
-
id: 'cyber',
|
|
203
|
+
id: 'bmm-cyber',
|
|
204
204
|
name: 'Cyber Analyst',
|
|
205
205
|
version: '1.0.0',
|
|
206
206
|
description: 'Specialized Cyber Security Analyst (Yael) for BMAD-METHOD',
|
|
@@ -217,7 +217,7 @@ const agents = [
|
|
|
217
217
|
},
|
|
218
218
|
fileExtension: '.md',
|
|
219
219
|
template: 'generic',
|
|
220
|
-
instructionFiles: []
|
|
220
|
+
instructionFiles: ['.cyber/yael.md']
|
|
221
221
|
}
|
|
222
222
|
];
|
|
223
223
|
|
package/lib/bmad.js
CHANGED
|
@@ -10,11 +10,15 @@ function isBmadInstalled(projectRoot = process.cwd()) {
|
|
|
10
10
|
return fs.existsSync(path.join(projectRoot, BMAD_DIR));
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
async function installBmad(
|
|
13
|
+
async function installBmad(modules = ['bmm', 'bmb'], tools = [], projectRoot = process.cwd()) {
|
|
14
14
|
let command = 'npx bmad-method install --yes';
|
|
15
15
|
|
|
16
|
-
if (
|
|
17
|
-
command += ` --
|
|
16
|
+
if (modules && modules.length > 0) {
|
|
17
|
+
command += ` --modules ${modules.join(',')}`;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (tools && tools.length > 0) {
|
|
21
|
+
command += ` --tools ${tools.join(',')}`;
|
|
18
22
|
} else {
|
|
19
23
|
command += ' --tools none';
|
|
20
24
|
}
|
|
@@ -29,11 +33,15 @@ async function installBmad(agentIds, projectRoot = process.cwd()) {
|
|
|
29
33
|
}
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
async function updateBmad(
|
|
36
|
+
async function updateBmad(modules = ['bmm', 'bmb'], tools = [], projectRoot = process.cwd()) {
|
|
33
37
|
let command = 'npx bmad-method install --action update --yes';
|
|
34
38
|
|
|
35
|
-
if (
|
|
36
|
-
command += ` --
|
|
39
|
+
if (modules && modules.length > 0) {
|
|
40
|
+
command += ` --modules ${modules.join(',')}`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (tools && tools.length > 0) {
|
|
44
|
+
command += ` --tools ${tools.join(',')}`;
|
|
37
45
|
}
|
|
38
46
|
|
|
39
47
|
console.log(chalk.gray(` Running: ${command}`));
|
package/lib/installer.js
CHANGED
|
@@ -125,7 +125,7 @@ Do not load skills that are not relevant to the current task.
|
|
|
125
125
|
content = wrappedInstruction;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
await fs.
|
|
128
|
+
await fs.outputFile(filePath, content, 'utf-8');
|
|
129
129
|
console.log(chalk.cyan(` + Updated ${fileName}`));
|
|
130
130
|
}
|
|
131
131
|
}
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|