aiden-runtime 3.19.5 → 3.19.7

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.
Files changed (107) hide show
  1. package/README.md +1 -1
  2. package/dist/api/server.js +24 -25
  3. package/dist/core/agentLoop.js +8 -6
  4. package/dist/core/aidenPersonality.js +20 -3
  5. package/dist/core/protectedContext.js +15 -2
  6. package/dist/core/skillLoader.js +2 -0
  7. package/dist/core/skillTeacher.js +18 -5
  8. package/dist/core/version.js +1 -1
  9. package/dist-bundle/cli.js +50 -18
  10. package/dist-bundle/index.js +73 -35
  11. package/package.json +2 -1
  12. package/scripts/postinstall.js +70 -1
  13. package/workspace-templates/HEARTBEAT.md +16 -0
  14. package/workspace-templates/SOUL.md +267 -0
  15. package/workspace-templates/STANDING_ORDERS.md +21 -0
  16. package/workspace-templates/permissions.yaml +180 -0
  17. package/workspace-templates/skills/architecture-diagram/SKILL.md +126 -0
  18. package/workspace-templates/skills/architecture-diagram/skill.json +25 -0
  19. package/workspace-templates/skills/arxiv/SKILL.md +124 -0
  20. package/workspace-templates/skills/arxiv/skill.json +26 -0
  21. package/workspace-templates/skills/ascii-art/SKILL.md +142 -0
  22. package/workspace-templates/skills/ascii-art/skill.json +26 -0
  23. package/workspace-templates/skills/blogwatcher/SKILL.md +147 -0
  24. package/workspace-templates/skills/blogwatcher/skill.json +26 -0
  25. package/workspace-templates/skills/censys/SKILL.md +104 -0
  26. package/workspace-templates/skills/censys/index.ts +133 -0
  27. package/workspace-templates/skills/censys/skill.json +25 -0
  28. package/workspace-templates/skills/clipboard-history/SKILL.md +101 -0
  29. package/workspace-templates/skills/clipboard-history/skill.json +23 -0
  30. package/workspace-templates/skills/crt-sh/SKILL.md +102 -0
  31. package/workspace-templates/skills/crt-sh/index.ts +59 -0
  32. package/workspace-templates/skills/crt-sh/skill.json +25 -0
  33. package/workspace-templates/skills/cveapi/SKILL.md +114 -0
  34. package/workspace-templates/skills/cveapi/index.ts +249 -0
  35. package/workspace-templates/skills/cveapi/skill.json +25 -0
  36. package/workspace-templates/skills/docker-management/SKILL.md +156 -0
  37. package/workspace-templates/skills/docker-management/skill.json +25 -0
  38. package/workspace-templates/skills/excalidraw/SKILL.md +148 -0
  39. package/workspace-templates/skills/excalidraw/skill.json +25 -0
  40. package/workspace-templates/skills/explainshell/SKILL.md +93 -0
  41. package/workspace-templates/skills/explainshell/index.ts +132 -0
  42. package/workspace-templates/skills/explainshell/skill.json +25 -0
  43. package/workspace-templates/skills/financial_research/SKILL.md +21 -0
  44. package/workspace-templates/skills/financial_research/skill.json +24 -0
  45. package/workspace-templates/skills/gif-search/SKILL.md +122 -0
  46. package/workspace-templates/skills/gif-search/skill.json +25 -0
  47. package/workspace-templates/skills/github-auth/SKILL.md +134 -0
  48. package/workspace-templates/skills/github-auth/skill.json +26 -0
  49. package/workspace-templates/skills/github-issues/SKILL.md +130 -0
  50. package/workspace-templates/skills/github-issues/skill.json +25 -0
  51. package/workspace-templates/skills/github-pr-workflow/SKILL.md +143 -0
  52. package/workspace-templates/skills/github-pr-workflow/skill.json +26 -0
  53. package/workspace-templates/skills/github-repo-management/SKILL.md +147 -0
  54. package/workspace-templates/skills/github-repo-management/skill.json +26 -0
  55. package/workspace-templates/skills/google-workspace/SKILL.md +110 -0
  56. package/workspace-templates/skills/google-workspace/skill.json +26 -0
  57. package/workspace-templates/skills/greynoise/SKILL.md +96 -0
  58. package/workspace-templates/skills/greynoise/index.ts +107 -0
  59. package/workspace-templates/skills/greynoise/skill.json +25 -0
  60. package/workspace-templates/skills/haveibeenpwned/SKILL.md +100 -0
  61. package/workspace-templates/skills/haveibeenpwned/index.ts +72 -0
  62. package/workspace-templates/skills/haveibeenpwned/skill.json +24 -0
  63. package/workspace-templates/skills/jupyter-live-kernel/SKILL.md +116 -0
  64. package/workspace-templates/skills/jupyter-live-kernel/skill.json +25 -0
  65. package/workspace-templates/skills/linear/SKILL.md +107 -0
  66. package/workspace-templates/skills/linear/skill.json +25 -0
  67. package/workspace-templates/skills/nano-pdf/SKILL.md +113 -0
  68. package/workspace-templates/skills/nano-pdf/skill.json +26 -0
  69. package/workspace-templates/skills/notion/SKILL.md +108 -0
  70. package/workspace-templates/skills/notion/skill.json +24 -0
  71. package/workspace-templates/skills/obsidian/SKILL.md +115 -0
  72. package/workspace-templates/skills/obsidian/skill.json +24 -0
  73. package/workspace-templates/skills/ocr-and-documents/SKILL.md +125 -0
  74. package/workspace-templates/skills/ocr-and-documents/skill.json +26 -0
  75. package/workspace-templates/skills/p5js/SKILL.md +163 -0
  76. package/workspace-templates/skills/p5js/skill.json +24 -0
  77. package/workspace-templates/skills/research-paper-writing/SKILL.md +158 -0
  78. package/workspace-templates/skills/research-paper-writing/skill.json +26 -0
  79. package/workspace-templates/skills/securityheaders/SKILL.md +99 -0
  80. package/workspace-templates/skills/securityheaders/index.ts +213 -0
  81. package/workspace-templates/skills/securityheaders/skill.json +26 -0
  82. package/workspace-templates/skills/shodan/SKILL.md +113 -0
  83. package/workspace-templates/skills/shodan/index.ts +94 -0
  84. package/workspace-templates/skills/shodan/skill.json +26 -0
  85. package/workspace-templates/skills/songsee/SKILL.md +152 -0
  86. package/workspace-templates/skills/songsee/skill.json +25 -0
  87. package/workspace-templates/skills/ssllabs/SKILL.md +107 -0
  88. package/workspace-templates/skills/ssllabs/index.ts +208 -0
  89. package/workspace-templates/skills/ssllabs/skill.json +27 -0
  90. package/workspace-templates/skills/stable-diffusion-image-generation/SKILL.md +136 -0
  91. package/workspace-templates/skills/stable-diffusion-image-generation/skill.json +24 -0
  92. package/workspace-templates/skills/systematic-debugging/SKILL.md +131 -0
  93. package/workspace-templates/skills/systematic-debugging/skill.json +25 -0
  94. package/workspace-templates/skills/test-driven-development/SKILL.md +164 -0
  95. package/workspace-templates/skills/test-driven-development/skill.json +25 -0
  96. package/workspace-templates/skills/urlscan/SKILL.md +118 -0
  97. package/workspace-templates/skills/urlscan/index.ts +94 -0
  98. package/workspace-templates/skills/urlscan/skill.json +24 -0
  99. package/workspace-templates/skills/virustotal/SKILL.md +120 -0
  100. package/workspace-templates/skills/virustotal/index.ts +124 -0
  101. package/workspace-templates/skills/virustotal/skill.json +26 -0
  102. package/workspace-templates/skills/web_research/SKILL.md +18 -0
  103. package/workspace-templates/skills/web_research/skill.json +20 -0
  104. package/workspace-templates/skills/xitter/SKILL.md +148 -0
  105. package/workspace-templates/skills/xitter/skill.json +26 -0
  106. package/workspace-templates/skills/youtube-content/SKILL.md +121 -0
  107. package/workspace-templates/skills/youtube-content/skill.json +25 -0
