agemon 0.1.0 → 6.0.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.
Files changed (144) hide show
  1. package/README.md +732 -28
  2. package/assets/skills/architecture/agemon-architecture/LICENSE +21 -0
  3. package/assets/skills/architecture/agemon-architecture/NOTICE.md +9 -0
  4. package/assets/skills/architecture/agemon-architecture/SKILL.md +275 -0
  5. package/assets/skills/code-quality/agemon-clean-code/LICENSE +21 -0
  6. package/assets/skills/code-quality/agemon-clean-code/NOTICE.md +9 -0
  7. package/assets/skills/code-quality/agemon-clean-code/SKILL.md +78 -0
  8. package/assets/skills/code-quality/agemon-house-rules/SKILL.md +103 -0
  9. package/assets/skills/commit/agemon-commit/SKILL.md +87 -0
  10. package/assets/skills/design/agemon-design/LICENSE +21 -0
  11. package/assets/skills/design/agemon-design/NOTICE.md +9 -0
  12. package/assets/skills/design/agemon-design/SKILL.md +391 -0
  13. package/assets/skills/design/agemon-design/references/accessibility.md +182 -0
  14. package/assets/skills/design/agemon-design/references/agents.md +63 -0
  15. package/assets/skills/design/agemon-design/references/ai-chat.md +158 -0
  16. package/assets/skills/design/agemon-design/references/brief.md +186 -0
  17. package/assets/skills/design/agemon-design/references/color.md +216 -0
  18. package/assets/skills/design/agemon-design/references/components.md +91 -0
  19. package/assets/skills/design/agemon-design/references/copy.md +300 -0
  20. package/assets/skills/design/agemon-design/references/craft-intent.md +160 -0
  21. package/assets/skills/design/agemon-design/references/dashboard.md +131 -0
  22. package/assets/skills/design/agemon-design/references/dataviz.md +197 -0
  23. package/assets/skills/design/agemon-design/references/finish-bar.md +243 -0
  24. package/assets/skills/design/agemon-design/references/forms.md +192 -0
  25. package/assets/skills/design/agemon-design/references/heuristics.md +403 -0
  26. package/assets/skills/design/agemon-design/references/inspiration.md +287 -0
  27. package/assets/skills/design/agemon-design/references/layout.md +236 -0
  28. package/assets/skills/design/agemon-design/references/loops.md +155 -0
  29. package/assets/skills/design/agemon-design/references/metadata.md +98 -0
  30. package/assets/skills/design/agemon-design/references/modern-css.md +448 -0
  31. package/assets/skills/design/agemon-design/references/motion.md +434 -0
  32. package/assets/skills/design/agemon-design/references/personas.md +206 -0
  33. package/assets/skills/design/agemon-design/references/principles-catalog.md +299 -0
  34. package/assets/skills/design/agemon-design/references/recipe-auth.md +88 -0
  35. package/assets/skills/design/agemon-design/references/recipe-dashboard.md +130 -0
  36. package/assets/skills/design/agemon-design/references/recipe-landing.md +122 -0
  37. package/assets/skills/design/agemon-design/references/responsive.md +168 -0
  38. package/assets/skills/design/agemon-design/references/review.md +340 -0
  39. package/assets/skills/design/agemon-design/references/sound.md +150 -0
  40. package/assets/skills/design/agemon-design/references/spec.md +123 -0
  41. package/assets/skills/design/agemon-design/references/stack.md +522 -0
  42. package/assets/skills/design/agemon-design/references/state-design.md +188 -0
  43. package/assets/skills/design/agemon-design/references/themes.md +229 -0
  44. package/assets/skills/design/agemon-design/references/tokens.md +350 -0
  45. package/assets/skills/design/agemon-design/references/typography.md +246 -0
  46. package/assets/skills/design/agemon-design-dashboard/LICENSE +21 -0
  47. package/assets/skills/design/agemon-design-dashboard/NOTICE.md +9 -0
  48. package/assets/skills/design/agemon-design-dashboard/SKILL.md +113 -0
  49. package/assets/skills/design/agemon-design-editorial/LICENSE +21 -0
  50. package/assets/skills/design/agemon-design-editorial/NOTICE.md +9 -0
  51. package/assets/skills/design/agemon-design-editorial/SKILL.md +98 -0
  52. package/assets/skills/design/agemon-design-minimal/LICENSE +21 -0
  53. package/assets/skills/design/agemon-design-minimal/NOTICE.md +9 -0
  54. package/assets/skills/design/agemon-design-minimal/SKILL.md +97 -0
  55. package/assets/skills/geo-seo/geo/LICENSE +21 -0
  56. package/assets/skills/geo-seo/geo/NOTICE.md +18 -0
  57. package/assets/skills/geo-seo/geo/SKILL.md +145 -0
  58. package/assets/skills/geo-seo/geo-audit/LICENSE +21 -0
  59. package/assets/skills/geo-seo/geo-audit/NOTICE.md +17 -0
  60. package/assets/skills/geo-seo/geo-audit/SKILL.md +371 -0
  61. package/assets/skills/geo-seo/geo-audit/references/ai-visibility.md +233 -0
  62. package/assets/skills/geo-seo/geo-audit/references/content.md +329 -0
  63. package/assets/skills/geo-seo/geo-audit/references/platform-analysis.md +294 -0
  64. package/assets/skills/geo-seo/geo-audit/references/schema.md +383 -0
  65. package/assets/skills/geo-seo/geo-audit/references/technical.md +368 -0
  66. package/assets/skills/geo-seo/geo-brand-mentions/LICENSE +21 -0
  67. package/assets/skills/geo-seo/geo-brand-mentions/NOTICE.md +15 -0
  68. package/assets/skills/geo-seo/geo-brand-mentions/SKILL.md +459 -0
  69. package/assets/skills/geo-seo/geo-citability/LICENSE +21 -0
  70. package/assets/skills/geo-seo/geo-citability/NOTICE.md +14 -0
  71. package/assets/skills/geo-seo/geo-citability/SKILL.md +320 -0
  72. package/assets/skills/geo-seo/geo-content/LICENSE +21 -0
  73. package/assets/skills/geo-seo/geo-content/NOTICE.md +14 -0
  74. package/assets/skills/geo-seo/geo-content/SKILL.md +352 -0
  75. package/assets/skills/geo-seo/geo-crawlers/LICENSE +21 -0
  76. package/assets/skills/geo-seo/geo-crawlers/NOTICE.md +15 -0
  77. package/assets/skills/geo-seo/geo-crawlers/SKILL.md +388 -0
  78. package/assets/skills/geo-seo/geo-llmstxt/LICENSE +21 -0
  79. package/assets/skills/geo-seo/geo-llmstxt/NOTICE.md +14 -0
  80. package/assets/skills/geo-seo/geo-llmstxt/SKILL.md +433 -0
  81. package/assets/skills/geo-seo/geo-platform-optimizer/LICENSE +21 -0
  82. package/assets/skills/geo-seo/geo-platform-optimizer/NOTICE.md +14 -0
  83. package/assets/skills/geo-seo/geo-platform-optimizer/SKILL.md +282 -0
  84. package/assets/skills/geo-seo/geo-report/LICENSE +21 -0
  85. package/assets/skills/geo-seo/geo-report/NOTICE.md +14 -0
  86. package/assets/skills/geo-seo/geo-report/SKILL.md +406 -0
  87. package/assets/skills/geo-seo/geo-report-pdf/LICENSE +21 -0
  88. package/assets/skills/geo-seo/geo-report-pdf/NOTICE.md +20 -0
  89. package/assets/skills/geo-seo/geo-report-pdf/SKILL.md +153 -0
  90. package/assets/skills/geo-seo/geo-report-pdf/templates/geo-report-template.html +548 -0
  91. package/assets/skills/geo-seo/geo-schema/LICENSE +21 -0
  92. package/assets/skills/geo-seo/geo-schema/NOTICE.md +16 -0
  93. package/assets/skills/geo-seo/geo-schema/SKILL.md +396 -0
  94. package/assets/skills/geo-seo/geo-technical/LICENSE +21 -0
  95. package/assets/skills/geo-seo/geo-technical/NOTICE.md +15 -0
  96. package/assets/skills/geo-seo/geo-technical/SKILL.md +566 -0
  97. package/assets/skills/performance/agemon-performance/NOTICE.md +1 -0
  98. package/assets/skills/performance/agemon-performance/SKILL.md +76 -0
  99. package/assets/skills/security/agemon-security/LICENSE +21 -0
  100. package/assets/skills/security/agemon-security/NOTICE.md +8 -0
  101. package/assets/skills/security/agemon-security/SKILL.md +356 -0
  102. package/assets/skills/self-review/agemon-review-intake/LICENSE +21 -0
  103. package/assets/skills/self-review/agemon-review-intake/NOTICE.md +9 -0
  104. package/assets/skills/self-review/agemon-review-intake/SKILL.md +205 -0
  105. package/assets/skills/self-review/agemon-review-request/LICENSE +21 -0
  106. package/assets/skills/self-review/agemon-review-request/NOTICE.md +9 -0
  107. package/assets/skills/self-review/agemon-review-request/SKILL.md +104 -0
  108. package/assets/skills/self-review/agemon-review-request/code-reviewer.md +188 -0
  109. package/assets/skills/self-review/agemon-root-cause/LICENSE +21 -0
  110. package/assets/skills/self-review/agemon-root-cause/NOTICE.md +10 -0
  111. package/assets/skills/self-review/agemon-root-cause/SKILL.md +283 -0
  112. package/assets/skills/self-review/agemon-root-cause/condition-based-waiting-example.ts +158 -0
  113. package/assets/skills/self-review/agemon-root-cause/condition-based-waiting.md +115 -0
  114. package/assets/skills/self-review/agemon-root-cause/defense-in-depth.md +122 -0
  115. package/assets/skills/self-review/agemon-root-cause/find-polluter.sh +72 -0
  116. package/assets/skills/self-review/agemon-root-cause/root-cause-tracing.md +169 -0
  117. package/assets/skills/self-review/agemon-root-cause/test-academic.md +14 -0
  118. package/assets/skills/self-review/agemon-root-cause/test-pressure-1.md +58 -0
  119. package/assets/skills/self-review/agemon-root-cause/test-pressure-2.md +68 -0
  120. package/assets/skills/self-review/agemon-root-cause/test-pressure-3.md +69 -0
  121. package/assets/skills/self-review/agemon-verify-before-done/LICENSE +21 -0
  122. package/assets/skills/self-review/agemon-verify-before-done/NOTICE.md +9 -0
  123. package/assets/skills/self-review/agemon-verify-before-done/SKILL.md +120 -0
  124. package/assets/skills/team-lead/agemon-plan-rfc/SKILL.md +317 -0
  125. package/assets/skills/team-lead/prd-generator/SKILL.md +437 -0
  126. package/assets/skills/team-lead/skill-headofit-audit/SKILL.md +72 -0
  127. package/assets/skills/team-lead/skill-incident-rca/SKILL.md +66 -0
  128. package/assets/skills/team-lead/skill-meeting-lifecycle/SKILL.md +63 -0
  129. package/assets/skills/team-lead/skill-obsidian-vault-sync/SKILL.md +69 -0
  130. package/assets/skills/team-lead/skill-prd-decomposer/SKILL.md +71 -0
  131. package/assets/skills/team-lead/skill-sec-check/SKILL.md +70 -0
  132. package/assets/skills/team-lead/skill-task-extractor/SKILL.md +79 -0
  133. package/assets/skills/team-lead/skill-tech-spike/SKILL.md +57 -0
  134. package/assets/skills/team-lead/skill-techlead-reviewer/SKILL.md +81 -0
  135. package/assets/tools/code-review-graph-constraints.txt +1418 -0
  136. package/assets/tools/package-lock.json +111 -0
  137. package/assets/tools/package.json +6 -0
  138. package/dist/chunk-5LATHJYU.js +4026 -0
  139. package/dist/chunk-5LATHJYU.js.map +1 -0
  140. package/dist/fake-subprocess-2BETWZVZ.js +666 -0
  141. package/dist/fake-subprocess-2BETWZVZ.js.map +1 -0
  142. package/dist/index.js +21101 -1956
  143. package/dist/index.js.map +1 -1
  144. package/package.json +30 -17
