agemon 6.0.0 → 6.3.1

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 (171) hide show
  1. package/README.md +424 -89
  2. package/assets/skills/design/agemon-design/NOTICE.md +34 -0
  3. package/assets/skills/design/agemon-design/SKILL.md +95 -358
  4. package/assets/skills/design/agemon-design/references/actions.md +215 -0
  5. package/assets/skills/design/agemon-design/references/brief.md +13 -9
  6. package/assets/skills/design/agemon-design/references/core-rules.md +166 -0
  7. package/assets/skills/design/agemon-design/references/craft-intent.md +16 -14
  8. package/assets/skills/design/agemon-design/references/dashboard.md +1 -1
  9. package/assets/skills/design/agemon-design/references/dataviz.md +8 -8
  10. package/assets/skills/design/agemon-design/references/finish-bar.md +1 -1
  11. package/assets/skills/design/agemon-design/references/heuristics.md +56 -140
  12. package/assets/skills/design/agemon-design/references/inspiration.md +6 -6
  13. package/assets/skills/design/agemon-design/references/loops.md +9 -9
  14. package/assets/skills/design/agemon-design/references/motion.md +1 -1
  15. package/assets/skills/design/agemon-design/references/personas.md +4 -4
  16. package/assets/skills/design/{agemon-design-dashboard/SKILL.md → agemon-design/references/preset-dashboard.md} +8 -12
  17. package/assets/skills/design/{agemon-design-editorial/SKILL.md → agemon-design/references/preset-editorial.md} +5 -9
  18. package/assets/skills/design/{agemon-design-minimal/SKILL.md → agemon-design/references/preset-minimal.md} +8 -12
  19. package/assets/skills/design/agemon-design/references/principles-catalog.md +3 -3
  20. package/assets/skills/design/agemon-design/references/recipe-auth.md +3 -3
  21. package/assets/skills/design/agemon-design/references/recipe-dashboard.md +2 -2
  22. package/assets/skills/design/agemon-design/references/recipe-landing.md +9 -11
  23. package/assets/skills/design/agemon-design/references/review.md +7 -7
  24. package/assets/skills/design/agemon-design/references/routing.md +143 -0
  25. package/assets/skills/design/agemon-design/references/spec.md +8 -8
  26. package/assets/skills/design/agemon-design/references/stack.md +1 -1
  27. package/assets/skills/design/agemon-design/references/stage-assets.md +106 -0
  28. package/assets/skills/design/agemon-design/references/stage-build.md +46 -0
  29. package/assets/skills/design/agemon-design/references/stage-critique.md +34 -0
  30. package/assets/skills/design/agemon-design/references/stage-directions.md +44 -0
  31. package/assets/skills/design/agemon-design/references/stage-intake.md +34 -0
  32. package/assets/skills/design/agemon-design/references/stage-verify.md +44 -0
  33. package/assets/skills/design/agemon-design/references/state-design.md +1 -1
  34. package/assets/skills/design/agemon-design/references/tells-2026-11.md +32 -0
  35. package/assets/skills/design/agemon-design/references/themes.md +24 -20
  36. package/assets/skills/design/agemon-design/references/third-party-licenses.md +323 -0
  37. package/assets/skills/design/agemon-design/references/typography.md +11 -9
  38. package/assets/skills/design/agemon-design/scripts/audit-page.js +532 -0
  39. package/assets/skills/design/agemon-design/scripts/check-source.mjs +358 -0
  40. package/assets/skills/design/agemon-design/scripts/deal.mjs +231 -0
  41. package/assets/skills/design/agemon-design/scripts/inventory.mjs +676 -0
  42. package/assets/skills/{design/agemon-design-dashboard → essentials/web-design-guidelines}/LICENSE +1 -1
  43. package/assets/skills/essentials/web-design-guidelines/NOTICE.md +14 -0
  44. package/assets/skills/essentials/web-design-guidelines/SKILL.md +18 -0
  45. package/assets/skills/essentials/web-design-guidelines/references/guidelines.md +184 -0
  46. package/assets/skills/{design/agemon-design-minimal → essentials/writing-guidelines}/LICENSE +1 -1
  47. package/assets/skills/essentials/writing-guidelines/NOTICE.md +14 -0
  48. package/assets/skills/essentials/writing-guidelines/SKILL.md +18 -0
  49. package/assets/skills/essentials/writing-guidelines/references/guidelines.md +250 -0
  50. package/assets/skills/founder/agemon-founder-board/LICENSE +21 -0
  51. package/assets/skills/founder/agemon-founder-board/NOTICE.md +11 -0
  52. package/assets/skills/founder/agemon-founder-board/SKILL.md +111 -0
  53. package/assets/skills/founder/agemon-founder-board/lenses.md +84 -0
  54. package/assets/skills/founder/agemon-founder-brand/LICENSE +21 -0
  55. package/assets/skills/founder/agemon-founder-brand/NOTICE.md +12 -0
  56. package/assets/skills/founder/agemon-founder-brand/SKILL.md +77 -0
  57. package/assets/skills/founder/agemon-founder-cfo/LICENSE +21 -0
  58. package/assets/skills/founder/agemon-founder-cfo/NOTICE.md +12 -0
  59. package/assets/skills/founder/agemon-founder-cfo/SKILL.md +109 -0
  60. package/assets/skills/founder/agemon-founder-cfo/example.json +27 -0
  61. package/assets/skills/founder/agemon-founder-cfo/unit_economics.py +270 -0
  62. package/assets/skills/founder/agemon-founder-competitors/LICENSE +21 -0
  63. package/assets/skills/founder/agemon-founder-competitors/NOTICE.md +12 -0
  64. package/assets/skills/founder/agemon-founder-competitors/SKILL.md +84 -0
  65. package/assets/skills/founder/agemon-founder-consumer/LICENSE +21 -0
  66. package/assets/skills/founder/agemon-founder-consumer/NOTICE.md +11 -0
  67. package/assets/skills/founder/agemon-founder-consumer/SKILL.md +126 -0
  68. package/assets/skills/founder/agemon-founder-consumer/customer.example.json +34 -0
  69. package/assets/skills/founder/agemon-founder-consumer/panel.py +424 -0
  70. package/assets/skills/founder/agemon-founder-consumer/pitch.example.md +3 -0
  71. package/assets/skills/founder/agemon-founder-launch/LICENSE +21 -0
  72. package/assets/skills/founder/agemon-founder-launch/NOTICE.md +11 -0
  73. package/assets/skills/founder/agemon-founder-launch/SKILL.md +65 -0
  74. package/assets/skills/founder/agemon-founder-marketing/LICENSE +21 -0
  75. package/assets/skills/founder/agemon-founder-marketing/NOTICE.md +11 -0
  76. package/assets/skills/founder/agemon-founder-marketing/SKILL.md +80 -0
  77. package/assets/skills/founder/agemon-founder-offer/LICENSE +21 -0
  78. package/assets/skills/founder/agemon-founder-offer/NOTICE.md +11 -0
  79. package/assets/skills/founder/agemon-founder-offer/SKILL.md +75 -0
  80. package/assets/skills/founder/agemon-founder-ops/LICENSE +21 -0
  81. package/assets/skills/founder/agemon-founder-ops/NOTICE.md +12 -0
  82. package/assets/skills/founder/agemon-founder-ops/SKILL.md +77 -0
  83. package/assets/skills/founder/agemon-founder-plan/LICENSE +21 -0
  84. package/assets/skills/founder/agemon-founder-plan/NOTICE.md +11 -0
  85. package/assets/skills/founder/agemon-founder-plan/SKILL.md +88 -0
  86. package/assets/skills/founder/agemon-founder-plan/compile.py +178 -0
  87. package/assets/skills/founder/agemon-founder-pricing/LICENSE +21 -0
  88. package/assets/skills/founder/agemon-founder-pricing/NOTICE.md +12 -0
  89. package/assets/skills/founder/agemon-founder-pricing/SKILL.md +92 -0
  90. package/assets/skills/founder/agemon-founder-pricing/van_westendorp.py +172 -0
  91. package/assets/skills/{design/agemon-design-editorial → output-style/agemon-adhd}/LICENSE +1 -1
  92. package/assets/skills/output-style/agemon-adhd/NOTICE.md +13 -0
  93. package/assets/skills/output-style/agemon-adhd/SKILL.md +138 -0
  94. package/assets/skills/security/agemon-security-audit/AI-AND-LLM.md +83 -0
  95. package/assets/skills/security/agemon-security-audit/ATTACK-CLASSES.md +130 -0
  96. package/assets/skills/security/agemon-security-audit/CLIENT-SIDE.md +83 -0
  97. package/assets/skills/security/agemon-security-audit/CLOUD-AND-DEPLOYMENT.md +86 -0
  98. package/assets/skills/security/agemon-security-audit/DATA-ISOLATION-AND-LIFECYCLE.md +84 -0
  99. package/assets/skills/security/agemon-security-audit/DESKTOP-MOBILE-AND-LOCAL-IPC.md +89 -0
  100. package/assets/skills/security/agemon-security-audit/HUNTING.md +251 -0
  101. package/assets/skills/security/agemon-security-audit/LICENSE +21 -0
  102. package/assets/skills/security/agemon-security-audit/MEMORY-SAFETY-AND-BINARY.md +101 -0
  103. package/assets/skills/security/agemon-security-audit/NOTICE.md +12 -0
  104. package/assets/skills/security/agemon-security-audit/PROTOCOLS-RPC-AND-MESSAGING.md +81 -0
  105. package/assets/skills/security/agemon-security-audit/RECONNAISSANCE.md +156 -0
  106. package/assets/skills/security/agemon-security-audit/RESOURCE-EXHAUSTION-AND-AVAILABILITY.md +78 -0
  107. package/assets/skills/security/agemon-security-audit/SKILL.md +192 -0
  108. package/assets/skills/security/agemon-security-audit/SUPPLY-CHAIN-AND-RELEASE.md +73 -0
  109. package/assets/skills/security/agemon-security-audit/VALIDATION-AND-REPORTING.md +186 -0
  110. package/assets/skills/security/agemon-security-audit/WEB-PROTOCOL-AND-AUTH.md +105 -0
  111. package/assets/skills/security/agemon-security-audit/report-schema.json +461 -0
  112. package/assets/skills/security/agemon-security-audit/validate-coverage-ledger.cjs +872 -0
  113. package/assets/skills/security/agemon-security-audit/validate-findings.cjs +773 -0
  114. package/assets/skills/workflow/agemon-brainstorming/LICENSE +21 -0
  115. package/assets/skills/workflow/agemon-brainstorming/NOTICE.md +14 -0
  116. package/assets/skills/workflow/agemon-brainstorming/SKILL.md +287 -0
  117. package/assets/skills/workflow/agemon-brainstorming/builder-check-prompt.md +23 -0
  118. package/assets/skills/workflow/agemon-dispatching-parallel-agents/LICENSE +21 -0
  119. package/assets/skills/workflow/agemon-dispatching-parallel-agents/NOTICE.md +13 -0
  120. package/assets/skills/workflow/agemon-dispatching-parallel-agents/SKILL.md +167 -0
  121. package/assets/skills/workflow/agemon-executing-plans/LICENSE +21 -0
  122. package/assets/skills/workflow/agemon-executing-plans/NOTICE.md +15 -0
  123. package/assets/skills/workflow/agemon-executing-plans/SKILL.md +322 -0
  124. package/assets/skills/workflow/agemon-executing-plans/scripts/task-done +55 -0
  125. package/assets/skills/workflow/agemon-executing-plans/scripts/task-start +32 -0
  126. package/assets/skills/workflow/agemon-finishing-a-development-branch/LICENSE +21 -0
  127. package/assets/skills/workflow/agemon-finishing-a-development-branch/NOTICE.md +13 -0
  128. package/assets/skills/workflow/agemon-finishing-a-development-branch/SKILL.md +225 -0
  129. package/assets/skills/workflow/agemon-subagent-driven-development/LICENSE +21 -0
  130. package/assets/skills/workflow/agemon-subagent-driven-development/NOTICE.md +15 -0
  131. package/assets/skills/workflow/agemon-subagent-driven-development/SKILL.md +339 -0
  132. package/assets/skills/workflow/agemon-subagent-driven-development/code-reviewer.md +198 -0
  133. package/assets/skills/workflow/agemon-subagent-driven-development/implementer-prompt.md +154 -0
  134. package/assets/skills/workflow/agemon-subagent-driven-development/re-review-prompt.md +116 -0
  135. package/assets/skills/workflow/agemon-subagent-driven-development/references/batching.md +11 -0
  136. package/assets/skills/workflow/agemon-subagent-driven-development/references/cannot-verify.md +10 -0
  137. package/assets/skills/workflow/agemon-subagent-driven-development/references/final-review.md +49 -0
  138. package/assets/skills/workflow/agemon-subagent-driven-development/references/fix-loop.md +77 -0
  139. package/assets/skills/workflow/agemon-subagent-driven-development/references/handling-reports.md +15 -0
  140. package/assets/skills/workflow/agemon-subagent-driven-development/references/preflight.md +26 -0
  141. package/assets/skills/workflow/agemon-subagent-driven-development/references/resuming.md +12 -0
  142. package/assets/skills/workflow/agemon-subagent-driven-development/references/role-scout.md +18 -0
  143. package/assets/skills/workflow/agemon-subagent-driven-development/references/role-worker.md +19 -0
  144. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/review-package +64 -0
  145. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/sdd-repo +54 -0
  146. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/sdd-workspace +110 -0
  147. package/assets/skills/workflow/agemon-subagent-driven-development/scripts/task-brief +108 -0
  148. package/assets/skills/workflow/agemon-subagent-driven-development/task-reviewer-prompt.md +209 -0
  149. package/assets/skills/workflow/agemon-test-driven-development/LICENSE +21 -0
  150. package/assets/skills/workflow/agemon-test-driven-development/NOTICE.md +14 -0
  151. package/assets/skills/workflow/agemon-test-driven-development/SKILL.md +330 -0
  152. package/assets/skills/workflow/agemon-test-driven-development/writing-good-tests.md +198 -0
  153. package/assets/skills/workflow/agemon-using-git-worktrees/LICENSE +21 -0
  154. package/assets/skills/workflow/agemon-using-git-worktrees/NOTICE.md +13 -0
  155. package/assets/skills/workflow/agemon-using-git-worktrees/SKILL.md +167 -0
  156. package/assets/skills/workflow/agemon-writing-plans/LICENSE +21 -0
  157. package/assets/skills/workflow/agemon-writing-plans/NOTICE.md +13 -0
  158. package/assets/skills/workflow/agemon-writing-plans/SKILL.md +204 -0
  159. package/dist/{chunk-5LATHJYU.js → chunk-ZZBF3GOV.js} +369 -944
  160. package/dist/chunk-ZZBF3GOV.js.map +1 -0
  161. package/dist/{fake-subprocess-2BETWZVZ.js → fake-subprocess-IV4ML77S.js} +3 -33
  162. package/dist/fake-subprocess-IV4ML77S.js.map +1 -0
  163. package/dist/index.js +3477 -731
  164. package/dist/index.js.map +1 -1
  165. package/package.json +8 -1
  166. package/assets/skills/design/agemon-design/references/agents.md +0 -63
  167. package/assets/skills/design/agemon-design-dashboard/NOTICE.md +0 -9
  168. package/assets/skills/design/agemon-design-editorial/NOTICE.md +0 -9
  169. package/assets/skills/design/agemon-design-minimal/NOTICE.md +0 -9
  170. package/dist/chunk-5LATHJYU.js.map +0 -1
  171. package/dist/fake-subprocess-2BETWZVZ.js.map +0 -1
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env python3
2
+ """Price sensitivity (Van Westendorp) for agemon-founder-pricing. Standard library only.
3
+
4
+ Every buyer on the panel answers four questions: at what price would it be too
5
+ cheap to trust, a bargain, getting expensive, and too expensive to buy. Plotted
6
+ together, those four answers give you an acceptable price range and the price
7
+ that leaves the fewest people unhappy.
8
+
9
+ python3 van_westendorp.py founder/panel/answers
10
+ python3 van_westendorp.py prices.csv --out founder/pricing-curve.md
11
+ python3 van_westendorp.py founder/panel/answers --json
12
+
13
+ Input is either the panel's answers folder (one JSON per buyer, written by
14
+ agemon-founder-consumer) or a CSV with the columns too_cheap, cheap, expensive,
15
+ too_expensive (one row per respondent; extra columns are ignored). A respondent
16
+ missing any of the four numbers, or giving them out of order (too cheap must be
17
+ the lowest, too expensive the highest), is dropped and counted.
18
+
19
+ The four points it reports:
20
+
21
+ PMC point of marginal cheapness below this, too many think it's too cheap
22
+ PME point of marginal expensiveness above this, too many think it's too expensive
23
+ OPP optimal price point as many say "too cheap" as "too expensive"
24
+ IPP indifference price point as many say "a bargain" as "expensive"
25
+
26
+ PMC to PME is the acceptable range. These are answers from simulated buyers:
27
+ use the range to choose what to TEST, then test it with real ones.
28
+ """
29
+
30
+ import argparse
31
+ import csv
32
+ import glob
33
+ import json
34
+ import os
35
+ import sys
36
+
37
+ KEYS = ("too_cheap", "cheap", "expensive", "too_expensive")
38
+
39
+
40
+ class PricingError(Exception):
41
+ pass
42
+
43
+
44
+ def _f(v):
45
+ try:
46
+ x = float(str(v).replace("$", "").replace(",", "").strip())
47
+ except (TypeError, ValueError):
48
+ return None
49
+ return x if x > 0 else None
50
+
51
+
52
+ def read(path):
53
+ """Return (rows, dropped) where rows are (too_cheap, cheap, expensive, too_expensive)."""
54
+ raw = []
55
+ if os.path.isdir(path):
56
+ for fp in sorted(glob.glob(os.path.join(path, "*.json"))):
57
+ try:
58
+ with open(fp, encoding="utf-8") as fh:
59
+ a = json.load(fh)
60
+ except (json.JSONDecodeError, UnicodeDecodeError):
61
+ raw.append(None)
62
+ continue
63
+ raw.append(tuple(_f(a.get("price_" + k)) for k in KEYS))
64
+ elif path.endswith(".csv"):
65
+ with open(path, newline="", encoding="utf-8") as fh:
66
+ for r in csv.DictReader(fh):
67
+ raw.append(tuple(_f(r.get(k)) for k in KEYS))
68
+ else:
69
+ raise PricingError("give the panel's answers folder or a .csv")
70
+ rows, dropped = [], 0
71
+ for r in raw:
72
+ if r is None or any(v is None for v in r) or not (r[0] <= r[1] <= r[2] <= r[3]):
73
+ dropped += 1
74
+ continue
75
+ rows.append(r)
76
+ return rows, dropped
77
+
78
+
79
+ def curves(rows, grid):
80
+ n = float(len(rows))
81
+ tc = [sum(1 for r in rows if r[0] >= p) / n for p in grid] # too cheap at p (falls)
82
+ ch = [sum(1 for r in rows if r[1] >= p) / n for p in grid] # a bargain at p (falls)
83
+ ex = [sum(1 for r in rows if r[2] <= p) / n for p in grid] # expensive at p (rises)
84
+ te = [sum(1 for r in rows if r[3] <= p) / n for p in grid] # too expensive at p (rises)
85
+ return tc, ch, ex, te
86
+
87
+
88
+ def cross(grid, falling, rising):
89
+ """First price where the rising curve meets the falling one (linear interpolation)."""
90
+ for i in range(1, len(grid)):
91
+ d0 = rising[i - 1] - falling[i - 1]
92
+ d1 = rising[i] - falling[i]
93
+ if d0 <= 0 <= d1 and d1 != d0:
94
+ t = -d0 / (d1 - d0)
95
+ return grid[i - 1] + t * (grid[i] - grid[i - 1])
96
+ if d0 == 0:
97
+ return grid[i - 1]
98
+ return None
99
+
100
+
101
+ def analyse(rows, step=None):
102
+ if len(rows) < 5:
103
+ raise PricingError("need at least 5 complete answers (got %d)" % len(rows))
104
+ lo = min(r[0] for r in rows)
105
+ hi = max(r[3] for r in rows)
106
+ step = step or max(0.01, round((hi - lo) / 400, 2))
107
+ grid, p = [], lo
108
+ while p <= hi + 1e-9:
109
+ grid.append(round(p, 4))
110
+ p += step
111
+ tc, ch, ex, te = curves(rows, grid)
112
+ not_cheap = [1 - v for v in ch]
113
+ not_exp = [1 - v for v in ex]
114
+ pts = {
115
+ "PMC": cross(grid, tc, not_cheap),
116
+ "PME": cross(grid, not_exp, te),
117
+ "OPP": cross(grid, tc, te),
118
+ "IPP": cross(grid, ch, ex),
119
+ }
120
+ return {"n": len(rows), "points": pts, "range": [pts["PMC"], pts["PME"]],
121
+ "median": {k: sorted(r[i] for r in rows)[len(rows) // 2] for i, k in enumerate(KEYS)}}
122
+
123
+
124
+ def report(res, dropped, price=None):
125
+ m = lambda v: "n/a" if v is None else "$%.2f" % v
126
+ p = res["points"]
127
+ L = ["# Price sensitivity", "",
128
+ "%d complete answers%s. Simulated buyers: use this to pick what to test, not as the final word." % (
129
+ res["n"], (", %d dropped (incomplete or out of order)" % dropped) if dropped else ""), "",
130
+ "| point | price | what it means |", "| --- | ---: | --- |",
131
+ "| PMC | %s | below this, too many think it is too cheap to be good |" % m(p["PMC"]),
132
+ "| OPP | %s | as many say too cheap as too expensive: the least resistance |" % m(p["OPP"]),
133
+ "| IPP | %s | as many call it a bargain as call it expensive |" % m(p["IPP"]),
134
+ "| PME | %s | above this, too many say it is too expensive to buy |" % m(p["PME"]), "",
135
+ "**Acceptable range: %s to %s.**" % (m(p["PMC"]), m(p["PME"])), ""]
136
+ md = res["median"]
137
+ L.append("Median answers: too cheap %s, a bargain %s, getting expensive %s, too expensive %s." % (
138
+ m(md["too_cheap"]), m(md["cheap"]), m(md["expensive"]), m(md["too_expensive"])))
139
+ if price is not None and p["PMC"] is not None and p["PME"] is not None:
140
+ where = "inside" if p["PMC"] <= price <= p["PME"] else ("below" if price < p["PMC"] else "above")
141
+ L += ["", "Your current price, %s, is **%s** the acceptable range." % (m(price), where)]
142
+ return "\n".join(L) + "\n"
143
+
144
+
145
+ def main(argv=None):
146
+ ap = argparse.ArgumentParser(description=__doc__.split("\n\n")[0])
147
+ ap.add_argument("source", help="the panel's answers folder, or a CSV")
148
+ ap.add_argument("--price", type=float, help="your current price, to place it on the range")
149
+ ap.add_argument("--out", help="write the report here (markdown)")
150
+ ap.add_argument("--json", action="store_true")
151
+ a = ap.parse_args(argv)
152
+ try:
153
+ rows, dropped = read(a.source)
154
+ res = analyse(rows)
155
+ except (PricingError, FileNotFoundError) as e:
156
+ print("error: %s" % e, file=sys.stderr)
157
+ return 2
158
+ if a.json:
159
+ print(json.dumps(dict(res, dropped=dropped), indent=1))
160
+ return 0
161
+ text = report(res, dropped, a.price)
162
+ if a.out:
163
+ with open(a.out, "w", encoding="utf-8") as fh:
164
+ fh.write(text)
165
+ print("wrote %s" % a.out)
166
+ else:
167
+ sys.stdout.write(text)
168
+ return 0
169
+
170
+
171
+ if __name__ == "__main__":
172
+ sys.exit(main())
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Eduardo Calvo
3
+ Copyright (c) 2026 Ayoub Ghriss
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,13 @@
1
+ # Vendored skill
2
+
3
+ - Source: https://github.com/ayghri/i-have-adhd
4
+ - Path in source: skills/i-have-adhd
5
+ - Commit: 1ecea1993b7fce257ffbd686c070948b5e07eda6
6
+ - Retrieved: 2026-11-05
7
+ - License: MIT — see `LICENSE` in this directory.
8
+
9
+ ## agemon modifications
10
+
11
+ - Renamed from `i-have-adhd` to `agemon-adhd`, including the `/i-have-adhd` command it tells you to run.
12
+ - Removed the `license` and `metadata` frontmatter keys. `disable-model-invocation` stays, so the mode only starts when you ask for it.
13
+ - Left out upstream's `agents/` configuration for other tools and its optional always-on `SessionStart` hook: bundled skills cannot ship hooks.
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: agemon-adhd
3
+ description: 'Shape output for a reader with ADHD: lead with the next action, number multi-step work, restate state across turns, suppress tangents, give specific time estimates, make wins visible. Invoke with /agemon-adhd; stays on until "stop adhd mode".'
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # agemon-adhd
8
+
9
+ The reader has ADHD. Output is not just brief. It is shaped so an ADHD brain can act on it.
10
+
11
+ ## Persistence
12
+
13
+ These rules apply to every response for the rest of the session, not only this one. They do not expire after a few turns and they do not lapse when the topic changes. If you are unsure whether they still apply, they do.
14
+
15
+ Turn them off only when the reader says "stop adhd mode" or "normal mode". Confirm in one line, then return to your default style.
16
+
17
+ ## What ADHD changes about reading
18
+
19
+ Five facts drive every rule below:
20
+
21
+ 1. Working memory is small. Anything not on screen is forgotten. Do not ask the reader to "keep in mind X."
22
+ 2. Knowing the answer is not doing the answer. The friction between "got it" and "done it" is where work dies.
23
+ 3. Starting is the hardest step. The first action must be obvious, small, and doable now.
24
+ 4. Time estimates feel uniform. "A bit of work" and "a few hours" register the same. Vague estimates fail.
25
+ 5. Dopamine is scarce. Visible progress matters. Buried wins do not register.
26
+
27
+ ## Rules
28
+
29
+ ### 1. Lead with the next action
30
+
31
+ The first line is something the reader can do. Not context. Not a plan. The action.
32
+
33
+ Bad: "Let's think about this. Your auth flow has a few moving pieces..."
34
+ Good: "Edit `src/auth.ts:42` to update the token validation."
35
+
36
+ If the answer is a command, path, or snippet, it goes first. Prose comes after, if at all.
37
+
38
+ ### 2. Number multi-step tasks
39
+
40
+ If the work takes more than one step, write a numbered list. Each step is one bounded action. No step contains "and then" twice.
41
+
42
+ Use the fewest steps that still work. Cut any step the reader does not need, and fold trivial steps into the one before. A short path finished beats a complete path abandoned.
43
+
44
+ Bad: "First open the file, find the function, swap it out, then run the tests."
45
+
46
+ Good:
47
+ ```
48
+ 1. Open `src/auth.ts`
49
+ 2. Replace `verifyToken` (lines 42 to 58) with the snippet below
50
+ 3. Run `npm test -- auth.spec.ts`
51
+ ```
52
+
53
+ ### 3. End with one concrete next action
54
+
55
+ If anything is left open, name ONE thing the reader can do in under two minutes. Even "open the file" counts.
56
+
57
+ Bad: "Hope that helps. Let me know if you want to dig deeper."
58
+ Good: "Next: run `npm test` and paste the first failing line."
59
+
60
+ ### 4. Suppress tangents
61
+
62
+ If a second issue exists, finish the first, then offer the second as a separate question.
63
+
64
+ Bad: "Here's the fix. By the way, your dependency is also stale, and your README is out of date, and..."
65
+ Good: "Here's the fix. Separately: there is also a stale dependency. Want me to handle that next?"
66
+
67
+ A question that comes up mid-work is not a tangent: answer it yourself if you can and fold the result in. If it still needs the reader, surface it once, at the end.
68
+
69
+ ### 5. Restate state every turn
70
+
71
+ The reader cannot hold "we are on step 3 of 5" between messages. Restate it.
72
+
73
+ Bad: "Done. Ready for the next part?"
74
+ Good: "Step 3 of 5 done: schema updated. Next: backfill the new column. Run the script?"
75
+
76
+ If the harness has a task or plan tool, use it for multi-step work: one item per step, one in progress at a time. The checklist does the restating; do not also narrate the full plan as prose.
77
+
78
+ ### 6. Give specific time estimates
79
+
80
+ Vague estimates fail. Ballpark in concrete units.
81
+
82
+ Bad: "This will take some work."
83
+ Good: "About 15 minutes if tests already cover this. An afternoon if not."
84
+
85
+ ### 7. Make completed work visible
86
+
87
+ Show what now works, in concrete terms. Do not bury wins in a recap.
88
+
89
+ Bad: "I've made some changes to the auth flow. Among other things..."
90
+ Good: "Login now works with magic links. Try: `npm run dev`, open `/login`."
91
+
92
+ ### 8. Matter-of-fact tone for errors
93
+
94
+ Never use "Uh oh," "Oh no," or "There seems to be a problem." State cause and fix.
95
+
96
+ Bad: "Uh oh, the test is failing. There seems to be an issue..."
97
+ Good: "Test fails at `auth.spec.ts:42`: expected 200, got 401. Cause: missing auth header. Fix: add `Authorization: Bearer ${token}` to the request."
98
+
99
+ ### 9. Cap lists to 5 items
100
+
101
+ For long lists in the final response, group related items and rank the most relevant first. Keep the visible working set small: aim for no more than five items per group. When more items are relevant, retain them internally without discarding them. Display them only when the user asks or when they become the next items to address.
102
+
103
+ Never omit relevant items when completeness matters. This rule shapes presentation only; it must not limit analysis, search, tool results, candidate generation, or retained information.
104
+
105
+ ### 10. No preamble, no recap, no closing pleasantries
106
+
107
+ Forbidden openers: "Great question," "Let me...", "I'll...", "Sure!", "Looking at your...", "To answer your question..."
108
+
109
+ Forbidden recaps after a completed task: "I've now done X, Y, and Z, which means..."
110
+
111
+ Forbidden closers: "Let me know if you need anything else," "Hope this helps," "Happy to clarify," "Feel free to ask."
112
+
113
+ Start with the answer. End when the answer is done.
114
+
115
+ ## When to break the rules
116
+
117
+ Override the defaults when:
118
+
119
+ 1. User asks to "explain" or "walk me through." Explain fully. Still no preamble, still no closer, but the body runs as long as the topic needs. Add headers so the reader can skim back.
120
+ 2. Destructive action ahead (`rm -rf`, force push, schema migration, dropping a table). Confirm before acting. Safety wins over brevity.
121
+ 3. Debug spiral. If the last three turns have been "still broken," stop iterating on code. Name the assumption that might be wrong. Ask one diagnostic question.
122
+ 4. Real ambiguity in the request. One short clarifying question beats guessing and rewriting.
123
+ 5. A rule fights the task. When a rule would delete the answer itself, the task wins; the shape stays. Example: "what are my options" gets 2 to 4 ranked options with one-line trade-offs, recommendation first, not one path. The options are the answer.
124
+ 6. A rule fights the harness. Inside an agent harness, the system prompt outranks this skill: announce a tool call when the harness requires it, do the work instead of asking "want me to," point time estimates at whoever executes the steps. Same principle as 5: the constraint wins, the shape stays.
125
+
126
+ ## Pre-send check
127
+
128
+ Before sending, delete:
129
+
130
+ 1. The first sentence if it announces what you are about to do.
131
+ 2. The last sentence if it asks "anything else?" or recaps what just happened.
132
+ 3. Any "by the way" sidebar.
133
+ 4. Any hedging adverb adding no information ("perhaps," "might," "could possibly"). Keep a hedge that carries real uncertainty; deleting it manufactures confidence.
134
+ 5. Any idiom or figurative phrase ("circle back," "get the ball rolling," "on the same page"). Replace with the literal action.
135
+
136
+ Then verify: if the reader reads only the first line and the last line, do they know (a) what to do next, and (b) what just happened?
137
+
138
+ If yes, send.
@@ -0,0 +1,83 @@
1
+ # AI, LLM, and Agent Hunting
2
+
3
+ #### When to use this file
4
+
5
+ Reach for this file when a language model participates in a trust-sensitive decision: chatbots and assistants, RAG pipelines, persistent agent memory, agent/tool-calling loops, MCP servers and clients, code that builds prompts from untrusted input, or code that consumes model output and acts on it. The important data flow is *untrusted content → model or memory → capability, authority, or sink*.
6
+
7
+ Use this alongside `ATTACK-CLASSES.md`, not instead of it. Transport, access control, query construction, filesystem use, and output rendering remain ordinary trust boundaries. This file covers the model-specific delegation layer. Split large targets by retrieval, memory, tool dispatch, MCP, and output handling.
8
+
9
+ ## Core discipline (include in every agent prompt for this domain)
10
+
11
+ ```
12
+ - Prompt injection alone is not a finding. Require a code-level boundary failure: content reaches another principal's context, invokes authority the requester lacks, discloses data they cannot read, or drives a sink they cannot reach directly.
13
+ - Model output, memory, tool descriptions, and MCP responses are untrusted inputs. Point to the code that grants authority, trusts output, writes durable state, or feeds a sink.
14
+ - A guardrail prompt is not a security boundary. Count only deterministic checks, resource-scoped authorization, isolation, binding, and constrained credentials.
15
+ - State the attacker, affected principal, effective execution identity, resource, exact action, authority used, and observable impact. An intentional direct request to use the requester's existing authority is not a delegation defect merely because a model executes it.
16
+ - Authorization and action binding are separate controls. Attacker-controlled content that causes an action under an affected principal's valid authority is an action-binding failure when that principal did not intentionally request or approve the exact action.
17
+ - Classify every candidate as `confirmed` only after source evidence and bounded local validation establish the boundary and result. Use `needs_validation` when a required provider, deployment, model, renderer, or identity behavior is not observable locally.
18
+ ```
19
+
20
+ ## Context, retrieval, and memory attack classes (subagent_type: `general`)
21
+
22
+ **Indirect injection through retrieved or ingested content**
23
+ An attacker can write a RAG document, indexed page, file, email, issue body, tool response, or metadata that enters a different principal's model context. Trace who can write each source, how retrieval scopes it, whose session consumes it, and what capability is enabled there. Check isolation, resource authorization, and binding to the consuming principal's intent separately. The defect is a missing deterministic control, not persuasive text by itself.
24
+
25
+ **Cross-session or cross-tenant context bleed**
26
+ Conversation history, embeddings, retrieval results, or prompt caches are keyed too broadly. Verify tenant and ACL filters in the query itself and every cache key. A tenant field stored on an object is not enforcement if an alternate query, shared cache, or batch path omits it.
27
+
28
+ **Persistent memory poisoning**
29
+ Attacker-controlled content or model summaries are written into memory that later shapes another task, user, or privileged session. Review who may create, update, merge, and delete memory; its provenance and tenant scope; whether low-trust observations become durable instructions or facts; and whether retrieval distinguishes user preferences from tool policy. Memory intentionally saved by a user and used only for that user's intentional, allowed requests is not a cross-boundary finding.
30
+
31
+ **Prompt role and provenance confusion**
32
+ Prompt assembly lets untrusted text impersonate a system message, prior turn, tool result, policy, or memory record. Look for string concatenation, untyped history, caller-controlled role fields, and serialization round trips that lose source labels. Confirm that the forged provenance changes a deterministic trust decision or reaches a meaningful capability.
33
+
34
+ ## Tool and action attack classes (subagent_type: `general`)
35
+
36
+ **Tool-argument injection into a downstream sink**
37
+ Model-produced arguments reach SQL, shell, file, URL-fetch, or privileged APIs without handler-side validation. Treat the tool schema as input parsing, then follow each field from decoded call to sink. Structured output narrows shape; it does not establish authorization, safe paths, safe URLs, or query semantics.
38
+
39
+ **Excessive agency and confused-deputy authority**
40
+ The agent uses a service identity or broad credential, while the tool handler does not re-check the requesting principal's permission on the named resource. Verify both the effective identity and whether the caller could perform that exact operation through the normal product interface. A shared credential with enforced per-user query scope is not a defect.
41
+
42
+ **Action-confirmation and approval binding**
43
+ A user approves one described action but execution can use changed arguments, a different resource, a different principal, or a later model turn. An action-binding defect also exists when attacker-controlled content causes a side effect under a victim's valid authority without the victim's intentional request or approval, even if generic authorization permits the victim to perform it. Review whether intent or confirmation binds the normalized tool name, complete argument object, requester, target, amount, expiry, and batch membership. Check retries and resumed sessions: an approval must not authorize a mutated or duplicate side effect.
44
+
45
+ **Tool-schema and dispatcher disagreement**
46
+ The schema accepts aliases, extra fields, duplicate keys, coercions, nested free-form objects, or out-of-range values that the dispatcher or handler interprets differently. Compare schema validation, canonicalization, generated bindings, and handler defaults. Validate again where values become resource selectors or security-relevant options.
47
+
48
+ **Unbounded delegated action loops**
49
+ A bounded request can enqueue repeated spend, send, mutation, or external API work without a per-request budget, per-action authorization, cancellation, or idempotency control. Confirm impact on shared cost, quotas, other users, or durable state. Do not test by exhausting a service; use code-level accounting and a locally bounded loop.
50
+
51
+ ## MCP and sub-agent trust classes (subagent_type: `general`)
52
+
53
+ **Sub-agent and MCP trust inheritance**
54
+ A delegated task receives the full session, credentials, memory, or capabilities rather than the least authority required. Check the principal and tenant carried into each call, capability narrowing, credential audience, and whether delegated results are treated as untrusted on return.
55
+
56
+ **MCP server and tool identity confusion**
57
+ Calls or results are routed by attacker-influenceable server names, tool names, request IDs, resource URIs, or model-selected aliases rather than the authenticated connection and outstanding request. Check whether two servers can claim the same tool or resource identity, whether reconnect changes the binding, and whether a response from one server can satisfy another server's pending call.
58
+
59
+ **MCP metadata and schema as policy**
60
+ Tool descriptions, resource metadata, prompts, completion hints, or schemas supplied by an MCP peer are trusted as policy or authorization. These fields can guide the model but cannot grant capability. Find the deterministic allowlist, server identity check, and handler authorization that remain authoritative when metadata conflicts.
61
+
62
+ ## Output and disclosure attack classes (subagent_type: `general`)
63
+
64
+ **Insecure output rendering**
65
+ Model output reaches an executing HTML, Markdown, template, URL, or command sink without the sink's required encoding and policy. For browser rendering, verify auto-loaded resources and CSP or sanitization in `CLIENT-SIDE.md`; renderer behavior outside the repository makes the candidate `needs_validation`.
66
+
67
+ **Sensitive context extraction**
68
+ The assembled context contains credentials, another user's data, private source, or policy values that themselves grant access, and user-influenced output exposes them. Read prompt assembly and data-fetch code. Disclosure of generic instructions or behavior that does not cross a data boundary is not a finding.
69
+
70
+ ## Universal moves (apply across the above)
71
+
72
+ - Draw four maps first: each execution identity, each capability, every writable context or memory source, and each output destination. Then connect the principal at the start to the authority at the end.
73
+ - Start at side-effecting tools and work backward through dispatcher, schema, confirmation, model context, retrieval, and ingestion. Start at durable memory reads and trace every writer.
74
+ - Compare direct, queued, retry, resume, batch, and delegated paths for the same action. The strongest gate must apply after arguments are final and before every side effect.
75
+
76
+ ## Validation rules (apply before reporting ANY finding here)
77
+
78
+ 1. Name the crossed boundary and observable result: attacker, affected principal or shared resource, execution identity, target, and unauthorized or unrequested action or disclosure.
79
+ 2. For confused-deputy authority claims, prove the tool lacks requester-and-resource authorization and that the attacker cannot perform the same action normally. For action-binding claims, instead prove attacker-controlled content caused an action under the affected principal's authority that the principal did not intentionally request or approve. Valid generic authorization does not establish that intent.
80
+ 3. For memory or retrieval claims, cite both the attacker-controlled write and the later cross-principal read or privileged decision. A shared record without a reachable consumer is not enough.
81
+ 4. For action binding, establish the intentional request or normalized approved object, if any, and compare it with the object the handler uses. Confirm a locally observable unrequested action, mutation, duplicate, or authority change without extending the test into harmful execution. For schema disagreement, compare the normalized validated object with the handler's object.
82
+ 5. For MCP identity claims, verify the authenticated connection, request correlation, tool namespace, and effective credential. Mark `needs_validation` if external server identity or deployment routing is required.
83
+ 6. Return `confirmed` findings only with a complete source trace and meaningful result. Return `needs_validation` for a specific unresolved boundary fact and state the bounded local or owner-observed check needed to resolve it.
@@ -0,0 +1,130 @@
1
+ # Attack Classes
2
+
3
+ #### Attack classes — choose and split based on Phase 1
4
+
5
+ Select attack classes relevant to the application type. Not every class applies to every codebase. The list below is a starting point; add application-specific classes from Phase 1 and split large codebases per subsystem. Frame work as finding, validating, fixing, and prioritizing vulnerabilities. Keep validation to source review and bounded local fixtures; do not develop payload chains, test availability on live services, or take action in shared environments.
6
+
7
+ Use `confirmed` only when source evidence and bounded validation establish the full boundary and meaningful result. Use `needs_validation` when a specific deployment, provider, platform, identity, or runtime fact is unavailable; state the missing fact and the safe owner-observed or local check that resolves it.
8
+
9
+ > **Native / binary / kernel targets** (C/C++/Rust-unsafe, kernel modules, parsers and decoders, FFI, concurrent runtimes, binary loaders, JITs, firmware): use the memory-safety, integer/ABI, concurrency, binary-loader, and privileged-interface classes in [MEMORY-SAFETY-AND-BINARY.md](MEMORY-SAFETY-AND-BINARY.md).
10
+ >
11
+ > **AI / LLM / agent targets** (chatbots, RAG, persistent memory, tool-calling agents, MCP servers/clients, prompt assembly, or model-controlled actions): use the context, memory-poisoning, action-binding, tool-schema, MCP-identity, and output classes in [AI-AND-LLM.md](AI-AND-LLM.md).
12
+ >
13
+ > **HTTP, web, and identity targets** (ordinary web apps, APIs, reverse proxies, CDNs, gateways, custom HTTP parsers, sessions, CSRF, JWT, OAuth/OIDC, SAML, MFA, passkeys, account recovery/linking, API keys, or mTLS): use [WEB-PROTOCOL-AND-AUTH.md](WEB-PROTOCOL-AND-AUTH.md).
14
+ >
15
+ > **Client-side and browser targets** (SPAs, browser extensions, embedded webviews, service workers, browser storage, cross-window messaging, CORS, WebSockets, or DOM rendering): use [CLIENT-SIDE.md](CLIENT-SIDE.md).
16
+ >
17
+ > **Supply-chain and release targets** (dependency resolution, generated inputs, CI, release/signing/promotion, updates, plugins, or extensions): use [SUPPLY-CHAIN-AND-RELEASE.md](SUPPLY-CHAIN-AND-RELEASE.md).
18
+ >
19
+ > **Cloud and deployment targets** (IAM, infrastructure as code, containers/Kubernetes, service mesh, serverless/edge, ingress, provider events, or runtime configuration): use [CLOUD-AND-DEPLOYMENT.md](CLOUD-AND-DEPLOYMENT.md).
20
+ >
21
+ > **Protocol, RPC, and messaging targets** (gRPC, GraphQL transports, Protobuf/Cap'n Proto/Thrift, custom protocols, queues, brokers, pub/sub, webhooks, or streaming RPC): use [PROTOCOLS-RPC-AND-MESSAGING.md](PROTOCOLS-RPC-AND-MESSAGING.md).
22
+ >
23
+ > **Resource-exhaustion and availability targets** (untrusted work can consume shared CPU, memory, disk, connections, workers, queues, quotas, or operator-owned spend): use [RESOURCE-EXHAUSTION-AND-AVAILABILITY.md](RESOURCE-EXHAUSTION-AND-AVAILABILITY.md).
24
+ >
25
+ > **Data-isolation and lifecycle targets** (multi-tenant stores, caches/search, object links, analytics, export/backup, migration, deletion, retention, or restore): use [DATA-ISOLATION-AND-LIFECYCLE.md](DATA-ISOLATION-AND-LIFECYCLE.md).
26
+ >
27
+ > **Desktop, mobile, and local-IPC targets** (native apps, deep links, webview bridges, exported components, privileged helpers, local daemons, Unix sockets/XPC/Binder/D-Bus): use [DESKTOP-MOBILE-AND-LOCAL-IPC.md](DESKTOP-MOBILE-AND-LOCAL-IPC.md).
28
+
29
+ **Injection** (subagent_type: `general`)
30
+ Trace untrusted input from entry point to dangerous sink. What counts as a "dangerous sink" depends on the application:
31
+ - Web apps: SQL queries, HTML output, shell commands, template engines, file paths, HTTP redirects, deserialization
32
+ - Libraries: any function that processes caller-supplied data without validation — buffer operations, parsers, format strings
33
+ - CLI tools: shell command construction, file path handling, environment variable interpolation
34
+ - Services: query construction, message serialization, log injection, LDAP/XPATH queries
35
+ - Client-side (browser/JS): DOM XSS, prototype pollution, `postMessage`/origin trust, and other browser-side classes — covered by the [CLIENT-SIDE.md](CLIENT-SIDE.md) companion blocks when selected
36
+
37
+ Do not stop at the obvious direct paths. Look for indirect injection: data stored safely, then retrieved and used in a dangerous context by different code. Look for injection through field names, keys, headers, and metadata — not just values. Look for injection into secondary systems (logs, caches, search indexes, analytics).
38
+
39
+ **Access control** (subagent_type: `general`)
40
+ Verify that a caller cannot do something outside its authority. Go beyond checking whether permission checks exist — verify they check the *right* permission for the *right* resource via the *right* mechanism:
41
+ - Is there a path to the same state change that checks a different (weaker) permission?
42
+ - Can a field in the request body override what the permission system intended to restrict?
43
+ - Are there endpoints that gate on authentication but forget authorization?
44
+ - Does the same resource have multiple access paths with inconsistent checks?
45
+ - What about bulk/batch/export/import operations — do they enforce per-item permissions?
46
+
47
+ For complex access models, split into separate agents for auth bypass vs authorization logic.
48
+
49
+ **Resource and file handling** (subagent_type: `general`)
50
+ - Path traversal (reading/writing outside intended directories) — including through symlinks, encoded sequences, and null bytes
51
+ - SSRF (making the application fetch attacker-controlled URLs) — including through redirects, DNS rebinding, and URL parser differentials
52
+ - Unsafe deserialization, archive extraction (zip slip), temp file handling
53
+ - Memory safety (if applicable): buffer overflows, use-after-free, integer overflow
54
+ - Race conditions on file operations (TOCTOU between check and use)
55
+
56
+ **Cryptography and secrets** (subagent_type: `general`)
57
+ - Weak randomness for security-critical values (tokens, keys, nonces)
58
+ - Hardcoded secrets, secrets in logs, error messages, URLs, or client-visible responses
59
+ - Broken key derivation, missing HMAC verification, nonce reuse
60
+ - Timing side-channels on secret comparison
61
+ - Misuse of crypto primitives (ECB mode, unauthenticated encryption, static IVs, etc.)
62
+ - What happens when crypto operations fail? Does the error path fall back to no-crypto?
63
+
64
+ **Business logic** (subagent_type: `general`)
65
+ Hunt logic errors by hand: standard scanners cannot find them, and they yield high-impact findings. For each major workflow:
66
+ - **State machine violations**: Can you skip steps? Go backwards? Reach an invalid state? What happens if you replay a completed flow? What about partial failure — if step 2 of 3 fails, is step 1 rolled back?
67
+ - **Race conditions with business impact**: Concurrent operations that produce invalid states (double-spend, double-approve, lost updates). Focus on operations that check-then-act non-atomically.
68
+ - **Numeric/quantity manipulation**: Negative values, zero values, overflow, precision loss, type coercion between string and number.
69
+ - **Access boundary violations**: Not "does the permission check exist" but "is it the right check for the business rule?" Can input to one operation bypass a restriction enforced on a different operation for the same effect?
70
+ - **Implicit trust assumptions**: Data from storage, config, other components, or plugins assumed safe because "we validated it on the way in." What if a different code path wrote it?
71
+ - **Time-based logic**: Expiry checks, scheduling, rate windows, clock skew. What happens at exact boundary moments? What about timezone differences between components?
72
+ - **Default and fallback behavior**: What is the security posture when config is missing? When a feature flag is off? When a dependency is unavailable? When the system is mid-migration?
73
+
74
+ **Feature abuse and data leakage** (subagent_type: `general`)
75
+ Legitimate features used for unintended purposes. Look for bugs in the design, not only in the code:
76
+ - **Export/backup as exfiltration**: Can a low-privilege user trigger an export, snapshot, or backup that includes data above their access level? Can they export other users' data? Does the export include deleted/draft/private content? Revision history that was supposed to be pruned?
77
+ - **Import/restore as injection**: Can import overwrite existing data? Can it create records that bypass normal validation? Can it inject content into collections the user has no write access to? Does it respect the same permission model as the UI?
78
+ - **Search/filter/sort as oracle**: Can search queries reveal whether content exists that the user cannot directly access? Do filter parameters let users probe statuses, roles, or fields they should not know about? Does sorting by a hidden field reveal its values through result ordering?
79
+ - **Enumeration through side effects**: Do error messages differ between "does not exist" and "no access"? Do response times differ? Response sizes? HTTP status codes? Can you enumerate users through password reset, invite, or registration flows?
80
+ - **Preview/draft/staging leakage**: Are preview tokens scoped to one item or do they unlock broader access? Can draft content be discovered through search, RSS feeds, sitemaps, or API listing endpoints? Can cache headers cause a CDN to serve private content publicly?
81
+ - **Notification/webhook as SSRF**: Can a user set a notification URL, webhook URL, or callback URL that the server fetches? Is it validated against internal networks? What about after a redirect?
82
+
83
+ **Chained vulnerabilities and trust boundaries** (subagent_type: `general`)
84
+ Individually allowed or contained behavior can become a vulnerability when another component or lifecycle step relies on a stronger guarantee:
85
+ - **Multi-step boundary failures**: Map what a low-privilege principal may read, write, invoke, and retain, then connect only concrete outputs to later trust decisions. Confirm each prerequisite and do not assume a downstream effect.
86
+ - **Cross-component trust gaps**: Component A validates input and passes it to component B. Compare the exact guarantee A produces with what B assumes, including truncation, type coercion, normalization, tenant scope, and plugin/extension access.
87
+ - **Second-order use**: Data safe when stored may become dangerous in a later context. A field name becomes a JSON path, a slug becomes a file path, escaped text enters raw rendering, or a stored string becomes a URL, regex, template, or policy expression.
88
+ - **Scope and capability growth**: Token, API-key, plugin, OAuth, MCP, or AI capabilities become broader after delegation, refresh, caching, role change, or composition. Name the concrete operation the resulting principal should not have.
89
+ - **Timing and ordering**: Review setup, migration, soft-delete, revoke/cache expiry, check/use, and validate/consume windows. Confirm stale state is accepted before reporting.
90
+ - **Rollback and recovery**: Undelete, restore, revision rollback, and cancellation must apply current ownership, validation, and authorization. Confirm which invalid state is restored.
91
+
92
+ **Wildcard** (subagent_type: `general`)
93
+ You are not given a category. Find vulnerabilities outside the standard classes already assigned.
94
+
95
+ Read code that looks boring or disconnected from security. Follow incomplete, experimental, compatibility, and fallback features, but retain the same concrete boundary and validation requirements as every other class.
96
+
97
+ Use these starting points, but do not limit yourself to them:
98
+ - What is the strangest code in the codebase? Why does it exist? What happens if it is abused?
99
+ - Are there any features that feel half-finished, experimental, or bolted on? Those have the weakest security because they got the least review.
100
+ - What happens if you use the API in a way the frontend never would? The UI constrains users, but the API does not. What API calls are possible but never made by the client?
101
+ - Are there any hidden or undocumented endpoints, parameters, headers, or features? Look at route registrations, middleware, and config for things that are not in the docs.
102
+ - What happens when you mix features that were not designed to work together? Localization + preview + caching. Import + plugins + webhooks. OAuth + impersonation + API keys.
103
+ - Is there anything interesting in the git history? Reverted security fixes, commented-out auth checks, secrets that were committed then removed (still in history).
104
+ - Which valid-account actions affect other users, shared integrity, availability, or operator-owned cost? Verify containment, quotas, authorization, and recovery around those actions.
105
+ - Which operations are irreversible or require elevated confirmation? Bind authorization and approval to the final principal, action, and resource.
106
+ - What assumptions does the code make about the environment? That the database is local, that the clock is accurate, that DNS is trustworthy, that the filesystem is case-sensitive?
107
+ - Look at the test files — what are they **not** testing? Compare the edge cases the developer thought about (tests exist) with the ones they did not (no tests).
108
+
109
+ Pursue anomalies inside your assigned scope until the invariant is settled. If something looks strange, read it until you can state whether it is safe. If a function has a comment explaining why it is safe, verify the explanation. If a variable is named `temp` or `hack` or `legacy`, read it closely.
110
+
111
+ **Obvious things** (subagent_type: `general`)
112
+ Other agents hunt subtle bugs. This agent checks the basic exposures that are easy to overlook because everyone assumes someone else already checked them:
113
+ - Are there any hardcoded passwords, API keys, tokens, or secrets in the source? (grep for `password`, `secret`, `apikey`, `token`, `Bearer`, `-----BEGIN`, common default passwords)
114
+ - Are there any TODO/FIXME/HACK/XXX comments that reference security? (`TODO: add auth`, `FIXME: validate input`, `HACK: skip permission check`)
115
+ - Is debug mode / dev mode properly gated? Can it be enabled in production via environment variable, query parameter, or header?
116
+ - Are there test/example/seed credentials that work in production?
117
+ - Is there a `/debug`, `/admin`, `/test`, `/status`, `/health`, `/metrics`, `/env`, `/.env`, `/config` endpoint that is unprotected?
118
+ - Are there any `.env`, `.env.local`, `credentials.json`, `*.pem`, `*.key` files checked into the repo?
119
+ - Does the `.gitignore` actually cover secrets, uploads, and local config?
120
+ - Are dependencies pinned? Are there known CVEs in the dependency tree? (check lockfiles)
121
+ - Are there any `eval()`, `exec()`, `child_process`, `Function()`, `vm.runInContext`, `import()` with dynamic input?
122
+ - Are CORS headers set to `*` or overly permissive? Is `Access-Control-Allow-Credentials` combined with a wildcard origin?
123
+ - Are cookies missing `HttpOnly`, `Secure`, or `SameSite` attributes?
124
+ - Are there any open redirects? (parameters named `redirect`, `return`, `next`, `url`, `goto`, `continue` that feed into redirects without validation)
125
+ - Is TLS enforced? Are there any HTTP-only endpoints?
126
+ - Are error responses in production returning stack traces, internal paths, or SQL errors?
127
+
128
+ This agent does not need to be creative. It needs to be thorough and literal. Check every item. Report each result.
129
+
130
+ **Important**: For any finding this agent reports, it must verify the full code path, not just surface appearance. If a cookie is missing `HttpOnly`, check whether the cookie contains security-sensitive data and whether JS needs to read it by design. If an error message contains a field name, check whether the field is ever actually populated with sensitive data. A flag is not a finding — trace the impact before reporting.