@sentry/warden 0.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 (199) hide show
  1. package/.agents/skills/find-bugs/SKILL.md +75 -0
  2. package/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
  3. package/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
  4. package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  5. package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  6. package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  7. package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  8. package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  9. package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  10. package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  11. package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  12. package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  13. package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  14. package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  15. package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  16. package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  17. package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  18. package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  19. package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  20. package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  21. package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  22. package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  23. package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  24. package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  25. package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  26. package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  27. package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  28. package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  29. package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  30. package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  31. package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  32. package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  33. package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  34. package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  35. package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  36. package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  37. package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  38. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  39. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  40. package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  41. package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  42. package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  43. package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  44. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  45. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  46. package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  47. package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  48. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  49. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  50. package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  51. package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  52. package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  53. package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  54. package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  55. package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  56. package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  57. package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  58. package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  59. package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  60. package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  61. package/.claude/settings.json +57 -0
  62. package/.claude/settings.local.json +88 -0
  63. package/.claude/skills/agent-prompt/SKILL.md +54 -0
  64. package/.claude/skills/agent-prompt/references/agentic-patterns.md +94 -0
  65. package/.claude/skills/agent-prompt/references/anti-patterns.md +140 -0
  66. package/.claude/skills/agent-prompt/references/context-design.md +124 -0
  67. package/.claude/skills/agent-prompt/references/core-principles.md +75 -0
  68. package/.claude/skills/agent-prompt/references/model-guidance.md +118 -0
  69. package/.claude/skills/agent-prompt/references/output-formats.md +98 -0
  70. package/.claude/skills/agent-prompt/references/skill-structure.md +115 -0
  71. package/.claude/skills/agent-prompt/references/system-prompts.md +115 -0
  72. package/.claude/skills/notseer/SKILL.md +131 -0
  73. package/.claude/skills/skill-writer/SKILL.md +140 -0
  74. package/.claude/skills/testing-guidelines/SKILL.md +132 -0
  75. package/.claude/skills/warden-skill/SKILL.md +250 -0
  76. package/.claude/skills/warden-skill/references/config-schema.md +133 -0
  77. package/.dex/config.toml +2 -0
  78. package/.github/workflows/ci.yml +33 -0
  79. package/.github/workflows/release.yml +54 -0
  80. package/.github/workflows/warden.yml +40 -0
  81. package/AGENTS.md +89 -0
  82. package/CONTRIBUTING.md +60 -0
  83. package/LICENSE +105 -0
  84. package/README.md +43 -0
  85. package/SPEC.md +263 -0
  86. package/action.yml +87 -0
  87. package/assets/favicon.png +0 -0
  88. package/assets/warden-icon-bw.svg +5 -0
  89. package/assets/warden-icon-purple.png +0 -0
  90. package/assets/warden-icon-purple.svg +5 -0
  91. package/docs/.claude/settings.local.json +11 -0
  92. package/docs/astro.config.mjs +43 -0
  93. package/docs/package.json +19 -0
  94. package/docs/pnpm-lock.yaml +4000 -0
  95. package/docs/public/favicon.svg +5 -0
  96. package/docs/src/components/Code.astro +141 -0
  97. package/docs/src/components/PackageManagerTabs.astro +183 -0
  98. package/docs/src/components/Terminal.astro +212 -0
  99. package/docs/src/layouts/Base.astro +380 -0
  100. package/docs/src/pages/cli.astro +167 -0
  101. package/docs/src/pages/config.astro +394 -0
  102. package/docs/src/pages/guide.astro +449 -0
  103. package/docs/src/pages/index.astro +490 -0
  104. package/docs/src/styles/global.css +551 -0
  105. package/docs/tsconfig.json +3 -0
  106. package/docs/vercel.json +5 -0
  107. package/eslint.config.js +33 -0
  108. package/package.json +73 -0
  109. package/src/action/index.ts +1 -0
  110. package/src/action/main.ts +868 -0
  111. package/src/cli/args.test.ts +477 -0
  112. package/src/cli/args.ts +415 -0
  113. package/src/cli/commands/add.ts +447 -0
  114. package/src/cli/commands/init.test.ts +136 -0
  115. package/src/cli/commands/init.ts +132 -0
  116. package/src/cli/commands/setup-app/browser.ts +38 -0
  117. package/src/cli/commands/setup-app/credentials.ts +45 -0
  118. package/src/cli/commands/setup-app/manifest.ts +48 -0
  119. package/src/cli/commands/setup-app/server.ts +172 -0
  120. package/src/cli/commands/setup-app.ts +156 -0
  121. package/src/cli/commands/sync.ts +114 -0
  122. package/src/cli/context.ts +131 -0
  123. package/src/cli/files.test.ts +155 -0
  124. package/src/cli/files.ts +89 -0
  125. package/src/cli/fix.test.ts +310 -0
  126. package/src/cli/fix.ts +387 -0
  127. package/src/cli/git.test.ts +119 -0
  128. package/src/cli/git.ts +318 -0
  129. package/src/cli/index.ts +14 -0
  130. package/src/cli/main.ts +672 -0
  131. package/src/cli/output/box.ts +235 -0
  132. package/src/cli/output/formatters.test.ts +187 -0
  133. package/src/cli/output/formatters.ts +269 -0
  134. package/src/cli/output/icons.ts +13 -0
  135. package/src/cli/output/index.ts +44 -0
  136. package/src/cli/output/ink-runner.tsx +337 -0
  137. package/src/cli/output/jsonl.test.ts +347 -0
  138. package/src/cli/output/jsonl.ts +126 -0
  139. package/src/cli/output/reporter.ts +435 -0
  140. package/src/cli/output/tasks.ts +374 -0
  141. package/src/cli/output/tty.test.ts +117 -0
  142. package/src/cli/output/tty.ts +60 -0
  143. package/src/cli/output/verbosity.test.ts +40 -0
  144. package/src/cli/output/verbosity.ts +31 -0
  145. package/src/cli/terminal.test.ts +148 -0
  146. package/src/cli/terminal.ts +301 -0
  147. package/src/config/index.ts +3 -0
  148. package/src/config/loader.test.ts +313 -0
  149. package/src/config/loader.ts +103 -0
  150. package/src/config/schema.ts +168 -0
  151. package/src/config/writer.test.ts +119 -0
  152. package/src/config/writer.ts +84 -0
  153. package/src/diff/classify.test.ts +162 -0
  154. package/src/diff/classify.ts +92 -0
  155. package/src/diff/coalesce.test.ts +208 -0
  156. package/src/diff/coalesce.ts +133 -0
  157. package/src/diff/context.test.ts +226 -0
  158. package/src/diff/context.ts +201 -0
  159. package/src/diff/index.ts +4 -0
  160. package/src/diff/parser.test.ts +212 -0
  161. package/src/diff/parser.ts +149 -0
  162. package/src/event/context.ts +132 -0
  163. package/src/event/index.ts +2 -0
  164. package/src/event/schedule-context.ts +101 -0
  165. package/src/examples/examples.integration.test.ts +66 -0
  166. package/src/examples/index.test.ts +101 -0
  167. package/src/examples/index.ts +122 -0
  168. package/src/examples/setup.ts +25 -0
  169. package/src/index.ts +115 -0
  170. package/src/output/dedup.test.ts +419 -0
  171. package/src/output/dedup.ts +607 -0
  172. package/src/output/github-checks.test.ts +300 -0
  173. package/src/output/github-checks.ts +476 -0
  174. package/src/output/github-issues.ts +329 -0
  175. package/src/output/index.ts +5 -0
  176. package/src/output/issue-renderer.ts +197 -0
  177. package/src/output/renderer.test.ts +727 -0
  178. package/src/output/renderer.ts +217 -0
  179. package/src/output/stale.test.ts +375 -0
  180. package/src/output/stale.ts +155 -0
  181. package/src/output/types.ts +34 -0
  182. package/src/sdk/index.ts +1 -0
  183. package/src/sdk/runner.test.ts +806 -0
  184. package/src/sdk/runner.ts +1232 -0
  185. package/src/skills/index.ts +36 -0
  186. package/src/skills/loader.test.ts +300 -0
  187. package/src/skills/loader.ts +423 -0
  188. package/src/skills/remote.test.ts +704 -0
  189. package/src/skills/remote.ts +604 -0
  190. package/src/triggers/matcher.test.ts +277 -0
  191. package/src/triggers/matcher.ts +152 -0
  192. package/src/types/index.ts +194 -0
  193. package/src/utils/async.ts +18 -0
  194. package/src/utils/index.test.ts +84 -0
  195. package/src/utils/index.ts +50 -0
  196. package/tsconfig.json +25 -0
  197. package/vitest.config.ts +8 -0
  198. package/vitest.integration.config.ts +11 -0
  199. package/warden.toml +19 -0