@@ -0,0 +1,548 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data:; style-src 'unsafe-inline'; script-src 'sha256-kUoKOVbBUmzfMpMyA59IwztFf8PYVxchQ+NkNrR2d7U='">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>$title$</title>
8
+ <style>
9
+ /* =====================================================
10
+ GEO Audit Report — Professional PDF Stylesheet
11
+ Rendered via pandoc → Chrome headless
12
+ ===================================================== */
13
+
14
+
15
+ /* ---- Page layout ---- */
16
+ @page {
17
+ size: A4;
18
+ margin: 18mm 18mm 22mm 18mm;
19
+ }
20
+
21
+ @page :first {
22
+ margin-top: 0;
23
+ margin-left: 0;
24
+ margin-right: 0;
25
+ }
26
+
27
+ *, *::before, *::after { box-sizing: border-box; }
28
+
29
+ :root {
30
+ --navy: #0f1f3d;
31
+ --blue: #1a3a6b;
32
+ --accent: #e8472a;
33
+ --teal: #0891b2;
34
+ --success: #059669;
35
+ --warning: #d97706;
36
+ --danger: #dc2626;
37
+ --info: #2563eb;
38
+ --text: #1e293b;
39
+ --muted: #64748b;
40
+ --light: #f8fafc;
41
+ --border: #e2e8f0;
42
+ --white: #ffffff;
43
+ --critical-bg: #fef2f2;
44
+ --critical-border: #dc2626;
45
+ --high-bg: #fff7ed;
46
+ --high-border: #ea580c;
47
+ --medium-bg: #fefce8;
48
+ --medium-border: #ca8a04;
49
+ --low-bg: #f0fdf4;
50
+ --low-border: #16a34a;
51
+ }
52
+
53
+ body {
54
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
55
+ font-size: 9.5pt;
56
+ line-height: 1.55;
57
+ color: var(--text);
58
+ background: var(--white);
59
+ margin: 0;
60
+ padding: 0;
61
+ }
62
+
63
+ /* ---- Cover section (first H1) ---- */
64
+ #cover-section {
65
+ background: linear-gradient(135deg, var(--navy) 0%, var(--blue) 60%, #1e4d8c 100%);
66
+ color: var(--white);
67
+ padding: 52px 48px 44px;
68
+ margin: 0;
69
+ page-break-after: always;
70
+ position: relative;
71
+ min-height: 240px;
72
+ }
73
+
74
+ #cover-section .cover-eyebrow {
75
+ font-size: 8pt;
76
+ font-weight: 600;
77
+ letter-spacing: 0.12em;
78
+ text-transform: uppercase;
79
+ color: rgba(255,255,255,0.55);
80
+ margin: 0 0 10px;
81
+ }
82
+
83
+ #cover-section h1 {
84
+ font-size: 26pt;
85
+ font-weight: 700;
86
+ margin: 0 0 6px;
87
+ color: var(--white);
88
+ border: none;
89
+ padding: 0;
90
+ background: none;
91
+ letter-spacing: -0.5px;
92
+ }
93
+
94
+ #cover-section .cover-domain {
95
+ font-size: 11pt;
96
+ color: rgba(255,255,255,0.7);
97
+ margin: 0 0 32px;
98
+ font-weight: 400;
99
+ }
100
+
101
+ .cover-meta-grid {
102
+ display: flex;
103
+ gap: 36px;
104
+ flex-wrap: wrap;
105
+ margin-top: 28px;
106
+ padding-top: 24px;
107
+ border-top: 1px solid rgba(255,255,255,0.18);
108
+ }
109
+
110
+ .cover-meta-item {
111
+ display: flex;
112
+ flex-direction: column;
113
+ gap: 3px;
114
+ }
115
+
116
+ .cover-meta-item .label {
117
+ font-size: 7pt;
118
+ font-weight: 600;
119
+ letter-spacing: 0.1em;
120
+ text-transform: uppercase;
121
+ color: rgba(255,255,255,0.5);
122
+ }
123
+
124
+ .cover-meta-item .value {
125
+ font-size: 10pt;
126
+ font-weight: 500;
127
+ color: rgba(255,255,255,0.9);
128
+ }
129
+
130
+ /* Score badge on cover */
131
+ .geo-score-badge {
132
+ position: absolute;
133
+ top: 44px;
134
+ right: 48px;
135
+ width: 108px;
136
+ height: 108px;
137
+ border-radius: 50%;
138
+ display: flex;
139
+ flex-direction: column;
140
+ align-items: center;
141
+ justify-content: center;
142
+ background: rgba(255,255,255,0.1);
143
+ border: 3px solid rgba(255,255,255,0.25);
144
+ }
145
+
146
+ .geo-score-badge .score-number {
147
+ font-size: 30pt;
148
+ font-weight: 700;
149
+ line-height: 1;
150
+ color: var(--white);
151
+ }
152
+
153
+ .geo-score-badge .score-denom {
154
+ font-size: 9pt;
155
+ color: rgba(255,255,255,0.6);
156
+ line-height: 1;
157
+ }
158
+
159
+ .geo-score-badge .score-label {
160
+ font-size: 7.5pt;
161
+ font-weight: 600;
162
+ letter-spacing: 0.05em;
163
+ text-transform: uppercase;
164
+ margin-top: 4px;
165
+ color: rgba(255,255,255,0.75);
166
+ }
167
+
168
+ /* ---- Content area ---- */
169
+ #content {
170
+ padding: 0;
171
+ }
172
+
173
+ /* ---- Headings ---- */
174
+ h1 {
175
+ font-size: 18pt;
176
+ font-weight: 700;
177
+ color: var(--navy);
178
+ margin: 28px 0 16px;
179
+ padding-bottom: 8px;
180
+ border-bottom: 2.5px solid var(--navy);
181
+ page-break-after: avoid;
182
+ letter-spacing: -0.3px;
183
+ }
184
+
185
+ h2 {
186
+ font-size: 12pt;
187
+ font-weight: 700;
188
+ color: var(--white);
189
+ background: var(--navy);
190
+ margin: 28px 0 14px;
191
+ padding: 9px 14px 8px;
192
+ border-radius: 4px;
193
+ page-break-after: avoid;
194
+ letter-spacing: -0.1px;
195
+ }
196
+
197
+ h3 {
198
+ font-size: 10.5pt;
199
+ font-weight: 600;
200
+ color: var(--navy);
201
+ margin: 22px 0 10px;
202
+ padding-left: 10px;
203
+ border-left: 3px solid var(--teal);
204
+ page-break-after: avoid;
205
+ }
206
+
207
+ h4 {
208
+ font-size: 9.5pt;
209
+ font-weight: 600;
210
+ color: var(--muted);
211
+ margin: 16px 0 8px;
212
+ text-transform: uppercase;
213
+ letter-spacing: 0.07em;
214
+ page-break-after: avoid;
215
+ }
216
+
217
+ /* ---- Score overview block (after main h1) ---- */
218
+ blockquote {
219
+ background: var(--light);
220
+ border-left: 4px solid var(--teal);
221
+ margin: 16px 0;
222
+ padding: 14px 18px;
223
+ border-radius: 0 6px 6px 0;
224
+ font-style: normal;
225
+ color: var(--text);
226
+ }
227
+
228
+ blockquote p {
229
+ margin: 0;
230
+ }
231
+
232
+ /* ---- Tables ---- */
233
+ table {
234
+ width: 100%;
235
+ border-collapse: collapse;
236
+ margin: 14px 0 20px;
237
+ font-size: 9pt;
238
+ page-break-inside: avoid;
239
+ }
240
+
241
+ thead tr {
242
+ background: var(--navy);
243
+ color: var(--white);
244
+ }
245
+
246
+ thead th {
247
+ padding: 8px 12px;
248
+ text-align: left;
249
+ font-weight: 600;
250
+ font-size: 8pt;
251
+ letter-spacing: 0.04em;
252
+ text-transform: uppercase;
253
+ white-space: nowrap;
254
+ }
255
+
256
+ tbody tr:nth-child(odd) {
257
+ background: var(--white);
258
+ }
259
+
260
+ tbody tr:nth-child(even) {
261
+ background: var(--light);
262
+ }
263
+
264
+ tbody tr:hover {
265
+ background: #eef2ff;
266
+ }
267
+
268
+ td {
269
+ padding: 7px 12px;
270
+ border-bottom: 1px solid var(--border);
271
+ vertical-align: top;
272
+ }
273
+
274
+ /* Score color coding applied by JS */
275
+ td.score-excellent { color: var(--success); font-weight: 600; }
276
+ td.score-good { color: #0369a1; font-weight: 600; }
277
+ td.score-fair { color: var(--warning); font-weight: 600; }
278
+ td.score-poor { color: #ea580c; font-weight: 600; }
279
+ td.score-critical { color: var(--danger); font-weight: 600; }
280
+
281
+ tr.score-excellent td:first-child { border-left: 3px solid var(--success); }
282
+ tr.score-good td:first-child { border-left: 3px solid #0369a1; }
283
+ tr.score-fair td:first-child { border-left: 3px solid var(--warning); }
284
+ tr.score-poor td:first-child { border-left: 3px solid #ea580c; }
285
+ tr.score-critical td:first-child { border-left: 3px solid var(--danger); }
286
+
287
+ /* Last row (total) styling */
288
+ tbody tr:last-child td {
289
+ font-weight: 700;
290
+ background: #eff6ff;
291
+ border-top: 2px solid var(--navy);
292
+ border-bottom: 2px solid var(--navy);
293
+ }
294
+
295
+ /* ---- Paragraphs ---- */
296
+ p {
297
+ margin: 0 0 10px;
298
+ orphans: 3;
299
+ widows: 3;
300
+ }
301
+
302
+ /* ---- Lists ---- */
303
+ ul, ol {
304
+ margin: 8px 0 12px;
305
+ padding-left: 22px;
306
+ }
307
+
308
+ li {
309
+ margin-bottom: 5px;
310
+ line-height: 1.5;
311
+ }
312
+
313
+ /* ---- Severity-tagged headings (### 1. Critical Issue...) ---- */
314
+ h3 .severity-critical {
315
+ display: inline-block;
316
+ background: var(--critical-border);
317
+ color: var(--white);
318
+ font-size: 7pt;
319
+ font-weight: 700;
320
+ letter-spacing: 0.08em;
321
+ text-transform: uppercase;
322
+ padding: 2px 7px;
323
+ border-radius: 3px;
324
+ margin-right: 6px;
325
+ vertical-align: middle;
326
+ }
327
+
328
+ /* Finding blocks — styled paragraphs after h3s that contain severity keywords */
329
+ .finding-critical {
330
+ border-left: 4px solid var(--critical-border);
331
+ background: var(--critical-bg);
332
+ padding: 10px 14px;
333
+ margin: 8px 0 16px;
334
+ border-radius: 0 4px 4px 0;
335
+ }
336
+
337
+ .finding-high {
338
+ border-left: 4px solid var(--high-border);
339
+ background: var(--high-bg);
340
+ padding: 10px 14px;
341
+ margin: 8px 0 16px;
342
+ border-radius: 0 4px 4px 0;
343
+ }
344
+
345
+ .finding-medium {
346
+ border-left: 4px solid var(--medium-border);
347
+ background: var(--medium-bg);
348
+ padding: 10px 14px;
349
+ margin: 8px 0 16px;
350
+ border-radius: 0 4px 4px 0;
351
+ }
352
+
353
+ .finding-low {
354
+ border-left: 4px solid var(--low-border);
355
+ background: var(--low-bg);
356
+ padding: 10px 14px;
357
+ margin: 8px 0 16px;
358
+ border-radius: 0 4px 4px 0;
359
+ }
360
+
361
+ /* ---- Code blocks ---- */
362
+ pre {
363
+ background: #0f172a;
364
+ color: #e2e8f0;
365
+ padding: 14px 16px;
366
+ border-radius: 6px;
367
+ font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;
368
+ font-size: 8pt;
369
+ line-height: 1.6;
370
+ overflow-x: auto;
371
+ page-break-inside: avoid;
372
+ margin: 12px 0;
373
+ }
374
+
375
+ code {
376
+ font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;
377
+ font-size: 8.5pt;
378
+ background: #f1f5f9;
379
+ padding: 1px 5px;
380
+ border-radius: 3px;
381
+ color: #be185d;
382
+ }
383
+
384
+ pre code {
385
+ background: none;
386
+ padding: 0;
387
+ color: inherit;
388
+ font-size: inherit;
389
+ }
390
+
391
+ /* ---- Horizontal rule ---- */
392
+ hr {
393
+ border: none;
394
+ border-top: 1.5px solid var(--border);
395
+ margin: 24px 0;
396
+ }
397
+
398
+ /* ---- Strong / Em ---- */
399
+ strong { font-weight: 600; color: var(--text); }
400
+ em { color: var(--muted); }
401
+
402
+ /* ---- Page breaks ---- */
403
+ h2 { page-break-before: auto; }
404
+ h2.section-break { page-break-before: always; }
405
+
406
+ /* ---- Quick wins section special styling ---- */
407
+ .quick-wins-table td:first-child {
408
+ font-weight: 500;
409
+ max-width: 340px;
410
+ }
411
+
412
+ /* ---- Footer ---- */
413
+ /* Footer text is overridden per-report by an inline <style> block in
414
+ geo-report-template.html (driven by the footer_text metadata field).
415
+ This value is a neutral fallback only — never put a client name here. */
416
+ @page {
417
+ @bottom-center {
418
+ content: "GEO Audit";
419
+ font-family: 'Inter', sans-serif;
420
+ font-size: 7.5pt;
421
+ color: #94a3b8;
422
+ }
423
+ @bottom-right {
424
+ content: "Page " counter(page) " of " counter(pages);
425
+ font-family: 'Inter', sans-serif;
426
+ font-size: 7.5pt;
427
+ color: #94a3b8;
428
+ }
429
+ }
430
+ </style>
431
+ <style>
432
+ /* Per-report page footer. Overrides the neutral fallback in the stylesheet.
433
+ Falls back to the brand name so a client's report never carries another
434
+ client's name. */
435
+ @page {
436
+ @bottom-center {
437
+ content: "$if(footer_text)$$footer_text$$else$$if(brand_name)$$brand_name$ · GEO Audit$else$GEO Audit$endif$$endif$";
438
+ font-family: 'Inter', sans-serif;
439
+ font-size: 7.5pt;
440
+ color: #94a3b8;
441
+ }
442
+ }
443
+ </style>
444
+ </head>
445
+ <body>
446
+
447
+ <!-- COVER SECTION -->
448
+ <div id="cover-section">
449
+ <p class="cover-eyebrow">Generative Engine Optimization Audit</p>
450
+ <h1>$if(brand_name)$$brand_name$$else$GEO Audit Report$endif$</h1>
451
+ <p class="cover-domain">$domain$</p>
452
+
453
+ <div class="geo-score-badge">
454
+ <span class="score-number">$if(geo_score)$$geo_score$$else$—$endif$</span>
455
+ <span class="score-denom">/100</span>
456
+ <span class="score-label">$score_label$</span>
457
+ </div>
458
+
459
+ <!-- Meta fields render only when supplied. Never default these to sample
460
+ data — an unset field silently inheriting another client's details is
461
+ how a report ships with the wrong company on the cover. -->
462
+ <div class="cover-meta-grid">
463
+ $if(date)$<div class="cover-meta-item">
464
+ <span class="label">Audit Date</span>
465
+ <span class="value">$date$</span>
466
+ </div>$endif$
467
+ $if(business_type)$<div class="cover-meta-item">
468
+ <span class="label">Business Type</span>
469
+ <span class="value">$business_type$</span>
470
+ </div>$endif$
471
+ $if(locations)$<div class="cover-meta-item">
472
+ <span class="label">Locations</span>
473
+ <span class="value">$locations$</span>
474
+ </div>$endif$
475
+ $if(platform)$<div class="cover-meta-item">
476
+ <span class="label">Platform</span>
477
+ <span class="value">$platform$</span>
478
+ </div>$endif$
479
+ </div>
480
+ </div>
481
+
482
+ <!-- REPORT BODY -->
483
+ <div id="content">
484
+ $body$
485
+ </div>
486
+
487
+ <script>
488
+ // Color-code table cells containing score values (e.g. "40/100", "58/100")
489
+ // and apply severity classes to finding sections
490
+ (function() {
491
+ function scoreColor(n) {
492
+ if (n >= 80) return 'excellent';
493
+ if (n >= 65) return 'good';
494
+ if (n >= 50) return 'fair';
495
+ if (n >= 35) return 'poor';
496
+ return 'critical';
497
+ }
498
+
499
+ // Color-code table cells with "XX/100" patterns
500
+ document.querySelectorAll('td').forEach(function(td) {
501
+ var m = td.textContent.match(/^(\d{1,3})\/100$$/);
502
+ if (m) {
503
+ var score = parseInt(m[1]);
504
+ td.classList.add('score-' + scoreColor(score));
505
+ // Also style the row
506
+ var tr = td.parentElement;
507
+ tr.classList.add('score-' + scoreColor(score));
508
+ }
509
+ });
510
+
511
+ // Style finding sections by detecting severity keywords in h3 headings
512
+ document.querySelectorAll('h3').forEach(function(h3) {
513
+ var text = h3.textContent.toLowerCase();
514
+ var severity = null;
515
+ if (text.indexOf('critical') !== -1) severity = 'critical';
516
+ else if (text.indexOf('high priority') !== -1 || (text.indexOf('high') !== -1 && text.indexOf('priority') === -1 && text.indexOf('priority') === -1)) severity = 'high';
517
+ else if (text.indexOf('medium') !== -1) severity = 'medium';
518
+ else if (text.indexOf('low') !== -1) severity = 'low';
519
+
520
+ if (severity) {
521
+ // Wrap following paragraphs/lists until next heading
522
+ var sibling = h3.nextElementSibling;
523
+ while (sibling && !['H1','H2','H3','H4'].includes(sibling.tagName)) {
524
+ sibling.classList.add('finding-' + severity);
525
+ sibling = sibling.nextElementSibling;
526
+ }
527
+ }
528
+ });
529
+
530
+ // Add section-break class to major h2s that should start on new page
531
+ var breakBefore = [
532
+ 'high priority',
533
+ 'medium priority',
534
+ 'generated schema',
535
+ '90-day roadmap',
536
+ 'component score'
537
+ ];
538
+ document.querySelectorAll('h2').forEach(function(h2) {
539
+ var text = h2.textContent.toLowerCase();
540
+ breakBefore.forEach(function(kw) {
541
+ if (text.indexOf(kw) !== -1) h2.classList.add('section-break');
542
+ });
543
+ });
544
+ })();
545
+ </script>
546
+
547
+ </body>
548
+ </html>
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zubair Trabzada
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,16 @@
1
+ # Vendored skill
2
+
3
+ - Source: https://github.com/zubair-trabzada/geo-seo-claude
4
+ - Path in source: skills/geo-schema/SKILL.md
5
+ - Commit: 989cae01e8ebbc42a9ec798eb9e7cb423f5ec89c
6
+ - Retrieved: 2026-10-25
7
+ - License: MIT — see `LICENSE` in this directory.
8
+
9
+ ## agemon modifications
10
+
11
+ - Removed `allowed-tools` from the frontmatter: no tool is pre-approved, so every web fetch to a new domain, file write and shell command goes through the user's normal permission prompt.
12
+ - Added the "Untrusted content" section after the frontmatter.
13
+ - Replaced `fetch_page.py` with the same fixed, user-approved read-only `curl` command as `geo-technical` (without its markdown-negotiation variant), because WebFetch drops the `<head>` where JSON-LD lives.
14
+ - Generated JSON-LD escapes `</` in string values.
15
+
16
+ Statistics quoted in the text are upstream's claims; agemon has not verified them.