ma-agents 2.10.0 → 2.12.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/_bmad/bmm/agents/sre.md +14 -0
- package/_bmad/skills/sre/.ma-agents.json +14 -0
- package/_bmad/skills/sre/MANIFEST.yaml +7 -0
- package/_bmad/skills/sre/docker-image-signing/SKILL.md +28 -0
- package/_bmad/skills/sre/docker-image-signing/scripts/sign-image.sh +33 -0
- package/lib/agents.js +14 -14
- package/lib/installer.js +5 -2
- package/package.json +1 -1
- /package/{CLAUDE.md → .antigravity/antigravity.md} +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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
<!-- MA-AGENTS-START -->
|
|
3
|
+
# AI Agent Skills - Planning Instruction
|
|
4
|
+
|
|
5
|
+
You have access to a library of skills in your skills directory. Before starting any task:
|
|
6
|
+
|
|
7
|
+
1. Read the skill manifest at _bmad/skills/sre/MANIFEST.yaml
|
|
8
|
+
2. Based on the task description, select which skills are relevant
|
|
9
|
+
3. Read only the selected skill files
|
|
10
|
+
4. Then proceed with the task
|
|
11
|
+
|
|
12
|
+
Always load skills marked with always_load: true.
|
|
13
|
+
Do not load skills that are not relevant to the current task.
|
|
14
|
+
<!-- MA-AGENTS-END -->
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifestVersion": "1.0.0",
|
|
3
|
+
"agent": "bmm-sre",
|
|
4
|
+
"scope": "project",
|
|
5
|
+
"skills": {
|
|
6
|
+
"docker-image-signing": {
|
|
7
|
+
"version": "1.0.0",
|
|
8
|
+
"installedAt": "2026-03-01T10:23:35.941Z",
|
|
9
|
+
"updatedAt": "2026-03-01T10:23:35.941Z",
|
|
10
|
+
"installerVersion": "2.11.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/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,14 +137,14 @@ const agents = [
|
|
|
137
137
|
},
|
|
138
138
|
fileExtension: '.md',
|
|
139
139
|
template: 'generic',
|
|
140
|
-
instructionFiles: [
|
|
140
|
+
instructionFiles: ['.cursor/cursor.md']
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
id: 'bmm-sre',
|
|
144
144
|
name: 'SRE Agent',
|
|
145
145
|
version: '1.0.0',
|
|
146
146
|
description: 'Specialized SRE Agent for BMAD-METHOD',
|
|
147
|
-
getProjectPath: () => path.join(process.cwd(), '
|
|
147
|
+
getProjectPath: () => path.join(process.cwd(), '_bmad', 'skills', 'sre'),
|
|
148
148
|
getGlobalPath: () => {
|
|
149
149
|
const platform = os.platform();
|
|
150
150
|
if (platform === 'win32') {
|
|
@@ -157,14 +157,14 @@ const agents = [
|
|
|
157
157
|
},
|
|
158
158
|
fileExtension: '.md',
|
|
159
159
|
template: 'generic',
|
|
160
|
-
instructionFiles: []
|
|
160
|
+
instructionFiles: ['_bmad/bmm/agents/sre.md']
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
id: 'antigravity',
|
|
164
164
|
name: 'Antigravity',
|
|
165
165
|
version: '1.0.0',
|
|
166
166
|
description: 'Google Deepmind Antigravity Agent',
|
|
167
|
-
getProjectPath: () => path.join(process.cwd(), '
|
|
167
|
+
getProjectPath: () => path.join(process.cwd(), '_bmad', 'skills', 'antigravity'),
|
|
168
168
|
getGlobalPath: () => {
|
|
169
169
|
const platform = os.platform();
|
|
170
170
|
if (platform === 'win32') {
|
|
@@ -177,14 +177,14 @@ const agents = [
|
|
|
177
177
|
},
|
|
178
178
|
fileExtension: '.md',
|
|
179
179
|
template: 'generic',
|
|
180
|
-
instructionFiles: []
|
|
180
|
+
instructionFiles: ['_bmad/bmm/agents/antigravity.md']
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
id: 'bmm-devops',
|
|
184
184
|
name: 'DevOps Agent',
|
|
185
185
|
version: '1.0.0',
|
|
186
186
|
description: 'Specialized DevOps Agent for BMAD-METHOD',
|
|
187
|
-
getProjectPath: () => path.join(process.cwd(), '
|
|
187
|
+
getProjectPath: () => path.join(process.cwd(), '_bmad', 'skills', 'devops'),
|
|
188
188
|
getGlobalPath: () => {
|
|
189
189
|
const platform = os.platform();
|
|
190
190
|
if (platform === 'win32') {
|
|
@@ -197,14 +197,14 @@ const agents = [
|
|
|
197
197
|
},
|
|
198
198
|
fileExtension: '.md',
|
|
199
199
|
template: 'generic',
|
|
200
|
-
instructionFiles: []
|
|
200
|
+
instructionFiles: ['_bmad/bmm/agents/devops.md']
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
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',
|
|
207
|
-
getProjectPath: () => path.join(process.cwd(), '
|
|
207
|
+
getProjectPath: () => path.join(process.cwd(), '_bmad', 'skills', 'yael'),
|
|
208
208
|
getGlobalPath: () => {
|
|
209
209
|
const platform = os.platform();
|
|
210
210
|
if (platform === 'win32') {
|
|
@@ -217,7 +217,7 @@ const agents = [
|
|
|
217
217
|
},
|
|
218
218
|
fileExtension: '.md',
|
|
219
219
|
template: 'generic',
|
|
220
|
-
instructionFiles: []
|
|
220
|
+
instructionFiles: ['_bmad/bmm/agents/cyber.md']
|
|
221
221
|
}
|
|
222
222
|
];
|
|
223
223
|
|
package/lib/installer.js
CHANGED
|
@@ -90,12 +90,15 @@ async function generateSkillsManifest(installPath, agent) {
|
|
|
90
90
|
async function updateAgentInstructions(agent, projectRoot) {
|
|
91
91
|
if (!agent.instructionFiles || agent.instructionFiles.length === 0) return;
|
|
92
92
|
|
|
93
|
+
const agentProjectPath = agent.getProjectPath();
|
|
94
|
+
const relManifestPath = path.relative(process.cwd(), path.join(agentProjectPath, 'MANIFEST.yaml')).replace(/\\/g, '/');
|
|
95
|
+
|
|
93
96
|
const planningInstruction = `
|
|
94
97
|
# AI Agent Skills - Planning Instruction
|
|
95
98
|
|
|
96
99
|
You have access to a library of skills in your skills directory. Before starting any task:
|
|
97
100
|
|
|
98
|
-
1. Read the skill manifest at
|
|
101
|
+
1. Read the skill manifest at ${relManifestPath}
|
|
99
102
|
2. Based on the task description, select which skills are relevant
|
|
100
103
|
3. Read only the selected skill files
|
|
101
104
|
4. Then proceed with the task
|
|
@@ -125,7 +128,7 @@ Do not load skills that are not relevant to the current task.
|
|
|
125
128
|
content = wrappedInstruction;
|
|
126
129
|
}
|
|
127
130
|
|
|
128
|
-
await fs.
|
|
131
|
+
await fs.outputFile(filePath, content, 'utf-8');
|
|
129
132
|
console.log(chalk.cyan(` + Updated ${fileName}`));
|
|
130
133
|
}
|
|
131
134
|
}
|
package/package.json
CHANGED
|
File without changes
|