@@ -0,0 +1,394 @@
1
+ ---
2
+ import Base from '../layouts/Base.astro';
3
+ import Terminal from '../components/Terminal.astro';
4
+ import { Code } from 'astro:components';
5
+ ---
6
+
7
+ <Base title="Config" description="Warden configuration reference">
8
+ <h1>Config</h1>
9
+
10
+ <p>Warden is configured via <code>warden.toml</code> in your repository root.</p>
11
+
12
+ <Terminal showCopy={true}>
13
+ <Code
14
+ code={`version = 1
15
+
16
+ [[triggers]]
17
+ name = "Security Review"
18
+ event = "pull_request"
19
+ actions = ["opened", "synchronize"]
20
+ skill = "security-review"`}
21
+ lang="toml"
22
+ theme="vitesse-black"
23
+ />
24
+ </Terminal>
25
+
26
+ <h2>Triggers</h2>
27
+
28
+ <p>Triggers map GitHub events to skills.</p>
29
+
30
+ <dl>
31
+ <dt>name</dt>
32
+ <dd>Display name</dd>
33
+ <dt>event</dt>
34
+ <dd><code>pull_request</code>, <code>issues</code>, <code>issue_comment</code>, <code>schedule</code></dd>
35
+ <dt>actions</dt>
36
+ <dd>Event actions (required except for <code>schedule</code>)</dd>
37
+ <dt>skill</dt>
38
+ <dd>Skill name or path to run (see <a href="#skill-references">Skill References</a>)</dd>
39
+ <dt>remote</dt>
40
+ <dd>GitHub repository for remote skills: <code>owner/repo</code> or <code>owner/repo@sha</code></dd>
41
+ <dt>model</dt>
42
+ <dd>Model override (optional)</dd>
43
+ <dt>maxTurns</dt>
44
+ <dd>Max agentic turns per hunk (optional)</dd>
45
+ </dl>
46
+
47
+ <h3>Pull Request Actions</h3>
48
+
49
+ <dl>
50
+ <dt>opened</dt>
51
+ <dd>PR created</dd>
52
+ <dt>synchronize</dt>
53
+ <dd>New commits pushed</dd>
54
+ <dt>reopened</dt>
55
+ <dd>PR reopened</dd>
56
+ <dt>closed</dt>
57
+ <dd>PR closed or merged</dd>
58
+ </dl>
59
+
60
+ <h2>Filters</h2>
61
+
62
+ <p>Control which files are analyzed using glob patterns.</p>
63
+
64
+ <dl>
65
+ <dt>paths</dt>
66
+ <dd>Files to include</dd>
67
+ <dt>ignorePaths</dt>
68
+ <dd>Files to exclude</dd>
69
+ </dl>
70
+
71
+ <Terminal showCopy={true}>
72
+ <Code
73
+ code={`[[triggers]]
74
+ name = "API Review"
75
+ event = "pull_request"
76
+ actions = ["opened", "synchronize"]
77
+ skill = "api-review"
78
+
79
+ [triggers.filters]
80
+ paths = ["src/api/**/*.ts"]
81
+ ignorePaths = ["**/*.test.ts"]`}
82
+ lang="toml"
83
+ theme="vitesse-black"
84
+ />
85
+ </Terminal>
86
+
87
+ <h2>Output</h2>
88
+
89
+ <p>Control how findings are reported.</p>
90
+
91
+ <dl>
92
+ <dt>failOn</dt>
93
+ <dd>Minimum severity to fail: <code>critical</code>, <code>high</code>, <code>medium</code>, <code>low</code>, <code>info</code>, <code>off</code></dd>
94
+ <dt>commentOn</dt>
95
+ <dd>Minimum severity to post as comment</dd>
96
+ <dt>maxFindings</dt>
97
+ <dd>Maximum findings to report</dd>
98
+ <dt>commentOnSuccess</dt>
99
+ <dd>Post comment when no findings. Default: <code>false</code></dd>
100
+ </dl>
101
+
102
+ <Terminal showCopy={true}>
103
+ <Code
104
+ code={`[triggers.output]
105
+ failOn = "high"
106
+ commentOn = "medium"
107
+ maxFindings = 20`}
108
+ lang="toml"
109
+ theme="vitesse-black"
110
+ />
111
+ </Terminal>
112
+
113
+ <h2>Defaults</h2>
114
+
115
+ <p>Default settings inherited by all triggers. Individual triggers can override any setting.</p>
116
+
117
+ <dl>
118
+ <dt>model</dt>
119
+ <dd>Model for all triggers</dd>
120
+ <dt>maxTurns</dt>
121
+ <dd>Max agentic turns per hunk. Default: 50</dd>
122
+ <dt>defaultBranch</dt>
123
+ <dd>Repository default branch (auto-detected)</dd>
124
+ <dt>filters</dt>
125
+ <dd>Default path filters</dd>
126
+ <dt>output</dt>
127
+ <dd>Default output settings</dd>
128
+ <dt>chunking</dt>
129
+ <dd>File processing configuration</dd>
130
+ </dl>
131
+
132
+ <Terminal showCopy={true}>
133
+ <Code
134
+ code={`[defaults]
135
+ model = "claude-sonnet-4-20250514"
136
+ maxTurns = 30
137
+
138
+ [defaults.filters]
139
+ ignorePaths = ["**/vendor/**", "**/node_modules/**"]
140
+
141
+ [defaults.output]
142
+ failOn = "high"
143
+ commentOn = "medium"`}
144
+ lang="toml"
145
+ theme="vitesse-black"
146
+ />
147
+ </Terminal>
148
+
149
+ <h2>Chunking</h2>
150
+
151
+ <p>Control how files are split for analysis. By default, Warden analyzes each hunk separately.</p>
152
+
153
+ <h3>File Patterns</h3>
154
+
155
+ <dl>
156
+ <dt>per-hunk</dt>
157
+ <dd>Analyze each diff hunk separately (default)</dd>
158
+ <dt>whole-file</dt>
159
+ <dd>Analyze entire file as one chunk</dd>
160
+ <dt>skip</dt>
161
+ <dd>Skip the file entirely</dd>
162
+ </dl>
163
+
164
+ <h3>Coalescing</h3>
165
+
166
+ <p>Merge nearby hunks for better context.</p>
167
+
168
+ <dl>
169
+ <dt>enabled</dt>
170
+ <dd>Enable hunk coalescing. Default: <code>true</code></dd>
171
+ <dt>maxGapLines</dt>
172
+ <dd>Max lines between hunks to merge. Default: 30</dd>
173
+ <dt>maxChunkSize</dt>
174
+ <dd>Target max chunk size in characters. Default: 8000</dd>
175
+ </dl>
176
+
177
+ <Terminal showCopy={true}>
178
+ <Code
179
+ code={`[defaults.chunking]
180
+
181
+ [[defaults.chunking.filePatterns]]
182
+ pattern = "**/pnpm-lock.yaml"
183
+ mode = "skip"
184
+
185
+ [[defaults.chunking.filePatterns]]
186
+ pattern = "**/migrations/*.sql"
187
+ mode = "whole-file"
188
+
189
+ [defaults.chunking.coalesce]
190
+ enabled = true
191
+ maxGapLines = 50
192
+ maxChunkSize = 10000`}
193
+ lang="toml"
194
+ theme="vitesse-black"
195
+ />
196
+ </Terminal>
197
+
198
+ <h2>Schedule Triggers</h2>
199
+
200
+ <p>Run on a cron schedule instead of PR events. Requires <code>filters.paths</code> to specify which files to scan.</p>
201
+
202
+ <dl>
203
+ <dt>issueTitle</dt>
204
+ <dd>Title for the tracking issue. Default: "Warden: {'{name}'}"</dd>
205
+ <dt>createFixPR</dt>
206
+ <dd>Create PR with fixes when available. Default: <code>false</code></dd>
207
+ <dt>fixBranchPrefix</dt>
208
+ <dd>Branch prefix for fix PRs. Default: <code>warden-fix</code></dd>
209
+ </dl>
210
+
211
+ <Terminal showCopy={true}>
212
+ <Code
213
+ code={`[[triggers]]
214
+ name = "Weekly Security Scan"
215
+ event = "schedule"
216
+ skill = "security-review"
217
+
218
+ [triggers.filters]
219
+ paths = ["src/**/*.ts"]
220
+
221
+ [triggers.schedule]
222
+ createFixPR = true`}
223
+ lang="toml"
224
+ theme="vitesse-black"
225
+ />
226
+ </Terminal>
227
+
228
+ <h2>Environment Variables</h2>
229
+
230
+ <dl>
231
+ <dt>WARDEN_ANTHROPIC_API_KEY</dt>
232
+ <dd>Anthropic API key (required)</dd>
233
+ <dt>WARDEN_MODEL</dt>
234
+ <dd>Model override</dd>
235
+ <dt>WARDEN_SKILL_CACHE_TTL</dt>
236
+ <dd>Cache duration for unpinned remote skills. Default: 24h</dd>
237
+ </dl>
238
+
239
+ <h2 id="skill-references">Skill References</h2>
240
+
241
+ <p>Skills can be referenced in multiple ways:</p>
242
+
243
+ <Terminal showCopy={true}>
244
+ <Code
245
+ code={`# By name (resolved from .warden/skills/, .agents/skills/, .claude/skills/)
246
+ [[triggers]]
247
+ skill = "security-review"
248
+
249
+ # By relative path
250
+ [[triggers]]
251
+ skill = "./custom-skills/my-review"
252
+
253
+ # Remote skill (unpinned - checks for updates every 24h)
254
+ [[triggers]]
255
+ skill = "security-review"
256
+ remote = "getsentry/warden-skills"
257
+
258
+ # Remote skill (pinned to commit - cached permanently)
259
+ [[triggers]]
260
+ skill = "security-review"
261
+ remote = "getsentry/warden-skills@abc123def"`}
262
+ lang="toml"
263
+ theme="vitesse-black"
264
+ />
265
+ </Terminal>
266
+
267
+ <h3>Resolution Order</h3>
268
+
269
+ <ol>
270
+ <li>Remote repository (if <code>remote</code> field is specified)</li>
271
+ <li>Direct path (if skill contains <code>/</code>, <code>\</code>, or starts with <code>.</code>)</li>
272
+ <li>Conventional directories (first match wins)</li>
273
+ </ol>
274
+
275
+ <h2>Skills</h2>
276
+
277
+ <p>Skills define what Warden analyzes. They follow the <a href="https://agentskills.io">agentskills.io</a> specification.</p>
278
+
279
+ <h3>Skill Directories</h3>
280
+
281
+ <p>Warden discovers skills from these directories (first match wins):</p>
282
+
283
+ <dl>
284
+ <dt>.warden/skills/</dt>
285
+ <dd>Warden-specific skills (highest priority)</dd>
286
+ <dt>.agents/skills/</dt>
287
+ <dd>Shared agent skills</dd>
288
+ <dt>.claude/skills/</dt>
289
+ <dd>Claude Code skills</dd>
290
+ </dl>
291
+
292
+ <h3>SKILL.md Format</h3>
293
+
294
+ <p>Create a directory with a <code>SKILL.md</code> file:</p>
295
+
296
+ <Terminal showCopy={true}>
297
+ <Code
298
+ code={`.agents/skills/
299
+ └── security-review/
300
+ └── SKILL.md`}
301
+ lang="text"
302
+ theme="vitesse-black"
303
+ />
304
+ </Terminal>
305
+
306
+ <p>The <code>SKILL.md</code> file uses YAML frontmatter for metadata and markdown for the prompt:</p>
307
+
308
+ <Terminal showCopy={true}>
309
+ <Code
310
+ code={`---
311
+ name: security-review
312
+ description: Review code for security vulnerabilities
313
+ allowed-tools: Read Grep Glob
314
+ ---
315
+
316
+ Review the code for security issues including:
317
+ - SQL injection
318
+ - XSS vulnerabilities
319
+ - Hardcoded secrets
320
+ - Insecure dependencies`}
321
+ lang="markdown"
322
+ theme="vitesse-black"
323
+ />
324
+ </Terminal>
325
+
326
+ <dl>
327
+ <dt>name</dt>
328
+ <dd>Skill name (referenced by triggers)</dd>
329
+ <dt>description</dt>
330
+ <dd>Brief description</dd>
331
+ <dt>allowed-tools</dt>
332
+ <dd>Space-separated tool names (optional)</dd>
333
+ </dl>
334
+
335
+ <h3>Available Tools</h3>
336
+
337
+ <p><code>Read</code>, <code>Grep</code>, <code>Glob</code>, <code>Edit</code>, <code>Write</code>, <code>Bash</code>, <code>WebFetch</code>, <code>WebSearch</code></p>
338
+
339
+ <h2 id="workflow">Workflow</h2>
340
+
341
+ <p>The workflow generated by <code>warden init</code>. Uncomment the GitHub App section for branded comments.</p>
342
+
343
+ <Terminal showCopy={true}>
344
+ <Code
345
+ code={`name: Warden
346
+
347
+ permissions:
348
+ contents: read
349
+ pull-requests: write
350
+
351
+ on:
352
+ pull_request:
353
+ types: [opened, synchronize, reopened]
354
+
355
+ env:
356
+ WARDEN_ANTHROPIC_API_KEY: \${{ secrets.WARDEN_ANTHROPIC_API_KEY }}
357
+
358
+ jobs:
359
+ warden:
360
+ runs-on: ubuntu-latest
361
+ steps:
362
+ - uses: actions/checkout@v4
363
+
364
+ # Uncomment for GitHub App (branded comments)
365
+ # - uses: actions/create-github-app-token@v1
366
+ # id: app-token
367
+ # with:
368
+ # app-id: \${{ secrets.WARDEN_APP_ID }}
369
+ # private-key: \${{ secrets.WARDEN_PRIVATE_KEY }}
370
+
371
+ - uses: getsentry/warden-action@v1
372
+ with:
373
+ github-token: \${{ secrets.GITHUB_TOKEN }}
374
+ # github-token: \${{ steps.app-token.outputs.token }}`}
375
+ lang="yaml"
376
+ theme="vitesse-black"
377
+ />
378
+ </Terminal>
379
+
380
+ <h3>Action Inputs</h3>
381
+
382
+ <dl>
383
+ <dt>github-token</dt>
384
+ <dd>GitHub token for posting comments. Default: <code>GITHUB_TOKEN</code></dd>
385
+ <dt>anthropic-api-key</dt>
386
+ <dd>Anthropic API key (falls back to <code>WARDEN_ANTHROPIC_API_KEY</code>)</dd>
387
+ <dt>config-path</dt>
388
+ <dd>Path to config file. Default: <code>warden.toml</code></dd>
389
+ <dt>fail-on</dt>
390
+ <dd>Minimum severity to fail the check</dd>
391
+ <dt>comment-on</dt>
392
+ <dd>Minimum severity to post comments</dd>
393
+ </dl>
394
+ </Base>