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.
@@ -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,7 @@
1
+ # skills/MANIFEST.yaml
2
+
3
+ skills:
4
+ - id: docker-image-signing
5
+ file: skills/docker-image-signing/SKILL.md
6
+ description: Automates the signing of Docker images using certificates and Cosign/Notary.
7
+
@@ -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 success = await bmad.installBmad(selectedAgentIds);
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 success = await bmad.updateBmad(selectedAgentIds);
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: [] // Gemini doesn't have a standard project-level instruction file yet
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: [] // Copilot uses path-scoped instructions, maybe support .github/instructions/ later
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: [] // Cursor uses .cursorrules or individual .mdc files
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(agentIds, projectRoot = process.cwd()) {
13
+ async function installBmad(modules = ['bmm', 'bmb'], tools = [], projectRoot = process.cwd()) {
14
14
  let command = 'npx bmad-method install --yes';
15
15
 
16
- if (agentIds && agentIds.length > 0) {
17
- command += ` --tools ${agentIds.join(',')}`;
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(agentIds, projectRoot = process.cwd()) {
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 (agentIds && agentIds.length > 0) {
36
- command += ` --tools ${agentIds.join(',')}`;
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.writeFile(filePath, content, 'utf-8');
128
+ await fs.outputFile(filePath, content, 'utf-8');
129
129
  console.log(chalk.cyan(` + Updated ${fileName}`));
130
130
  }
131
131
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ma-agents",
3
- "version": "2.9.0",
3
+ "version": "2.11.0",
4
4
  "description": "NPX tool to install skills for AI coding agents (Claude Code, Gemini, Copilot, Kilocode, Cline, Cursor)",
5
5
  "main": "index.js",
6
6
  "bin": {
File without changes