@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.
- package/.agents/skills/find-bugs/SKILL.md +75 -0
- package/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/.claude/settings.json +57 -0
- package/.claude/settings.local.json +88 -0
- package/.claude/skills/agent-prompt/SKILL.md +54 -0
- package/.claude/skills/agent-prompt/references/agentic-patterns.md +94 -0
- package/.claude/skills/agent-prompt/references/anti-patterns.md +140 -0
- package/.claude/skills/agent-prompt/references/context-design.md +124 -0
- package/.claude/skills/agent-prompt/references/core-principles.md +75 -0
- package/.claude/skills/agent-prompt/references/model-guidance.md +118 -0
- package/.claude/skills/agent-prompt/references/output-formats.md +98 -0
- package/.claude/skills/agent-prompt/references/skill-structure.md +115 -0
- package/.claude/skills/agent-prompt/references/system-prompts.md +115 -0
- package/.claude/skills/notseer/SKILL.md +131 -0
- package/.claude/skills/skill-writer/SKILL.md +140 -0
- package/.claude/skills/testing-guidelines/SKILL.md +132 -0
- package/.claude/skills/warden-skill/SKILL.md +250 -0
- package/.claude/skills/warden-skill/references/config-schema.md +133 -0
- package/.dex/config.toml +2 -0
- package/.github/workflows/ci.yml +33 -0
- package/.github/workflows/release.yml +54 -0
- package/.github/workflows/warden.yml +40 -0
- package/AGENTS.md +89 -0
- package/CONTRIBUTING.md +60 -0
- package/LICENSE +105 -0
- package/README.md +43 -0
- package/SPEC.md +263 -0
- package/action.yml +87 -0
- package/assets/favicon.png +0 -0
- package/assets/warden-icon-bw.svg +5 -0
- package/assets/warden-icon-purple.png +0 -0
- package/assets/warden-icon-purple.svg +5 -0
- package/docs/.claude/settings.local.json +11 -0
- package/docs/astro.config.mjs +43 -0
- package/docs/package.json +19 -0
- package/docs/pnpm-lock.yaml +4000 -0
- package/docs/public/favicon.svg +5 -0
- package/docs/src/components/Code.astro +141 -0
- package/docs/src/components/PackageManagerTabs.astro +183 -0
- package/docs/src/components/Terminal.astro +212 -0
- package/docs/src/layouts/Base.astro +380 -0
- package/docs/src/pages/cli.astro +167 -0
- package/docs/src/pages/config.astro +394 -0
- package/docs/src/pages/guide.astro +449 -0
- package/docs/src/pages/index.astro +490 -0
- package/docs/src/styles/global.css +551 -0
- package/docs/tsconfig.json +3 -0
- package/docs/vercel.json +5 -0
- package/eslint.config.js +33 -0
- package/package.json +73 -0
- package/src/action/index.ts +1 -0
- package/src/action/main.ts +868 -0
- package/src/cli/args.test.ts +477 -0
- package/src/cli/args.ts +415 -0
- package/src/cli/commands/add.ts +447 -0
- package/src/cli/commands/init.test.ts +136 -0
- package/src/cli/commands/init.ts +132 -0
- package/src/cli/commands/setup-app/browser.ts +38 -0
- package/src/cli/commands/setup-app/credentials.ts +45 -0
- package/src/cli/commands/setup-app/manifest.ts +48 -0
- package/src/cli/commands/setup-app/server.ts +172 -0
- package/src/cli/commands/setup-app.ts +156 -0
- package/src/cli/commands/sync.ts +114 -0
- package/src/cli/context.ts +131 -0
- package/src/cli/files.test.ts +155 -0
- package/src/cli/files.ts +89 -0
- package/src/cli/fix.test.ts +310 -0
- package/src/cli/fix.ts +387 -0
- package/src/cli/git.test.ts +119 -0
- package/src/cli/git.ts +318 -0
- package/src/cli/index.ts +14 -0
- package/src/cli/main.ts +672 -0
- package/src/cli/output/box.ts +235 -0
- package/src/cli/output/formatters.test.ts +187 -0
- package/src/cli/output/formatters.ts +269 -0
- package/src/cli/output/icons.ts +13 -0
- package/src/cli/output/index.ts +44 -0
- package/src/cli/output/ink-runner.tsx +337 -0
- package/src/cli/output/jsonl.test.ts +347 -0
- package/src/cli/output/jsonl.ts +126 -0
- package/src/cli/output/reporter.ts +435 -0
- package/src/cli/output/tasks.ts +374 -0
- package/src/cli/output/tty.test.ts +117 -0
- package/src/cli/output/tty.ts +60 -0
- package/src/cli/output/verbosity.test.ts +40 -0
- package/src/cli/output/verbosity.ts +31 -0
- package/src/cli/terminal.test.ts +148 -0
- package/src/cli/terminal.ts +301 -0
- package/src/config/index.ts +3 -0
- package/src/config/loader.test.ts +313 -0
- package/src/config/loader.ts +103 -0
- package/src/config/schema.ts +168 -0
- package/src/config/writer.test.ts +119 -0
- package/src/config/writer.ts +84 -0
- package/src/diff/classify.test.ts +162 -0
- package/src/diff/classify.ts +92 -0
- package/src/diff/coalesce.test.ts +208 -0
- package/src/diff/coalesce.ts +133 -0
- package/src/diff/context.test.ts +226 -0
- package/src/diff/context.ts +201 -0
- package/src/diff/index.ts +4 -0
- package/src/diff/parser.test.ts +212 -0
- package/src/diff/parser.ts +149 -0
- package/src/event/context.ts +132 -0
- package/src/event/index.ts +2 -0
- package/src/event/schedule-context.ts +101 -0
- package/src/examples/examples.integration.test.ts +66 -0
- package/src/examples/index.test.ts +101 -0
- package/src/examples/index.ts +122 -0
- package/src/examples/setup.ts +25 -0
- package/src/index.ts +115 -0
- package/src/output/dedup.test.ts +419 -0
- package/src/output/dedup.ts +607 -0
- package/src/output/github-checks.test.ts +300 -0
- package/src/output/github-checks.ts +476 -0
- package/src/output/github-issues.ts +329 -0
- package/src/output/index.ts +5 -0
- package/src/output/issue-renderer.ts +197 -0
- package/src/output/renderer.test.ts +727 -0
- package/src/output/renderer.ts +217 -0
- package/src/output/stale.test.ts +375 -0
- package/src/output/stale.ts +155 -0
- package/src/output/types.ts +34 -0
- package/src/sdk/index.ts +1 -0
- package/src/sdk/runner.test.ts +806 -0
- package/src/sdk/runner.ts +1232 -0
- package/src/skills/index.ts +36 -0
- package/src/skills/loader.test.ts +300 -0
- package/src/skills/loader.ts +423 -0
- package/src/skills/remote.test.ts +704 -0
- package/src/skills/remote.ts +604 -0
- package/src/triggers/matcher.test.ts +277 -0
- package/src/triggers/matcher.ts +152 -0
- package/src/types/index.ts +194 -0
- package/src/utils/async.ts +18 -0
- package/src/utils/index.test.ts +84 -0
- package/src/utils/index.ts +50 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +8 -0
- package/vitest.integration.config.ts +11 -0
- 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>
|