hackmyagent 0.1.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,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * HackMyAgent CLI
4
+ * Security scanning tool for AI agents
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
package/dist/index.js ADDED
@@ -0,0 +1,447 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * HackMyAgent CLI
5
+ * Security scanning tool for AI agents
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const commander_1 = require("commander");
9
+ const hackmyagent_core_1 = require("hackmyagent-core");
10
+ const program = new commander_1.Command();
11
+ // Check for NO_COLOR env or non-TTY to disable colors by default
12
+ const noColorEnv = process.env.NO_COLOR !== undefined || process.stdout.isTTY === false;
13
+ // Color codes - will be cleared if --no-color is passed
14
+ let colors = {
15
+ green: '\x1b[32m',
16
+ yellow: '\x1b[33m',
17
+ red: '\x1b[31m',
18
+ brightRed: '\x1b[91m',
19
+ cyan: '\x1b[36m',
20
+ reset: '\x1b[0m',
21
+ };
22
+ if (noColorEnv) {
23
+ colors = { green: '', yellow: '', red: '', brightRed: '', cyan: '', reset: '' };
24
+ }
25
+ program
26
+ .name('hackmyagent')
27
+ .description(`Security toolkit for AI agents
28
+
29
+ HackMyAgent helps you secure AI agent deployments with 100+ security checks
30
+ across credential exposure, MCP configurations, prompt injection defenses,
31
+ and infrastructure hardening.
32
+
33
+ Documentation: https://github.com/ecolibria/hackmyagent
34
+
35
+ Examples:
36
+ $ hackmyagent check @anthropic/claude-mcp Verify skill before installing
37
+ $ hackmyagent secure Scan current directory
38
+ $ hackmyagent secure --fix Auto-fix security issues
39
+ $ hackmyagent secure --fix --dry-run Preview fixes without applying
40
+ $ hackmyagent scan example.com Scan external infrastructure`)
41
+ .version(hackmyagent_core_1.VERSION, '-V, --version', 'Output the version number')
42
+ .option('--no-color', 'Disable colored output (also respects NO_COLOR env)')
43
+ .hook('preAction', (thisCommand) => {
44
+ const opts = thisCommand.opts();
45
+ if (opts.color === false) {
46
+ colors = { green: '', yellow: '', red: '', brightRed: '', cyan: '', reset: '' };
47
+ }
48
+ });
49
+ // Risk level colors and symbols
50
+ const RISK_DISPLAY = {
51
+ low: { symbol: 'āœ…', color: () => colors.green },
52
+ medium: { symbol: 'āš ļø', color: () => colors.yellow },
53
+ high: { symbol: 'šŸ”“', color: () => colors.red },
54
+ critical: { symbol: '🚨', color: () => colors.brightRed },
55
+ };
56
+ const RESET = () => colors.reset;
57
+ program
58
+ .command('check')
59
+ .description(`Verify a skill before installing
60
+
61
+ Analyzes skill safety by checking:
62
+ • Publisher identity via DNS TXT records
63
+ • Permissions requested (filesystem, network, shell)
64
+ • Revocation status against global blocklist
65
+
66
+ Risk levels: low, medium, high, critical
67
+ Exit code 1 if high/critical risk detected.
68
+
69
+ Examples:
70
+ $ hackmyagent check @anthropic/claude-mcp
71
+ $ hackmyagent check @publisher/skill --verbose
72
+ $ hackmyagent check @publisher/skill --json`)
73
+ .argument('<skill>', 'Skill identifier (e.g., @publisher/skill)')
74
+ .option('-v, --verbose', 'Show detailed verification info')
75
+ .option('--json', 'Output as JSON (for scripting/CI)')
76
+ .option('--offline', 'Skip DNS verification (offline mode)')
77
+ .action(async (skill, options) => {
78
+ try {
79
+ const result = await (0, hackmyagent_core_1.checkSkill)(skill, {
80
+ skipDnsVerification: options.offline,
81
+ });
82
+ if (options.json) {
83
+ console.log(JSON.stringify(result, null, 2));
84
+ return;
85
+ }
86
+ const risk = RISK_DISPLAY[result.risk];
87
+ console.log(`\n${risk.color()}${risk.symbol} ${result.risk.toUpperCase()} RISK${RESET()}\n`);
88
+ // Publisher info
89
+ console.log(`Publisher: @${result.publisher.name}`);
90
+ if (result.publisher.verified) {
91
+ console.log(`ā”œā”€ āœ… Verified via DNS`);
92
+ if (result.publisher.domain) {
93
+ console.log(`ā”œā”€ 🌐 Domain: ${result.publisher.domain}`);
94
+ }
95
+ if (result.publisher.verifiedAt && options.verbose) {
96
+ console.log(`└─ šŸ“… Verified at: ${result.publisher.verifiedAt.toISOString()}`);
97
+ }
98
+ else {
99
+ console.log(`└─ Method: DNS TXT record`);
100
+ }
101
+ }
102
+ else {
103
+ console.log(`ā”œā”€ āŒ Not verified`);
104
+ if (result.publisher.failureReason && options.verbose) {
105
+ console.log(`└─ Reason: ${result.publisher.failureReason}`);
106
+ }
107
+ else if (options.offline) {
108
+ console.log(`└─ (DNS verification skipped - offline mode)`);
109
+ }
110
+ else {
111
+ console.log(`└─ No valid DNS TXT record found`);
112
+ }
113
+ }
114
+ console.log();
115
+ // Permissions
116
+ console.log('Permissions:');
117
+ if (result.permissions.requested.length === 0) {
118
+ console.log('└─ None declared');
119
+ }
120
+ else {
121
+ for (const perm of result.permissions.safe) {
122
+ console.log(`ā”œā”€ āœ… ${perm}`);
123
+ }
124
+ for (const perm of result.permissions.reviewNeeded) {
125
+ console.log(`ā”œā”€ āš ļø ${perm} (review needed)`);
126
+ }
127
+ for (const perm of result.permissions.dangerous) {
128
+ console.log(`ā”œā”€ āŒ ${perm} (DANGEROUS)`);
129
+ }
130
+ console.log(`└─ Risk score: ${result.permissions.riskScore}/100`);
131
+ }
132
+ console.log();
133
+ // Revocation
134
+ console.log('Revocation:');
135
+ if (result.revocation.revoked) {
136
+ console.log(`└─ 🚨 REVOKED: ${result.revocation.reason}`);
137
+ }
138
+ else {
139
+ console.log(`└─ āœ… Not on blocklist`);
140
+ }
141
+ console.log();
142
+ // Verbose details
143
+ if (options.verbose) {
144
+ console.log('Details:');
145
+ console.log(`└─ Checked at: ${result.revocation.checkedAt.toISOString()}`);
146
+ }
147
+ // Exit with non-zero for high/critical risk
148
+ if (result.risk === 'critical' || result.risk === 'high') {
149
+ process.exit(1);
150
+ }
151
+ }
152
+ catch (error) {
153
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
154
+ process.exit(1);
155
+ }
156
+ });
157
+ // Severity colors and symbols for secure command
158
+ const SEVERITY_DISPLAY = {
159
+ critical: { symbol: 'šŸ”“', color: () => colors.brightRed },
160
+ high: { symbol: '🟠', color: () => colors.red },
161
+ medium: { symbol: '🟔', color: () => colors.yellow },
162
+ low: { symbol: '🟢', color: () => colors.green },
163
+ };
164
+ function groupFindingsBySeverity(findings) {
165
+ const grouped = {
166
+ critical: [],
167
+ high: [],
168
+ medium: [],
169
+ low: [],
170
+ };
171
+ for (const finding of findings) {
172
+ grouped[finding.severity].push(finding);
173
+ }
174
+ return grouped;
175
+ }
176
+ program
177
+ .command('secure')
178
+ .description(`Scan and harden your agent setup
179
+
180
+ Performs 100 security checks across 24 categories:
181
+ • Credentials: API key exposure, secrets in configs
182
+ • MCP: Server configs, tool permissions, secrets
183
+ • Network: TLS, interface bindings, CORS
184
+ • Prompt: Injection defenses, role protection
185
+ • Encryption: At-rest encryption, secure hashing
186
+ • And 19 more categories...
187
+
188
+ Severities: critical, high, medium, low
189
+ Exit code 1 if critical/high issues found.
190
+
191
+ Examples:
192
+ $ hackmyagent secure Scan current directory
193
+ $ hackmyagent secure ./my-project Scan specific directory
194
+ $ hackmyagent secure --fix Auto-fix issues
195
+ $ hackmyagent secure --fix --dry-run Preview fixes
196
+ $ hackmyagent secure --ignore CRED-001 Skip specific checks
197
+ $ hackmyagent secure --json JSON output for CI`)
198
+ .argument('[directory]', 'Directory to scan (defaults to current directory)', '.')
199
+ .option('--fix', 'Automatically fix issues where possible')
200
+ .option('--dry-run', 'Preview fixes without applying them (use with --fix)')
201
+ .option('--ignore <checks>', 'Comma-separated check IDs to skip (e.g., CRED-001,GIT-002)')
202
+ .option('--json', 'Output as JSON (for scripting/CI)')
203
+ .option('-v, --verbose', 'Show all checks including passed ones')
204
+ .action(async (directory, options) => {
205
+ try {
206
+ const targetDir = directory.startsWith('/') ? directory : process.cwd() + '/' + directory;
207
+ // Parse ignore list
208
+ const ignoreList = options.ignore
209
+ ? options.ignore.split(',').map((s) => s.trim()).filter(Boolean)
210
+ : [];
211
+ if (options.dryRun) {
212
+ console.log(`\nšŸ” Scanning ${targetDir} (dry-run)...\n`);
213
+ }
214
+ else {
215
+ console.log(`\nšŸ” Scanning ${targetDir}...\n`);
216
+ }
217
+ const scanner = new hackmyagent_core_1.HardeningScanner();
218
+ const result = await scanner.scan({
219
+ targetDir,
220
+ autoFix: options.fix ?? false,
221
+ dryRun: options.dryRun ?? false,
222
+ ignore: ignoreList,
223
+ });
224
+ if (options.json) {
225
+ console.log(JSON.stringify(result, null, 2));
226
+ return;
227
+ }
228
+ // Group findings by severity
229
+ const failedFindings = result.findings.filter((f) => !f.passed && !f.fixed && !f.wouldFix);
230
+ const fixedFindings = result.findings.filter((f) => f.fixed);
231
+ const wouldFixFindings = result.findings.filter((f) => f.wouldFix);
232
+ const passedFindings = result.findings.filter((f) => f.passed);
233
+ const grouped = groupFindingsBySeverity(failedFindings);
234
+ // Print header
235
+ console.log(`Platform: ${result.platform}`);
236
+ console.log(`Security Score: ${result.score}/${result.maxScore}\n`);
237
+ // Print failed findings by severity
238
+ let hasIssues = false;
239
+ for (const severity of ['critical', 'high', 'medium', 'low']) {
240
+ const findings = grouped[severity];
241
+ if (findings.length === 0)
242
+ continue;
243
+ hasIssues = true;
244
+ const display = SEVERITY_DISPLAY[severity];
245
+ console.log(`${display.color()}${display.symbol} ${severity.toUpperCase()} (${findings.length})${RESET()}`);
246
+ for (const finding of findings) {
247
+ console.log(` • [${finding.checkId}] ${finding.name}`);
248
+ console.log(` ${finding.message}`);
249
+ if (finding.fixable && !options.fix) {
250
+ console.log(` šŸ’” Auto-fixable with --fix`);
251
+ }
252
+ }
253
+ console.log();
254
+ }
255
+ // Print fixed findings
256
+ if (fixedFindings.length > 0) {
257
+ console.log(`${colors.green}āœ… FIXED (${fixedFindings.length})${RESET()}`);
258
+ for (const finding of fixedFindings) {
259
+ console.log(` • [${finding.checkId}] ${finding.name}`);
260
+ if (finding.fixMessage) {
261
+ console.log(` ${finding.fixMessage}`);
262
+ }
263
+ }
264
+ console.log();
265
+ // Show backup info
266
+ if (result.backupPath) {
267
+ console.log(`šŸ“¦ Backup created: ${result.backupPath}`);
268
+ console.log(` Run 'hackmyagent rollback ${directory}' to undo changes\n`);
269
+ }
270
+ }
271
+ // Print would-fix findings (dry-run mode)
272
+ if (wouldFixFindings.length > 0) {
273
+ console.log(`${colors.cyan}šŸ”® WOULD FIX (${wouldFixFindings.length})${RESET()}`);
274
+ for (const finding of wouldFixFindings) {
275
+ console.log(` • [${finding.checkId}] ${finding.name}`);
276
+ console.log(` ${finding.message}`);
277
+ }
278
+ console.log();
279
+ console.log(`šŸ’” Run with --fix (without --dry-run) to apply these fixes\n`);
280
+ }
281
+ // Print passed findings in verbose mode
282
+ if (options.verbose && passedFindings.length > 0) {
283
+ console.log(`${colors.green}āœ… PASSED (${passedFindings.length})${RESET()}`);
284
+ for (const finding of passedFindings) {
285
+ console.log(` • [${finding.checkId}] ${finding.name}`);
286
+ }
287
+ console.log();
288
+ }
289
+ // Show ignored checks
290
+ if (result.ignored && result.ignored.length > 0) {
291
+ console.log(`🚫 Ignored: ${result.ignored.join(', ')}\n`);
292
+ }
293
+ // Summary
294
+ if (!hasIssues && fixedFindings.length === 0 && wouldFixFindings.length === 0) {
295
+ console.log(`${colors.green}āœ… No security issues found!${RESET()}\n`);
296
+ }
297
+ else if (hasIssues && !options.fix) {
298
+ const fixableCount = failedFindings.filter((f) => f.fixable).length;
299
+ if (fixableCount > 0) {
300
+ console.log(`šŸ’” Run with --fix to automatically fix ${fixableCount} issue(s)\n`);
301
+ }
302
+ }
303
+ // Exit with non-zero if critical/high issues remain
304
+ const criticalOrHigh = failedFindings.filter((f) => f.severity === 'critical' || f.severity === 'high');
305
+ if (criticalOrHigh.length > 0) {
306
+ process.exit(1);
307
+ }
308
+ }
309
+ catch (error) {
310
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
311
+ process.exit(1);
312
+ }
313
+ });
314
+ // Severity display for external scan findings
315
+ const FINDING_SEVERITY_DISPLAY = {
316
+ critical: { symbol: 'šŸ”“', color: () => colors.brightRed },
317
+ high: { symbol: '🟠', color: () => colors.red },
318
+ medium: { symbol: '🟔', color: () => colors.yellow },
319
+ low: { symbol: '🟢', color: () => colors.green },
320
+ };
321
+ function groupExternalFindingsBySeverity(findings) {
322
+ const grouped = {
323
+ critical: [],
324
+ high: [],
325
+ medium: [],
326
+ low: [],
327
+ };
328
+ for (const finding of findings) {
329
+ grouped[finding.severity].push(finding);
330
+ }
331
+ return grouped;
332
+ }
333
+ program
334
+ .command('scan')
335
+ .description(`Scan external target for exposed MCP endpoints
336
+
337
+ Detects externally exposed:
338
+ • MCP SSE/tools endpoints
339
+ • Configuration files (mcp.json, settings)
340
+ • API keys in responses
341
+ • Debug/admin interfaces
342
+
343
+ Scoring: A (90-100), B (80-89), C (70-79), D (60-69), F (<60)
344
+ Exit code 1 if critical/high issues found.
345
+
346
+ Examples:
347
+ $ hackmyagent scan example.com
348
+ $ hackmyagent scan 192.168.1.100 -p 3000,8080
349
+ $ hackmyagent scan example.com --verbose
350
+ $ hackmyagent scan example.com --json`)
351
+ .argument('<target>', 'Target hostname or IP address')
352
+ .option('--json', 'Output as JSON (for scripting/CI)')
353
+ .option('-p, --ports <ports>', 'Comma-separated ports to scan (default: common MCP ports)')
354
+ .option('-t, --timeout <ms>', 'Connection timeout in milliseconds', '5000')
355
+ .option('-v, --verbose', 'Show detailed finding information')
356
+ .action(async (target, options) => {
357
+ try {
358
+ console.log(`\nšŸ” Scanning ${target}...\n`);
359
+ const scanner = new hackmyagent_core_1.ExternalScanner();
360
+ const customPorts = options.ports
361
+ ? options.ports.split(',').map((p) => parseInt(p.trim(), 10))
362
+ : undefined;
363
+ const result = await scanner.scan(target, {
364
+ ports: customPorts,
365
+ timeout: parseInt(options.timeout ?? '5000', 10),
366
+ });
367
+ if (options.json) {
368
+ console.log(JSON.stringify(result, null, 2));
369
+ return;
370
+ }
371
+ // Print header
372
+ const gradeColor = result.grade === 'A'
373
+ ? colors.green
374
+ : result.grade === 'B'
375
+ ? colors.green
376
+ : result.grade === 'C'
377
+ ? colors.yellow
378
+ : colors.red;
379
+ console.log(`Target: ${result.target}`);
380
+ console.log(`Score: ${gradeColor}${result.score}/100 (${result.grade})${RESET()}`);
381
+ console.log(`Open Ports: ${result.openPorts.length > 0 ? result.openPorts.join(', ') : 'None detected'}`);
382
+ console.log(`Duration: ${result.duration}ms\n`);
383
+ if (result.findings.length === 0) {
384
+ console.log(`${colors.green}āœ… No security issues found!${RESET()}\n`);
385
+ return;
386
+ }
387
+ // Group findings by severity
388
+ const grouped = groupExternalFindingsBySeverity(result.findings);
389
+ // Print findings by severity
390
+ for (const severity of ['critical', 'high', 'medium', 'low']) {
391
+ const findings = grouped[severity];
392
+ if (findings.length === 0)
393
+ continue;
394
+ const display = FINDING_SEVERITY_DISPLAY[severity];
395
+ console.log(`${display.color()}${display.symbol} ${severity.toUpperCase()} (${findings.length})${RESET()}`);
396
+ for (const finding of findings) {
397
+ console.log(` • [${finding.checkId}] ${finding.title}`);
398
+ if (finding.port) {
399
+ console.log(` Port: ${finding.port}${finding.path ? `, Path: ${finding.path}` : ''}`);
400
+ }
401
+ if (options.verbose) {
402
+ console.log(` ${finding.description}`);
403
+ console.log(` Evidence: ${finding.evidence}`);
404
+ console.log(` Impact: ${finding.impact}`);
405
+ console.log(` Fix: ${finding.fix}`);
406
+ }
407
+ }
408
+ console.log();
409
+ }
410
+ // Exit with non-zero if critical/high issues found
411
+ const criticalOrHigh = result.findings.filter((f) => f.severity === 'critical' || f.severity === 'high');
412
+ if (criticalOrHigh.length > 0) {
413
+ process.exit(1);
414
+ }
415
+ }
416
+ catch (error) {
417
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
418
+ process.exit(1);
419
+ }
420
+ });
421
+ program
422
+ .command('rollback')
423
+ .description(`Rollback auto-fix changes to the most recent backup
424
+
425
+ Restores files to their state before the last --fix operation.
426
+ Backups are stored in .hackmyagent-backup/ with timestamps.
427
+
428
+ Examples:
429
+ $ hackmyagent rollback Rollback current directory
430
+ $ hackmyagent rollback ./my-project Rollback specific directory`)
431
+ .argument('[directory]', 'Directory to rollback (defaults to current directory)', '.')
432
+ .action(async (directory) => {
433
+ try {
434
+ const targetDir = directory.startsWith('/') ? directory : process.cwd() + '/' + directory;
435
+ console.log(`\nšŸ”„ Rolling back changes in ${targetDir}...\n`);
436
+ const scanner = new hackmyagent_core_1.HardeningScanner();
437
+ await scanner.rollback(targetDir);
438
+ console.log(`${colors.green}āœ… Rollback successful!${RESET()}`);
439
+ console.log(' All auto-fix changes have been reverted.\n');
440
+ }
441
+ catch (error) {
442
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
443
+ process.exit(1);
444
+ }
445
+ });
446
+ program.parse();
447
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "hackmyagent",
3
+ "version": "0.1.0",
4
+ "description": "Security toolkit for AI agents - verify skills, harden setups, scan for exposures",
5
+ "bin": {
6
+ "hackmyagent": "dist/index.js"
7
+ },
8
+ "main": "dist/index.js",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "test": "echo 'No CLI tests yet'",
15
+ "lint": "eslint src --ext .ts"
16
+ },
17
+ "dependencies": {
18
+ "commander": "^12.0.0",
19
+ "hackmyagent-core": "^0.1.0"
20
+ },
21
+ "devDependencies": {
22
+ "typescript": "^5.3.3"
23
+ },
24
+ "keywords": [
25
+ "ai",
26
+ "agent",
27
+ "security",
28
+ "mcp",
29
+ "claude",
30
+ "cursor",
31
+ "skills",
32
+ "hardening",
33
+ "scanner"
34
+ ],
35
+ "author": "OpenA2A",
36
+ "license": "Apache-2.0",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/opena2a-org/hackmyagent.git"
40
+ },
41
+ "homepage": "https://github.com/opena2a-org/hackmyagent#readme",
42
+ "bugs": {
43
+ "url": "https://github.com/opena2a-org/hackmyagent/issues"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ }
48
+ }