agent-skill-lint 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,462 @@
1
+ Metadata-Version: 2.4
2
+ Name: agent-skill-lint
3
+ Version: 0.1.0
4
+ Summary: Static quality linter for AI agent skill definitions (SKILL.md files)
5
+ Project-URL: Homepage, https://github.com/hananel-e/agent-skill-lint
6
+ Project-URL: Repository, https://github.com/hananel-e/agent-skill-lint
7
+ Project-URL: Bug Tracker, https://github.com/hananel-e/agent-skill-lint/issues
8
+ Project-URL: Changelog, https://github.com/hananel-e/agent-skill-lint/blob/main/CHANGELOG.md
9
+ License: Apache License
10
+ Version 2.0, January 2004
11
+ http://www.apache.org/licenses/
12
+
13
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
14
+
15
+ 1. Definitions.
16
+
17
+ "License" shall mean the terms and conditions for use, reproduction,
18
+ and distribution as defined by Sections 1 through 9 of this document.
19
+
20
+ "Licensor" shall mean the copyright owner or entity authorized by
21
+ the copyright owner that is granting the License.
22
+
23
+ "Legal Entity" shall mean the union of the acting entity and all
24
+ other entities that control, are controlled by, or are under common
25
+ control with that entity. For the purposes of this definition,
26
+ "control" means (i) the power, direct or indirect, to cause the
27
+ direction or management of such entity, whether by contract or
28
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
29
+ outstanding shares, or (iii) beneficial ownership of such entity.
30
+
31
+ "You" (or "Your") shall mean an individual or Legal Entity
32
+ exercising permissions granted by this License.
33
+
34
+ "Source" form shall mean the preferred form for making modifications,
35
+ including but not limited to software source code, documentation
36
+ source, and configuration files.
37
+
38
+ "Object" form shall mean any form resulting from mechanical
39
+ transformation or translation of a Source form, including but
40
+ not limited to compiled object code, generated documentation,
41
+ and conversions to other media types.
42
+
43
+ "Work" shall mean the work of authorship made available under
44
+ the License, as indicated by a copyright notice that is included in
45
+ or attached to the work (an example is provided in the Appendix below).
46
+
47
+ "Derivative Works" shall mean any work, whether in Source or Object
48
+ form, that is based on (or derived from) the Work and for which the
49
+ editorial revisions, annotations, elaborations, or other modifications
50
+ represent, as a whole, an original work of authorship. For the purposes
51
+ of this License, Derivative Works shall not include works that remain
52
+ separable from, or merely link (or bind by name) to the interfaces of,
53
+ the Work and Derivative Works thereof.
54
+
55
+ "Contribution" shall mean, as submitted to the Licensor for inclusion
56
+ in the Work by the copyright owner or by an individual or Legal Entity
57
+ authorized to submit on behalf of the copyright owner. For the purposes
58
+ of this definition, "submitted" means any form of electronic, verbal,
59
+ or written communication sent to the Licensor or its representatives,
60
+ including but not limited to communication on electronic mailing lists,
61
+ source code control systems, and issue tracking systems that are managed
62
+ by, or on behalf of, the Licensor for the purpose of developing and
63
+ improving the Work, but excluding communication that is conspicuously
64
+ marked or designated in writing by the copyright owner as "Not a
65
+ Contribution."
66
+
67
+ "Contributor" shall mean Licensor and any Legal Entity on behalf of
68
+ whom a Contribution has been received by the Licensor and included
69
+ within the Work.
70
+
71
+ 2. Grant of Copyright License. Subject to the terms and conditions of
72
+ this License, each Contributor hereby grants to You a perpetual,
73
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
74
+ copyright license to reproduce, prepare Derivative Works of,
75
+ publicly display, publicly perform, sublicense, and distribute the
76
+ Work and such Derivative Works in Source or Object form.
77
+
78
+ 3. Grant of Patent License. Subject to the terms and conditions of
79
+ this License, each Contributor hereby grants to You a perpetual,
80
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
81
+ (except as stated in this section) patent license to make, have made,
82
+ use, offer to sell, sell, import, and otherwise transfer the Work,
83
+ where such license applies only to those patent claims licensable
84
+ by such Contributor that are necessarily infringed by their
85
+ Contribution(s) alone or by the combination of their Contribution(s)
86
+ with the Work to which such Contribution(s) was submitted. If You
87
+ institute patent litigation against any entity (including a cross-claim
88
+ or counterclaim in a lawsuit) alleging that the Work or any
89
+ Contribution embodied within the Work constitutes direct or contributory
90
+ patent infringement, then any patent licenses granted to You under
91
+ this License for that Work shall terminate as of the date such
92
+ litigation is filed.
93
+
94
+ 4. Redistribution. You may reproduce and distribute copies of the
95
+ Work or Derivative Works thereof in any medium, with or without
96
+ modifications, and in Source or Object form, provided that You
97
+ meet the following conditions:
98
+
99
+ (a) You must give any other recipients of the Work or Derivative
100
+ Works a copy of this License; and
101
+
102
+ (b) You must cause any modified files to carry prominent notices
103
+ stating that You changed the files; and
104
+
105
+ (c) You must retain, in the Source form of any Derivative Works
106
+ that You distribute, all copyright, patent, trademark, and
107
+ attribution notices from the Source form of the Work,
108
+ excluding those notices that do not pertain to any part of
109
+ the Derivative Works; and
110
+
111
+ (d) If the Work includes a "NOTICE" text file as part of its
112
+ distribution, You must include a readable copy of the
113
+ attribution notices contained within such NOTICE file, in
114
+ at least one of the following places: within a NOTICE text
115
+ file distributed as part of the Derivative Works; within
116
+ the Source form or documentation, if provided along with the
117
+ Derivative Works; or, within a display generated by the
118
+ Derivative Works, if and wherever such third-party notices
119
+ normally appear. The contents of the NOTICE file are for
120
+ informational purposes only and do not modify the License.
121
+ You may add Your own attribution notices within Derivative
122
+ Works that You distribute, alongside or in addition to the
123
+ NOTICE text from the Work, provided that such additional
124
+ attribution notices cannot be construed as modifying the License.
125
+
126
+ You may add Your own license statement for Your modifications and
127
+ may provide additional grant of rights to use, copy, modify, merge,
128
+ publish, distribute, sublicense, and/or sell copies of the
129
+ Derivative Works, as set forth in this Section, without any of the
130
+ additional conditions stated in Sections 4(a), 4(b), and 4(c) above.
131
+
132
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
133
+ any Contribution intentionally submitted for inclusion in the Work
134
+ by You to the Licensor shall be under the terms and conditions of
135
+ this License, without any additional terms or conditions.
136
+ Notwithstanding the above, nothing herein shall supersede or modify
137
+ the terms of any separate license agreement you may have executed
138
+ with Licensor regarding such Contributions.
139
+
140
+ 6. Trademarks. This License does not grant permission to use the trade
141
+ names, trademarks, service marks, or product names of the Licensor,
142
+ except as required for reasonable and customary use in describing the
143
+ origin of the Work and reproducing the content of the NOTICE file.
144
+
145
+ 7. Disclaimer of Warranty. Unless required by applicable law or
146
+ agreed to in writing, Licensor provides the Work (and each
147
+ Contributor provides its Contributions) on an "AS IS" BASIS,
148
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
149
+ implied, including, without limitation, any warranties or conditions
150
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
151
+ PARTICULAR PURPOSE. You are solely responsible for determining the
152
+ appropriateness of using or reproducing the Work and assume any
153
+ risks associated with Your exercise of permissions under this License.
154
+
155
+ 8. Limitation of Liability. In no event and under no legal theory,
156
+ whether in tort (including negligence), contract, or otherwise,
157
+ unless required by applicable law (such as deliberate and grossly
158
+ negligent acts) or agreed to in writing, shall any Contributor be
159
+ liable to You for damages, including any direct, indirect, special,
160
+ incidental, or exemplary damages of any character arising as a
161
+ result of this License or out of the use or inability to use the
162
+ Work (including but not limited to damages for loss of goodwill,
163
+ work stoppage, computer failure or malfunction, or all other
164
+ commercial damages or losses), even if such Contributor has been
165
+ advised of the possibility of such damages.
166
+
167
+ 9. Accepting Warranty or Additional Liability. While redistributing
168
+ the Work or Derivative Works thereof, You may choose to offer,
169
+ and charge a fee for, acceptance of support, warranty, indemnity,
170
+ or other liability obligations and/or rights consistent with this
171
+ License. However, in accepting such obligations, You may offer only
172
+ conditions consistent with this License.
173
+
174
+ END OF TERMS AND CONDITIONS
175
+ License-File: LICENSE
176
+ Keywords: agents,ai,claude,linter,quality,roo,skills,static-analysis
177
+ Classifier: Development Status :: 3 - Alpha
178
+ Classifier: Environment :: Console
179
+ Classifier: Intended Audience :: Developers
180
+ Classifier: License :: OSI Approved :: Apache Software License
181
+ Classifier: Operating System :: OS Independent
182
+ Classifier: Programming Language :: Python :: 3.12
183
+ Classifier: Programming Language :: Python :: 3.13
184
+ Classifier: Programming Language :: Python :: 3.14
185
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
186
+ Classifier: Topic :: Software Development :: Quality Assurance
187
+ Classifier: Typing :: Typed
188
+ Requires-Python: >=3.12
189
+ Requires-Dist: markdown-it-py>=3.0.0
190
+ Requires-Dist: python-frontmatter>=1.1.0
191
+ Requires-Dist: pyyaml>=6.0
192
+ Requires-Dist: rich>=13.0.0
193
+ Requires-Dist: typer>=0.12.0
194
+ Provides-Extra: dev
195
+ Requires-Dist: build>=1.0.0; extra == 'dev'
196
+ Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
197
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
198
+ Requires-Dist: twine>=5.0.0; extra == 'dev'
199
+ Description-Content-Type: text/markdown
200
+
201
+ # agent-skill-lint
202
+
203
+ > Static quality linter for AI agent skill definitions (`SKILL.md` files).
204
+
205
+ `agent-skill-lint` is the `eslint` of the agent skill world — pure static analysis, zero LLM calls, zero cloud dependency, pre-commit-friendly, CI-ready.
206
+
207
+ It catches bad skill definitions **at development time**, before they reach the agent.
208
+
209
+ ---
210
+
211
+ ## Installation
212
+
213
+ ```bash
214
+ pip install agent-skill-lint
215
+ ```
216
+
217
+ Or from source:
218
+
219
+ ```bash
220
+ git clone https://github.com/hananel-e/agent-skill-lint
221
+ cd agent-skill-lint
222
+ pip install -e ".[dev]"
223
+ ```
224
+
225
+ ---
226
+
227
+ ## Quick Start
228
+
229
+ ```bash
230
+ # Lint all skill.md files found recursively under a path
231
+ skill-lint roo check .
232
+
233
+ # Lint a single file
234
+ skill-lint roo check .roo/skills-build/coder/skill.md
235
+
236
+ # Filter by severity
237
+ skill-lint roo check . --severity error # errors only
238
+
239
+ # Output formats
240
+ skill-lint roo check . --format json # machine-readable
241
+ skill-lint roo check . --format github # GitHub Actions annotations
242
+
243
+ # Disable specific rules
244
+ skill-lint roo check . --ignore ROO012,ROO031
245
+
246
+ # List all rules
247
+ skill-lint roo rules
248
+
249
+ # Explain a specific rule
250
+ skill-lint roo explain ROO013
251
+
252
+ # Check tool dependencies
253
+ skill-lint doctor
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Exit Codes
259
+
260
+ | Code | Meaning |
261
+ |---|---|
262
+ | `0` | Clean — no violations |
263
+ | `1` | One or more violations found |
264
+ | `2` | Tool error (file not found, parse failure, etc.) |
265
+
266
+ ---
267
+
268
+ ## Rule Catalogue
269
+
270
+ ### Category A — Frontmatter Rules
271
+
272
+ | Rule ID | Severity | Description |
273
+ |---|---|---|
274
+ | `ROO001` | error | `name` field missing from frontmatter |
275
+ | `ROO002` | error | `description` field missing from frontmatter |
276
+ | `ROO003` | error | `modeSlugs` field missing from frontmatter |
277
+ | `ROO004` | error | `modeSlugs` is an empty list |
278
+ | `ROO005` | warning | `modeSlugs` contains an unrecognised mode slug |
279
+ | `ROO006` | warning | `name` value does not match the parent directory name |
280
+ | `ROO007` | error | `description` is too short (< 50 characters) |
281
+ | `ROO008` | warning | `description` is too long (> 400 characters) |
282
+
283
+ ### Category B — Description Quality Rules
284
+
285
+ | Rule ID | Severity | Description |
286
+ |---|---|---|
287
+ | `ROO010` | warning | Description missing a trigger condition keyword |
288
+ | `ROO011` | warning | Description does not start with an action verb or `Use` |
289
+ | `ROO012` | warning | Description contains vague words |
290
+ | `ROO013` | warning | Description has >75% token overlap with another skill |
291
+ | `ROO014` | warning | Skill `name` mentioned in description is inconsistent with frontmatter |
292
+
293
+ ### Category C — Body Structure Rules
294
+
295
+ | Rule ID | Severity | Description |
296
+ |---|---|---|
297
+ | `ROO020` | error | No H1 heading found after frontmatter |
298
+ | `ROO021` | warning | H1 heading text does not match frontmatter `name` |
299
+ | `ROO022` | warning | Body has no numbered sections — likely a stub |
300
+ | `ROO023` | error | Markdown link target does not exist relative to repo root |
301
+ | `ROO024` | warning | Body references a mode slug not present in `.roomodes` |
302
+ | `ROO025` | warning | Body after frontmatter is < 100 characters — stub skill |
303
+
304
+ ### Category D — Cross-Skill Consistency Rules
305
+
306
+ | Rule ID | Severity | Description |
307
+ |---|---|---|
308
+ | `ROO030` | warning | Body references a skill name with no corresponding `skill.md` |
309
+ | `ROO031` | warning | Handoff file path uses a non-standard pattern |
310
+ | `ROO032` | error | Two or more skills claim the same `modeSlugs` entry |
311
+
312
+ ---
313
+
314
+ ## Configuration
315
+
316
+ Place a `.skill-lint.yaml` file at your repo root (copy from [`.skill-lint.yaml.example`](.skill-lint.yaml.example)):
317
+
318
+ ```yaml
319
+ rules:
320
+ ROO007:
321
+ min_length: 60 # override default (50)
322
+ ROO008:
323
+ max_length: 300 # override default (400)
324
+ ROO013:
325
+ similarity_threshold: 0.80 # override default (0.75)
326
+
327
+ ignore:
328
+ - ".roo/skills/legacy/" # skip entire directory
329
+ - "ROO031" # globally disable a rule
330
+
331
+ # Custom vague words (appended to built-in list)
332
+ vague_words:
333
+ - "facilitates"
334
+
335
+ # Known mode slugs (appended to built-in list)
336
+ extra_mode_slugs:
337
+ - "my-custom-mode"
338
+ ```
339
+
340
+ ### Per-rule overrides
341
+
342
+ Three rules accept numeric overrides under the `rules:` key:
343
+
344
+ | Rule | Config key | Default | Effect |
345
+ |---|---|---|---|
346
+ | `ROO007` | `rules.ROO007.min_length` | `50` | Minimum description length in characters. Raise it if your team requires more detail. |
347
+ | `ROO008` | `rules.ROO008.max_length` | `400` | Maximum description length in characters. Lower it to enforce tighter descriptions. |
348
+ | `ROO013` | `rules.ROO013.similarity_threshold` | `0.75` | Token-overlap ratio (0–1) above which two skill descriptions are flagged as too similar. Raise it to allow more overlap; lower it to enforce stricter uniqueness. |
349
+
350
+ **Example** — enforce 60-char minimum and flag descriptions that are 80%+ similar:
351
+
352
+ ```yaml
353
+ rules:
354
+ ROO007:
355
+ min_length: 60
356
+ ROO013:
357
+ similarity_threshold: 0.80
358
+ ```
359
+
360
+ ### Ignoring rules and paths
361
+
362
+ ```yaml
363
+ ignore:
364
+ - "ROO031" # disable rule globally
365
+ - ".roo/skills/legacy/" # skip all skill.md files under this path prefix
366
+ ```
367
+
368
+ You can also suppress rules for a single run without touching the config:
369
+
370
+ ```bash
371
+ skill-lint roo check . --ignore ROO012,ROO031
372
+ ```
373
+
374
+ ### Extending the mode slug allowlist
375
+
376
+ If your Roo setup uses custom modes not in the built-in list, add them so `ROO005` does not flag them as unknown:
377
+
378
+ ```yaml
379
+ extra_mode_slugs:
380
+ - "my-workflow"
381
+ - "data-analyst"
382
+ ```
383
+
384
+ ### Extending the vague word list
385
+
386
+ The built-in vague words are: `handles`, `manages`, `does`, `performs`, `processes`.
387
+ Append your own:
388
+
389
+ ```yaml
390
+ vague_words:
391
+ - "facilitates"
392
+ - "coordinates"
393
+ - "oversees"
394
+ ```
395
+
396
+ ---
397
+
398
+ ## Example Output
399
+
400
+ ```
401
+ .roo/skills-build/coder/skill.md
402
+ ✗ ROO008 description is 412 chars (max 400) [error]
403
+ ⚠ ROO012 description uses vague word: "owns" [warning]
404
+
405
+ .roo/skills/api-schema-generator/skill.md
406
+ ✗ ROO023 broken link: .roo/skills-build/coder/ui-patterns.md [error]
407
+ ⚠ ROO022 no numbered sections found [warning]
408
+
409
+ ────────────────────────────────────────────────────────────
410
+ 2 errors | 2 warnings | 3 files scanned | 1 clean
411
+ ```
412
+
413
+ ---
414
+
415
+ ## Pre-commit Hook
416
+
417
+ ```yaml
418
+ # .pre-commit-config.yaml
419
+ repos:
420
+ - repo: https://github.com/hananel-e/agent-skill-lint
421
+ rev: v0.1.0
422
+ hooks:
423
+ - id: skill-lint-roo
424
+ name: skill-lint (Roo skills)
425
+ language: python
426
+ entry: skill-lint roo check
427
+ files: skill\.md$
428
+ pass_filenames: false
429
+ args: ["."]
430
+ ```
431
+
432
+ ---
433
+
434
+ ## Development
435
+
436
+ ```bash
437
+ pip install -e ".[dev]"
438
+ pytest
439
+ ```
440
+
441
+ ---
442
+
443
+ ## Tech Stack
444
+
445
+ | Concern | Library |
446
+ |---|---|
447
+ | CLI | `typer` |
448
+ | Terminal output | `rich` |
449
+ | Frontmatter parsing | `python-frontmatter` |
450
+ | Markdown parsing | `markdown-it-py` |
451
+ | Token overlap (ROO013) | `difflib.SequenceMatcher` (stdlib) |
452
+ | Config file | `pyyaml` |
453
+ | Build backend | `hatchling` |
454
+ | Test framework | `pytest` |
455
+
456
+ Zero heavy dependencies — no `scikit-learn`, no `sentence-transformers`, no LLM calls.
457
+
458
+ ---
459
+
460
+ ## License
461
+
462
+ Apache 2.0
@@ -0,0 +1,24 @@
1
+ skill_lint/__init__.py,sha256=JfjgpLNSD9mvNGeMwMpYUhFCl0isZRnZRwlPYj_m-ew,98
2
+ skill_lint/cli.py,sha256=pc95iN7r3Fi-R_7Q-uD7QXL9J7CYz8mOtoNB8ySoVG8,5649
3
+ skill_lint/config.py,sha256=b475mCE8TWpNhk_JzPH-A9_iUuBwCky1b5WP7utP_hA,2059
4
+ skill_lint/models.py,sha256=xhzX1xrpQG-nJZayYRCc-iNecGC4RVSjFrTdAUK6mV4,2421
5
+ skill_lint/runner.py,sha256=sWtUM4pBs10kKC8Cj5DVkUHZFp-zfApOJUD9NyQREfc,4094
6
+ skill_lint/parsers/__init__.py,sha256=ytGAA_3GlIDef0KBZRBusBh9QXSz0ONI31lhNnMP8Vw,34
7
+ skill_lint/parsers/frontmatter.py,sha256=5Jz0s7W0etYZwlkvXrmxnONDk8FW4PVMnbo25oCnSqU,1749
8
+ skill_lint/parsers/markdown_body.py,sha256=Th0KhlM0aouZvcTZldWnKIuNFdUHFS7Ajp1r6T564aE,3167
9
+ skill_lint/reporters/__init__.py,sha256=6xwhvOezrHliaVgi07g-h8EgYXHxq7Ysvi0rhuW_eIo,39
10
+ skill_lint/reporters/console.py,sha256=n2OtO6cw0h79SEY8A8mN6rxWZwhpZ7gEjwcU0jLi0W0,2905
11
+ skill_lint/reporters/json_reporter.py,sha256=zQ52N9iCeam_2n3zTJN2MOMRlPjmg8N-m7SLQOb6mMU,339
12
+ skill_lint/rules/__init__.py,sha256=07SUr99Bm5q556jHwjkBdiiCY5aaBYFM_71HhYAcO-E,33
13
+ skill_lint/rules/base.py,sha256=8Z9QbK0rO4A90uGPy7P-fR5Tnl1g0f5XdN-hQGizNl4,1377
14
+ skill_lint/rules/roo/__init__.py,sha256=dWPmzVjVnf9QxYvKtx2lWUAsOPX3PwY-uAxhUxpuVC8,31
15
+ skill_lint/rules/roo/body_rules.py,sha256=4ZF93sKa0nw8XWoYGG8-OO00TGNmANMU62-pe_LZb18,6169
16
+ skill_lint/rules/roo/cross_skill_rules.py,sha256=TKYRgKqq4yJIoXZ5cRCfbUrrKULrppyadbg5vpJ-3UM,4058
17
+ skill_lint/rules/roo/description_rules.py,sha256=wHQk6cKU-anlWQ6BGRBoZHzeKlD7wJ-GkBTliTKm_bg,6704
18
+ skill_lint/rules/roo/frontmatter_rules.py,sha256=X_o8KQKxY1OQTiqOd6P0vRc78-EYbOiH8uxUyTvAMzI,6381
19
+ skill_lint/rules/roo/registry.py,sha256=bzoN45nrA2UCxohcQDe5KeTlioal9GvHkx49S2271Vo,374
20
+ agent_skill_lint-0.1.0.dist-info/METADATA,sha256=y8BLIKSAIEjNMq5asncRUwUjVYoRMwYnROOpJLl4VQE,19406
21
+ agent_skill_lint-0.1.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
22
+ agent_skill_lint-0.1.0.dist-info/entry_points.txt,sha256=1lKh95Um31STzs9Fkg-6IlJCoeoDbP6MfyRqxMTIwwg,50
23
+ agent_skill_lint-0.1.0.dist-info/licenses/LICENSE,sha256=W3Zogl43bAaqcE5YAQtnYFEjabYIYGis0ES8WYj3bEA,9426
24
+ agent_skill_lint-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ skill-lint = skill_lint.cli:app
@@ -0,0 +1,166 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship made available under
36
+ the License, as indicated by a copyright notice that is included in
37
+ or attached to the work (an example is provided in the Appendix below).
38
+
39
+ "Derivative Works" shall mean any work, whether in Source or Object
40
+ form, that is based on (or derived from) the Work and for which the
41
+ editorial revisions, annotations, elaborations, or other modifications
42
+ represent, as a whole, an original work of authorship. For the purposes
43
+ of this License, Derivative Works shall not include works that remain
44
+ separable from, or merely link (or bind by name) to the interfaces of,
45
+ the Work and Derivative Works thereof.
46
+
47
+ "Contribution" shall mean, as submitted to the Licensor for inclusion
48
+ in the Work by the copyright owner or by an individual or Legal Entity
49
+ authorized to submit on behalf of the copyright owner. For the purposes
50
+ of this definition, "submitted" means any form of electronic, verbal,
51
+ or written communication sent to the Licensor or its representatives,
52
+ including but not limited to communication on electronic mailing lists,
53
+ source code control systems, and issue tracking systems that are managed
54
+ by, or on behalf of, the Licensor for the purpose of developing and
55
+ improving the Work, but excluding communication that is conspicuously
56
+ marked or designated in writing by the copyright owner as "Not a
57
+ Contribution."
58
+
59
+ "Contributor" shall mean Licensor and any Legal Entity on behalf of
60
+ whom a Contribution has been received by the Licensor and included
61
+ within the Work.
62
+
63
+ 2. Grant of Copyright License. Subject to the terms and conditions of
64
+ this License, each Contributor hereby grants to You a perpetual,
65
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
66
+ copyright license to reproduce, prepare Derivative Works of,
67
+ publicly display, publicly perform, sublicense, and distribute the
68
+ Work and such Derivative Works in Source or Object form.
69
+
70
+ 3. Grant of Patent License. Subject to the terms and conditions of
71
+ this License, each Contributor hereby grants to You a perpetual,
72
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
73
+ (except as stated in this section) patent license to make, have made,
74
+ use, offer to sell, sell, import, and otherwise transfer the Work,
75
+ where such license applies only to those patent claims licensable
76
+ by such Contributor that are necessarily infringed by their
77
+ Contribution(s) alone or by the combination of their Contribution(s)
78
+ with the Work to which such Contribution(s) was submitted. If You
79
+ institute patent litigation against any entity (including a cross-claim
80
+ or counterclaim in a lawsuit) alleging that the Work or any
81
+ Contribution embodied within the Work constitutes direct or contributory
82
+ patent infringement, then any patent licenses granted to You under
83
+ this License for that Work shall terminate as of the date such
84
+ litigation is filed.
85
+
86
+ 4. Redistribution. You may reproduce and distribute copies of the
87
+ Work or Derivative Works thereof in any medium, with or without
88
+ modifications, and in Source or Object form, provided that You
89
+ meet the following conditions:
90
+
91
+ (a) You must give any other recipients of the Work or Derivative
92
+ Works a copy of this License; and
93
+
94
+ (b) You must cause any modified files to carry prominent notices
95
+ stating that You changed the files; and
96
+
97
+ (c) You must retain, in the Source form of any Derivative Works
98
+ that You distribute, all copyright, patent, trademark, and
99
+ attribution notices from the Source form of the Work,
100
+ excluding those notices that do not pertain to any part of
101
+ the Derivative Works; and
102
+
103
+ (d) If the Work includes a "NOTICE" text file as part of its
104
+ distribution, You must include a readable copy of the
105
+ attribution notices contained within such NOTICE file, in
106
+ at least one of the following places: within a NOTICE text
107
+ file distributed as part of the Derivative Works; within
108
+ the Source form or documentation, if provided along with the
109
+ Derivative Works; or, within a display generated by the
110
+ Derivative Works, if and wherever such third-party notices
111
+ normally appear. The contents of the NOTICE file are for
112
+ informational purposes only and do not modify the License.
113
+ You may add Your own attribution notices within Derivative
114
+ Works that You distribute, alongside or in addition to the
115
+ NOTICE text from the Work, provided that such additional
116
+ attribution notices cannot be construed as modifying the License.
117
+
118
+ You may add Your own license statement for Your modifications and
119
+ may provide additional grant of rights to use, copy, modify, merge,
120
+ publish, distribute, sublicense, and/or sell copies of the
121
+ Derivative Works, as set forth in this Section, without any of the
122
+ additional conditions stated in Sections 4(a), 4(b), and 4(c) above.
123
+
124
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
125
+ any Contribution intentionally submitted for inclusion in the Work
126
+ by You to the Licensor shall be under the terms and conditions of
127
+ this License, without any additional terms or conditions.
128
+ Notwithstanding the above, nothing herein shall supersede or modify
129
+ the terms of any separate license agreement you may have executed
130
+ with Licensor regarding such Contributions.
131
+
132
+ 6. Trademarks. This License does not grant permission to use the trade
133
+ names, trademarks, service marks, or product names of the Licensor,
134
+ except as required for reasonable and customary use in describing the
135
+ origin of the Work and reproducing the content of the NOTICE file.
136
+
137
+ 7. Disclaimer of Warranty. Unless required by applicable law or
138
+ agreed to in writing, Licensor provides the Work (and each
139
+ Contributor provides its Contributions) on an "AS IS" BASIS,
140
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
141
+ implied, including, without limitation, any warranties or conditions
142
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
143
+ PARTICULAR PURPOSE. You are solely responsible for determining the
144
+ appropriateness of using or reproducing the Work and assume any
145
+ risks associated with Your exercise of permissions under this License.
146
+
147
+ 8. Limitation of Liability. In no event and under no legal theory,
148
+ whether in tort (including negligence), contract, or otherwise,
149
+ unless required by applicable law (such as deliberate and grossly
150
+ negligent acts) or agreed to in writing, shall any Contributor be
151
+ liable to You for damages, including any direct, indirect, special,
152
+ incidental, or exemplary damages of any character arising as a
153
+ result of this License or out of the use or inability to use the
154
+ Work (including but not limited to damages for loss of goodwill,
155
+ work stoppage, computer failure or malfunction, or all other
156
+ commercial damages or losses), even if such Contributor has been
157
+ advised of the possibility of such damages.
158
+
159
+ 9. Accepting Warranty or Additional Liability. While redistributing
160
+ the Work or Derivative Works thereof, You may choose to offer,
161
+ and charge a fee for, acceptance of support, warranty, indemnity,
162
+ or other liability obligations and/or rights consistent with this
163
+ License. However, in accepting such obligations, You may offer only
164
+ conditions consistent with this License.
165
+
166
+ END OF TERMS AND CONDITIONS
skill_lint/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+ """skill-lint — Static quality linter for AI agent skill definitions."""
2
+
3
+ __version__ = "0.1.0"