@@ -0,0 +1,133 @@
1
+ // skills/censys/index.ts
2
+ // Programmatic handler — host lookup, search, and certificate analysis via Censys v2 API.
3
+
4
+ import { ApiSkill } from '../../core/apiSkillBase'
5
+
6
+ // Censys uses HTTP Basic auth: Base64(API_ID:API_SECRET)
7
+ // We build the credential lazily so env vars can be set after module load.
8
+
9
+ let _skill: ApiSkill | null = null
10
+
11
+ function getSkill(): ApiSkill {
12
+ if (_skill) return _skill
13
+
14
+ const apiId = process.env['CENSYS_API_ID'] ?? ''
15
+ const apiSecret = process.env['CENSYS_API_SECRET'] ?? ''
16
+
17
+ if (!apiId || !apiSecret) {
18
+ throw new Error(
19
+ 'CENSYS_API_ID and CENSYS_API_SECRET are not configured.\n' +
20
+ 'Add them to .env:\n CENSYS_API_ID=your-id\n CENSYS_API_SECRET=your-secret\n' +
21
+ 'Free account: https://search.censys.io/register',
22
+ )
23
+ }
24
+
25
+ const encoded = Buffer.from(`${apiId}:${apiSecret}`).toString('base64')
26
+
27
+ _skill = new ApiSkill({
28
+ name: 'censys',
29
+ baseUrl: 'https://search.censys.io/api/v2',
30
+ authType: 'header',
31
+ authHeader: 'Authorization',
32
+ apiKey: `Basic ${encoded}`,
33
+ rateLimit: { requests: 4, windowMs: 10_000 }, // 0.4 req/sec
34
+ timeout: 20_000,
35
+ retries: 2,
36
+ })
37
+ return _skill
38
+ }
39
+
40
+ // ── Output types ──────────────────────────────────────────────
41
+
42
+ export interface CensysService {
43
+ port: number
44
+ protocol: string // e.g. "TCP"
45
+ name: string // e.g. "HTTP", "HTTPS"
46
+ }
47
+
48
+ export interface CensysHost {
49
+ ip: string
50
+ asn: number
51
+ asnName: string
52
+ country: string
53
+ city: string
54
+ services: CensysService[]
55
+ lastUpdated: string
56
+ }
57
+
58
+ export interface CensysSearchResult {
59
+ total: number
60
+ hits: Array<{
61
+ ip: string
62
+ asn: number
63
+ asnName: string
64
+ country: string
65
+ }>
66
+ }
67
+
68
+ export interface CensysCertificate {
69
+ fingerprint: string
70
+ subjectDn: string
71
+ issuerDn: string
72
+ names: string[]
73
+ validStart: string
74
+ validEnd: string
75
+ }
76
+
77
+ // ── Public API ────────────────────────────────────────────────
78
+
79
+ /** Look up a specific IP address in Censys. */
80
+ export async function hostLookup(ip: string): Promise<CensysHost> {
81
+ const raw = await getSkill().get(`/hosts/${encodeURIComponent(ip)}`)
82
+ const r = raw.result ?? raw // some responses nest under result
83
+
84
+ const services: CensysService[] = (r.services ?? []).map((s: any) => ({
85
+ port: s.port ?? 0,
86
+ protocol: s.transport_protocol ?? 'TCP',
87
+ name: s.service_name ?? s.extended_service_name ?? '',
88
+ }))
89
+
90
+ const as = r.autonomous_system ?? {}
91
+ const loc = r.location ?? {}
92
+
93
+ return {
94
+ ip: r.ip ?? ip,
95
+ asn: as.asn ?? 0,
96
+ asnName: as.name ?? as.bgp_prefix ?? '',
97
+ country: loc.country ?? loc.country_code ?? '',
98
+ city: loc.city ?? '',
99
+ services,
100
+ lastUpdated: r.last_updated_at ?? '',
101
+ }
102
+ }
103
+
104
+ /** Search Censys hosts with a query string. */
105
+ export async function hostSearch(query: string, perPage = 25): Promise<CensysSearchResult> {
106
+ const raw = await getSkill().get('/hosts/search', { q: query, per_page: String(perPage) })
107
+ const r = raw.result ?? raw
108
+
109
+ const hits = (r.hits ?? []).map((h: any) => ({
110
+ ip: h.ip ?? '',
111
+ asn: h.autonomous_system?.asn ?? 0,
112
+ asnName: h.autonomous_system?.name ?? '',
113
+ country: h.location?.country ?? h.location?.country_code ?? '',
114
+ }))
115
+
116
+ return { total: r.total ?? hits.length, hits }
117
+ }
118
+
119
+ /** Look up a TLS certificate by its SHA-256 fingerprint. */
120
+ export async function certificateLookup(sha256: string): Promise<CensysCertificate> {
121
+ const raw = await getSkill().get(`/certificates/${sha256.toLowerCase()}`)
122
+ const parsed = (raw.result ?? raw).parsed ?? {}
123
+ const val = parsed.validity ?? {}
124
+
125
+ return {
126
+ fingerprint: sha256,
127
+ subjectDn: parsed.subject_dn ?? '',
128
+ issuerDn: parsed.issuer_dn ?? '',
129
+ names: parsed.names_from_san ?? [],
130
+ validStart: val.start ?? '',
131
+ validEnd: val.end ?? '',
132
+ }
133
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "censys",
3
+ "version": "1.0.0",
4
+ "description": "Search Censys for internet-exposed hosts, certificates, and services — host lookups, queries, and certificate analysis",
5
+ "author": "aiden",
6
+ "license": "MIT",
7
+ "tools": [],
8
+ "trigger_phrases": [],
9
+ "compatible_agents": [
10
+ "aiden"
11
+ ],
12
+ "min_agent_version": "3.0.0",
13
+ "tags": [
14
+ "security",
15
+ "censys",
16
+ "osint",
17
+ "recon",
18
+ "ports",
19
+ "certificates",
20
+ "tls",
21
+ "asset-discovery",
22
+ "internet-scan"
23
+ ],
24
+ "created": "2026-04-27T17:11:39.264Z"
25
+ }
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: clipboard-history
3
+ description: Read, write, and manage Windows clipboard content including text, HTML, images, and clipboard history via PowerShell
4
+ category: windows
5
+ version: 1.0.0
6
+ platform: windows
7
+ tags: clipboard, copy, paste, history, windows, powershell, text
8
+ license: Apache-2.0
9
+ ---
10
+
11
+ # Clipboard History
12
+
13
+ Read and write Windows clipboard content, access clipboard history (Win+V), and manipulate clipboard data — text, HTML, and file lists — via PowerShell.
14
+
15
+ ## When to Use
16
+
17
+ - User wants to read what's currently on the clipboard
18
+ - User asks Aiden to set or overwrite clipboard content
19
+ - User wants to pipe command output directly to the clipboard
20
+ - User needs to clear the clipboard or check clipboard history
21
+ - User wants to copy a file path, URL, or code snippet to clipboard
22
+
23
+ ## How to Use
24
+
25
+ ### Read current clipboard text
26
+ ```powershell
27
+ Get-Clipboard
28
+ ```
29
+
30
+ ### Write text to clipboard
31
+ ```powershell
32
+ Set-Clipboard -Value "Hello from Aiden!"
33
+ ```
34
+
35
+ ### Pipe command output to clipboard
36
+ ```powershell
37
+ Get-Process | Out-String | Set-Clipboard
38
+ ```
39
+
40
+ ### Copy a file path to clipboard
41
+ ```powershell
42
+ Set-Clipboard -Value "C:\Users\shiva\Documents\report.pdf"
43
+ ```
44
+
45
+ ### Clear the clipboard
46
+ ```powershell
47
+ Set-Clipboard -Value $null
48
+ ```
49
+
50
+ ### Read clipboard as HTML (if HTML is on clipboard)
51
+ ```powershell
52
+ Add-Type -AssemblyName System.Windows.Forms
53
+ [System.Windows.Forms.Clipboard]::GetText([System.Windows.Forms.TextDataFormat]::Html)
54
+ ```
55
+
56
+ ### Check if clipboard contains an image
57
+ ```powershell
58
+ Add-Type -AssemblyName System.Windows.Forms
59
+ [System.Windows.Forms.Clipboard]::ContainsImage()
60
+ ```
61
+
62
+ ### Save clipboard image to file
63
+ ```powershell
64
+ Add-Type -AssemblyName System.Windows.Forms
65
+ $img = [System.Windows.Forms.Clipboard]::GetImage()
66
+ if ($img) {
67
+ $img.Save("$env:USERPROFILE\Desktop\clipboard-image.png")
68
+ Write-Host "Saved to Desktop"
69
+ } else {
70
+ Write-Host "No image on clipboard"
71
+ }
72
+ ```
73
+
74
+ ### Access clipboard history entries (Win+V API)
75
+ ```powershell
76
+ # Clipboard history requires Windows 10 1809+ and history enabled in Settings
77
+ # Use the ContentDeliveryManager workaround or UWP API via PowerShell
78
+ Add-Type -AssemblyName Windows.ApplicationModel
79
+ $history = [Windows.ApplicationModel.DataTransfer.Clipboard,Windows.ApplicationModel,ContentType=WindowsRuntime]
80
+ # Note: full UWP clipboard history requires a packaged app context
81
+ # For CLI use, pipe history via the built-in Win+V UI or a third-party tool
82
+ Write-Host "Open Win+V to view clipboard history interactively"
83
+ ```
84
+
85
+ ## Examples
86
+
87
+ **"Copy the output of dir to clipboard"**
88
+ → `Get-ChildItem | Out-String | Set-Clipboard`
89
+
90
+ **"Put my public IP address on the clipboard"**
91
+ → `(Invoke-RestMethod -Uri 'https://api.ipify.org').Trim() | Set-Clipboard`
92
+
93
+ **"Clear whatever is on the clipboard"**
94
+ → `Set-Clipboard -Value $null`
95
+
96
+ ## Cautions
97
+
98
+ - `Set-Clipboard` requires PowerShell 5.1+ on Windows; earlier versions use `clip.exe` as fallback
99
+ - Clipboard history (Win+V) requires it to be enabled in Settings → System → Clipboard
100
+ - Image and HTML clipboard operations require `System.Windows.Forms` assembly — only available on Windows
101
+ - Clipboard contents are not persisted across reboots unless pinned in the clipboard history UI
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "clipboard-history",
3
+ "version": "1.0.0",
4
+ "description": "Read, write, and manage Windows clipboard content including text, HTML, images, and clipboard history via PowerShell",
5
+ "author": "local",
6
+ "license": "MIT",
7
+ "tools": [],
8
+ "trigger_phrases": [],
9
+ "compatible_agents": [
10
+ "aiden"
11
+ ],
12
+ "min_agent_version": "3.0.0",
13
+ "tags": [
14
+ "clipboard",
15
+ "copy",
16
+ "paste",
17
+ "history",
18
+ "windows",
19
+ "powershell",
20
+ "text"
21
+ ],
22
+ "created": "2026-04-27T17:11:39.322Z"
23
+ }
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: crt.sh
3
+ description: Search certificate transparency logs to enumerate subdomains and TLS certificates for any domain — no API key required
4
+ category: security
5
+ version: 1.0.0
6
+ license: Apache-2.0
7
+ origin: aiden
8
+ tags: security, osint, certificates, subdomains, tls, ssl, ct-logs, recon, crt.sh
9
+ ---
10
+
11
+ # Certificate Transparency Search (crt.sh)
12
+
13
+ Query [crt.sh](https://crt.sh) to enumerate all TLS/SSL certificates ever issued for a domain. Certificate transparency logs are public — no API key or account needed.
14
+
15
+ ## When to Use
16
+
17
+ - User wants to find all subdomains of a domain (recon / asset discovery)
18
+ - User wants to see what TLS certificates have been issued for their domain
19
+ - User is doing OSINT on an organization's infrastructure
20
+ - User asks "what subdomains does X have" or "find all certs for domain"
21
+ - Security audit: discover forgotten or misconfigured subdomains
22
+
23
+ ## How to Use
24
+
25
+ ### List all certificates for a domain
26
+
27
+ ```powershell
28
+ $domain = "taracod.com"
29
+ $url = "https://crt.sh/?q=$domain&output=json"
30
+
31
+ $certs = Invoke-RestMethod -Uri $url
32
+ Write-Host "Found $($certs.Count) certificate records"
33
+ $certs | Select-Object -First 10 | Format-Table id, name_value, not_before, not_after -AutoSize
34
+ ```
35
+
36
+ ### Extract unique subdomain names
37
+
38
+ ```powershell
39
+ $domain = "taracod.com"
40
+ $url = "https://crt.sh/?q=$([Uri]::EscapeDataString("*.$domain"))&output=json"
41
+
42
+ $certs = Invoke-RestMethod -Uri $url
43
+ $names = $certs | ForEach-Object { $_.name_value -split "`n" } |
44
+ Sort-Object -Unique |
45
+ Where-Object { $_ -ne "" -and $_ -ne "*.$domain" }
46
+
47
+ Write-Host "Unique subdomains / names ($($names.Count)):"
48
+ $names | ForEach-Object { Write-Host " $_" }
49
+ ```
50
+
51
+ ### Search for certificates by organization (CA issuance)
52
+
53
+ ```powershell
54
+ $domain = "taracod.com"
55
+ $url = "https://crt.sh/?q=$domain&output=json"
56
+ $certs = Invoke-RestMethod -Uri $url
57
+
58
+ $certs | Select-Object issuer_name, not_before, not_after, name_value |
59
+ Sort-Object not_before -Descending |
60
+ Select-Object -First 20 |
61
+ Format-Table -AutoSize
62
+ ```
63
+
64
+ ### Find recently issued certificates (last 30 days)
65
+
66
+ ```powershell
67
+ $domain = "example.com"
68
+ $url = "https://crt.sh/?q=$domain&output=json"
69
+ $certs = Invoke-RestMethod -Uri $url
70
+ $cutoff = (Get-Date).AddDays(-30)
71
+
72
+ $recent = $certs | Where-Object {
73
+ [datetime]$_.not_before -gt $cutoff
74
+ } | Select-Object name_value, not_before, issuer_name
75
+
76
+ Write-Host "Certificates issued in the last 30 days: $($recent.Count)"
77
+ $recent | Format-Table -AutoSize
78
+ ```
79
+
80
+ ## Examples
81
+
82
+ **"Find all subdomains for google.com"**
83
+ → Use the subdomain extraction snippet with `$domain = "google.com"`.
84
+
85
+ **"What TLS certificates has github.com had?"**
86
+ → Use the first snippet with `$domain = "github.com"` and look at `not_before`/`not_after`.
87
+
88
+ **"Show me recently issued certs for competitor.com"**
89
+ → Use the "recently issued" snippet — useful for tracking new infrastructure.
90
+
91
+ ## Cautions
92
+
93
+ - crt.sh is a free public service — do not hammer it with rapid requests; add a short delay between bulk queries
94
+ - Results include historical (expired) certificates unless you filter by `not_after`
95
+ - Wildcard certificates (`*.example.com`) are returned — the `name_value` field may contain multiple names separated by newlines
96
+ - Subdomains found here may no longer be active — always verify with DNS before assuming they are live
97
+ - Certificate transparency data is public by design; this is open-source intelligence, not hacking
98
+
99
+ ## Requirements
100
+
101
+ - No API key required — crt.sh is fully public
102
+ - PowerShell's `Invoke-RestMethod` handles JSON parsing automatically
@@ -0,0 +1,59 @@
1
+ // skills/crt-sh/index.ts
2
+ // Programmatic handler — no auth required, uses ApiSkill for retries/timeout.
3
+
4
+ import { ApiSkill } from '../../core/apiSkillBase'
5
+
6
+ const skill = new ApiSkill({
7
+ name: 'crt.sh',
8
+ baseUrl: 'https://crt.sh',
9
+ authType: 'none',
10
+ timeout: 30_000,
11
+ retries: 3,
12
+ })
13
+
14
+ export interface CertRecord {
15
+ id: number
16
+ name_value: string
17
+ issuer_name: string
18
+ not_before: string
19
+ not_after: string
20
+ }
21
+
22
+ export async function searchCerts(domain: string): Promise<{
23
+ total: number
24
+ subdomains: string[]
25
+ raw: CertRecord[]
26
+ }> {
27
+ const results: CertRecord[] = await skill.get('/', {
28
+ q: `%.${domain}`,
29
+ output: 'json',
30
+ })
31
+
32
+ if (!Array.isArray(results) || results.length === 0) {
33
+ return { total: 0, subdomains: [], raw: [] }
34
+ }
35
+
36
+ // Flatten multi-value name fields and deduplicate
37
+ const subdomains = [
38
+ ...new Set(
39
+ results
40
+ .flatMap(r => r.name_value.split('\n'))
41
+ .map(s => s.trim())
42
+ .filter(s => s && !s.startsWith('*.')),
43
+ ),
44
+ ].sort()
45
+
46
+ return { total: results.length, subdomains, raw: results }
47
+ }
48
+
49
+ export async function formatSubdomains(domain: string): Promise<string> {
50
+ const { total, subdomains } = await searchCerts(domain)
51
+
52
+ if (total === 0) return `No certificates found for ${domain}`
53
+
54
+ return [
55
+ `Found ${total} certificate records for ${domain}.`,
56
+ `Unique subdomains/names (${subdomains.length}):`,
57
+ ...subdomains.map(s => ` ${s}`),
58
+ ].join('\n')
59
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "crt-sh",
3
+ "version": "1.0.0",
4
+ "description": "Search certificate transparency logs to enumerate subdomains and TLS certificates for any domain — no API key required",
5
+ "author": "aiden",
6
+ "license": "MIT",
7
+ "tools": [],
8
+ "trigger_phrases": [],
9
+ "compatible_agents": [
10
+ "aiden"
11
+ ],
12
+ "min_agent_version": "3.0.0",
13
+ "tags": [
14
+ "security",
15
+ "osint",
16
+ "certificates",
17
+ "subdomains",
18
+ "tls",
19
+ "ssl",
20
+ "ct-logs",
21
+ "recon",
22
+ "crt.sh"
23
+ ],
24
+ "created": "2026-04-27T17:11:39.411Z"
25
+ }
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: cveapi
3
+ description: Look up CVE vulnerability details by ID via MITRE CVE API with NVD fallback — severity, CVSS score, affected products, and references
4
+ category: security
5
+ version: 1.0.0
6
+ license: Apache-2.0
7
+ origin: aiden
8
+ tags: security, cve, vulnerability, nvd, mitre, cvss, patch, incident-response, compliance
9
+ ---
10
+
11
+ # CVE API — Vulnerability Lookup
12
+
13
+ Look up any CVE (Common Vulnerabilities and Exposures) by ID to get severity, CVSS score, affected products, and reference links. Uses the MITRE CVE API (cveawg.mitre.org) with automatic fallback to the NVD (National Vulnerability Database) for richer data.
14
+
15
+ **No API key required.** Optionally set `NVD_API_KEY` for higher rate limits on the NVD endpoint.
16
+
17
+ ## When to Use
18
+
19
+ - User asks about a specific CVE by ID (e.g. "what is CVE-2021-44228?")
20
+ - Security team needs severity and CVSS score for patch prioritization
21
+ - Incident response: quickly triage whether a reported CVE is critical
22
+ - Compliance audit: confirm affected software versions for a given vulnerability
23
+ - User asks "is this CVE critical?", "what does CVE-XXXX-XXXXX affect?"
24
+
25
+ ## How to Use
26
+
27
+ ### Look up a single CVE (MITRE CVE API)
28
+
29
+ ```powershell
30
+ $cveId = "CVE-2021-44228"
31
+ $url = "https://cveawg.mitre.org/api/cve/$cveId"
32
+
33
+ $result = Invoke-RestMethod -Uri $url
34
+ $cna = $result.containers.cna
35
+ $desc = ($cna.descriptions | Where-Object { $_.lang -eq 'en' } | Select-Object -First 1).value
36
+ $cvss = $cna.metrics | ForEach-Object {
37
+ $_.PSObject.Properties | Where-Object { $_.Name -like 'cvssV3*' } |
38
+ Select-Object -First 1 -ExpandProperty Value
39
+ } | Select-Object -First 1
40
+
41
+ Write-Host "CVE: $($result.cveMetadata.cveId)"
42
+ Write-Host "State: $($result.cveMetadata.state)"
43
+ Write-Host "Published: $($result.cveMetadata.datePublished)"
44
+ Write-Host "Score: $($cvss.baseScore) ($($cvss.baseSeverity))"
45
+ Write-Host "Description: $desc"
46
+ Write-Host "References: $(($cna.references | Select-Object -First 3 -ExpandProperty url) -join ', ')"
47
+ ```
48
+
49
+ ### Look up via NVD (richer data, optional API key)
50
+
51
+ ```powershell
52
+ $cveId = "CVE-2021-44228"
53
+ $headers = @{}
54
+ if ($env:NVD_API_KEY) { $headers['apiKey'] = $env:NVD_API_KEY }
55
+
56
+ $url = "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=$cveId"
57
+ $result = Invoke-RestMethod -Uri $url -Headers $headers
58
+ $cve = $result.vulnerabilities[0].cve
59
+ $desc = ($cve.descriptions | Where-Object { $_.lang -eq 'en' } | Select-Object -First 1).value
60
+ $metric = $cve.metrics.cvssMetricV31[0].cvssData
61
+
62
+ Write-Host "CVE: $($cve.id)"
63
+ Write-Host "Published: $($cve.published)"
64
+ Write-Host "Score: $($metric.baseScore) ($($metric.baseSeverity))"
65
+ Write-Host "Vector: $($metric.vectorString)"
66
+ Write-Host "Desc: $($desc.Substring(0, [Math]::Min(200, $desc.Length)))..."
67
+ ```
68
+
69
+ ### Batch lookup — check multiple CVEs
70
+
71
+ ```powershell
72
+ $cveIds = @("CVE-2021-44228", "CVE-2023-4863", "CVE-2024-3094")
73
+
74
+ foreach ($id in $cveIds) {
75
+ try {
76
+ $url = "https://cveawg.mitre.org/api/cve/$id"
77
+ $result = Invoke-RestMethod -Uri $url
78
+ $cna = $result.containers.cna
79
+ $cvss = ($cna.metrics | Where-Object { $_.PSObject.Properties.Name -like 'cvssV3*' } |
80
+ Select-Object -First 1).PSObject.Properties.Value | Select-Object -First 1
81
+ Write-Host "$id Score: $($cvss.baseScore ?? 'N/A') ($($cvss.baseSeverity ?? 'UNKNOWN'))"
82
+ } catch {
83
+ Write-Host "$id ERROR: $($_.Exception.Message)"
84
+ }
85
+ Start-Sleep -Milliseconds 200 # polite rate limiting
86
+ }
87
+ ```
88
+
89
+ ## Examples
90
+
91
+ **"Look up CVE-2021-44228"**
92
+ → Returns Log4Shell details: CVSS 10.0 CRITICAL, affects Apache Log4j 2.x.
93
+
94
+ **"What's the severity of CVE-2023-4863?"**
95
+ → Returns WebP heap buffer overflow: CVSS 8.8 HIGH, affects Chrome/libwebp.
96
+
97
+ **"Get details for CVE-2024-3094"**
98
+ → Returns XZ Utils backdoor: CVSS 10.0 CRITICAL, supply-chain attack.
99
+
100
+ **"Is CVE-2024-12345 critical?"**
101
+ → Looks up and reports severity tier: CRITICAL / HIGH / MEDIUM / LOW / NONE.
102
+
103
+ ## Cautions
104
+
105
+ - MITRE CVE API has no documented rate limit — use 1–2 req/sec as a courtesy
106
+ - NVD has stricter rate limiting: 5 req/30s without a key, 50 req/30s with `NVD_API_KEY`
107
+ - Some CVEs are `RESERVED` (not yet disclosed) — the API returns limited data
108
+ - CVSS score may be absent for very new or disputed CVEs
109
+ - NVD and MITRE may have slightly different data — NVD is generally more complete
110
+
111
+ ## Requirements
112
+
113
+ - No key required for basic use
114
+ - `NVD_API_KEY` (optional) — free at https://nvd.nist.gov/developers/request-an-api-key