agent-skills 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -0
- data/bake/agent/skills.rb +3 -4
- data/context/getting-started.md +29 -46
- data/context/index.yaml +7 -2
- data/lib/agent/skills/definition.rb +1 -2
- data/lib/agent/skills/installer.rb +9 -10
- data/lib/agent/skills/registry.rb +1 -2
- data/lib/agent/skills/version.rb +3 -3
- data/lib/agent/skills.rb +2 -2
- data/license.md +2 -2
- data/readme.md +38 -2
- data.tar.gz.sig +0 -0
- metadata +34 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b21717e2fd5e723024f9d8e286fea1704a32618bc3ffb159f6b9bb33862b8efc
|
|
4
|
+
data.tar.gz: 87e6b34be5cd83b41596579d6307f7d4cf732f49f232ff73f27f25325e2ca74c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 04e6eb35d7cfa2be064084832e4df1606af54bf28647ef1b3d04a4884833999583409ec6e1c402e60ce669ac7d4ab1f6dc16a8b2717487505ca0daed21195384
|
|
7
|
+
data.tar.gz: 1524dc2694ee37b84804ea334cbc69f2278a0c13b801ddd966eaae3e18b26cbcf88823e96e1f638d76aafa5dc3fe05d47a2d6333e3adca2e9a2bd26c015586ba
|
checksums.yaml.gz.sig
ADDED
data/bake/agent/skills.rb
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright,
|
|
5
|
-
# Copyright, 2025-2026, by Samuel Williams.
|
|
4
|
+
# Copyright, 2026, by Shopify Inc.
|
|
6
5
|
|
|
7
6
|
require_relative "../../lib/agent/skills/installer"
|
|
8
7
|
|
|
@@ -62,7 +61,7 @@ def install(gem: nil)
|
|
|
62
61
|
installed = @installer.install_gem_skills(gem)
|
|
63
62
|
if installed
|
|
64
63
|
puts "Installed #{installed.length} skills from gem '#{gem}':"
|
|
65
|
-
installed.each
|
|
64
|
+
installed.each{|skill_name| puts " #{skill_name}"}
|
|
66
65
|
else
|
|
67
66
|
puts "No skills found for gem '#{gem}'"
|
|
68
67
|
end
|
|
@@ -70,7 +69,7 @@ def install(gem: nil)
|
|
|
70
69
|
installed = @installer.install_all_skills
|
|
71
70
|
if installed.any?
|
|
72
71
|
puts "Installed #{installed.length} skills:"
|
|
73
|
-
installed.each
|
|
72
|
+
installed.each{|skill_name| puts " #{skill_name}"}
|
|
74
73
|
else
|
|
75
74
|
puts "No gems with skills found"
|
|
76
75
|
end
|
data/context/getting-started.md
CHANGED
|
@@ -1,71 +1,54 @@
|
|
|
1
|
-
# Getting Started
|
|
1
|
+
# Getting Started
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`agent-skills` discovers and installs reusable agent skills distributed by Ruby gems.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
-
Add `agent-skills` to the consuming project:
|
|
8
|
-
|
|
9
7
|
```bash
|
|
10
8
|
$ bundle add agent-skills
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
List the skills available from installed gems:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
9
|
$ bundle exec bake agent:skills:list
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Install them into the project:
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
10
|
$ bundle exec bake agent:skills:install
|
|
23
11
|
```
|
|
24
12
|
|
|
25
|
-
##
|
|
13
|
+
## Providing Skills
|
|
26
14
|
|
|
27
|
-
Provider gems
|
|
15
|
+
Provider gems place one or more skill packages beneath a top-level `skills/` directory:
|
|
28
16
|
|
|
29
17
|
```text
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
18
|
+
your-gem/
|
|
19
|
+
├── skills/
|
|
20
|
+
│ └── ruby-testing/
|
|
21
|
+
│ ├── SKILL.md
|
|
22
|
+
│ ├── references/
|
|
23
|
+
│ └── scripts/
|
|
24
|
+
├── lib/
|
|
25
|
+
└── your-gem.gemspec
|
|
36
26
|
```
|
|
37
27
|
|
|
38
|
-
|
|
28
|
+
Each `SKILL.md` starts with YAML frontmatter containing a `name` and `description`. The name must match the directory.
|
|
39
29
|
|
|
40
|
-
|
|
41
|
-
consumer-project/
|
|
42
|
-
└── .agents/
|
|
43
|
-
└── skills/
|
|
44
|
-
├── ruby-testing/
|
|
45
|
-
└── .agent-skills.yaml
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Providing a Skill
|
|
30
|
+
## Installing Skills
|
|
49
31
|
|
|
50
|
-
|
|
32
|
+
Install every discovered skill:
|
|
51
33
|
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
description: Test Ruby changes with the project's configured test framework.
|
|
56
|
-
---
|
|
34
|
+
```bash
|
|
35
|
+
$ bake agent:skills:install
|
|
36
|
+
```
|
|
57
37
|
|
|
58
|
-
|
|
38
|
+
Install from a particular gem:
|
|
59
39
|
|
|
60
|
-
|
|
40
|
+
```bash
|
|
41
|
+
$ bake agent:skills:install --gem sus
|
|
61
42
|
```
|
|
62
43
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
## Installation Ownership
|
|
44
|
+
Installed skills are copied to `.agents/skills/`. An ownership registry prevents dependencies from overwriting project-authored skills or skills supplied by another gem.
|
|
66
45
|
|
|
67
|
-
|
|
46
|
+
## Inspecting Skills
|
|
68
47
|
|
|
69
|
-
|
|
48
|
+
```bash
|
|
49
|
+
$ bake agent:skills:list
|
|
50
|
+
$ bake agent:skills:list --gem sus
|
|
51
|
+
$ bake agent:skills:show --gem sus --skill ruby-testing
|
|
52
|
+
```
|
|
70
53
|
|
|
71
|
-
|
|
54
|
+
Review unfamiliar skills before installing them, especially when they include scripts.
|
data/context/index.yaml
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
# Automatically generated context index for Utopia::Project guides.
|
|
2
|
+
# Do not edit then files in this directory directly, instead edit the guides and then run `bake utopia:project:agent:context:update`.
|
|
1
3
|
---
|
|
2
4
|
description: Install and manage agent skills from Ruby gems.
|
|
3
5
|
metadata:
|
|
6
|
+
bug_tracker_uri: https://github.com/socketry/agent-skills/issues
|
|
7
|
+
changelog_uri: https://github.com/socketry/agent-skills/blob/main/releases.md
|
|
4
8
|
documentation_uri: https://socketry.github.io/agent-skills/
|
|
5
9
|
funding_uri: https://github.com/sponsors/ioquatix/
|
|
6
10
|
source_code_uri: https://github.com/socketry/agent-skills.git
|
|
7
11
|
files:
|
|
8
12
|
- path: getting-started.md
|
|
9
|
-
title: Getting Started
|
|
10
|
-
description:
|
|
13
|
+
title: Getting Started
|
|
14
|
+
description: "`agent-skills` discovers and installs reusable agent skills distributed
|
|
15
|
+
by Ruby gems."
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright,
|
|
5
|
-
# Copyright, 2025-2026, by Samuel Williams.
|
|
4
|
+
# Copyright, 2026, by Shopify Inc.
|
|
6
5
|
|
|
7
6
|
require "fileutils"
|
|
8
7
|
require "rubygems"
|
|
@@ -59,7 +58,7 @@ module Agent
|
|
|
59
58
|
#
|
|
60
59
|
# @parameter gem_name [String] The gem name to find.
|
|
61
60
|
def find_gem_with_skills(gem_name)
|
|
62
|
-
specification = @specifications.find
|
|
61
|
+
specification = @specifications.find{|candidate| candidate.name == gem_name}
|
|
63
62
|
return unless specification
|
|
64
63
|
|
|
65
64
|
build_gem_information(specification)
|
|
@@ -81,7 +80,7 @@ module Agent
|
|
|
81
80
|
skills = list_skills(gem_name)
|
|
82
81
|
return unless skills
|
|
83
82
|
|
|
84
|
-
definition = skills.find
|
|
83
|
+
definition = skills.find{|skill| skill.name == skill_name}
|
|
85
84
|
File.read(definition.skill_file) if definition
|
|
86
85
|
end
|
|
87
86
|
|
|
@@ -180,13 +179,13 @@ module Agent
|
|
|
180
179
|
end
|
|
181
180
|
|
|
182
181
|
def install_gems(gems)
|
|
183
|
-
definitions = gems.flat_map
|
|
182
|
+
definitions = gems.flat_map{|gem| gem[:skills]}
|
|
184
183
|
return [] if definitions.empty?
|
|
185
184
|
|
|
186
185
|
validate_unique_skills(definitions)
|
|
187
186
|
|
|
188
187
|
registry = Registry.new(File.join(@skills_path, Registry::FILE_NAME))
|
|
189
|
-
definitions.each
|
|
188
|
+
definitions.each{|definition| validate_destination(definition, registry)}
|
|
190
189
|
|
|
191
190
|
stale_skills = gems.flat_map do |gem|
|
|
192
191
|
current_names = gem[:skills].map(&:name)
|
|
@@ -196,17 +195,17 @@ module Agent
|
|
|
196
195
|
definitions.each do |definition|
|
|
197
196
|
registry.claim(definition.name, definition.provider_name, definition.provider_version)
|
|
198
197
|
end
|
|
199
|
-
stale_skills.each
|
|
198
|
+
stale_skills.each{|skill_name| registry.release(skill_name)}
|
|
200
199
|
registry.save
|
|
201
200
|
|
|
202
|
-
definitions.each
|
|
203
|
-
stale_skills.each
|
|
201
|
+
definitions.each{|definition| copy_skill(definition)}
|
|
202
|
+
stale_skills.each{|skill_name| remove_skill(skill_name)}
|
|
204
203
|
|
|
205
204
|
definitions.map(&:name)
|
|
206
205
|
end
|
|
207
206
|
|
|
208
207
|
def validate_unique_skills(definitions)
|
|
209
|
-
duplicates = definitions.group_by(&:name).select
|
|
208
|
+
duplicates = definitions.group_by(&:name).select{|_name, matches| matches.length > 1}
|
|
210
209
|
return if duplicates.empty?
|
|
211
210
|
|
|
212
211
|
details = duplicates.map do |name, matches|
|
data/lib/agent/skills/version.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright,
|
|
5
|
-
# Copyright,
|
|
4
|
+
# Copyright, 2026, by Shopify Inc.
|
|
5
|
+
# Copyright, 2026, by Samuel Williams.
|
|
6
6
|
|
|
7
7
|
module Agent
|
|
8
8
|
module Skills
|
|
9
|
-
VERSION = "0.0.
|
|
9
|
+
VERSION = "0.0.3"
|
|
10
10
|
end
|
|
11
11
|
end
|
data/lib/agent/skills.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# Released under the MIT License.
|
|
4
|
-
# Copyright,
|
|
5
|
-
# Copyright,
|
|
4
|
+
# Copyright, 2026, by Shopify Inc.
|
|
5
|
+
# Copyright, 2026, by Samuel Williams.
|
|
6
6
|
|
|
7
7
|
require_relative "skills/version"
|
|
8
8
|
require_relative "skills/definition"
|
data/license.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# MIT License
|
|
2
2
|
|
|
3
|
-
Copyright,
|
|
4
|
-
Copyright,
|
|
3
|
+
Copyright, 2026, by Shopify Inc.
|
|
4
|
+
Copyright, 2026, by Samuel Williams.
|
|
5
5
|
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
7
|
of this software and associated documentation files (the "Software"), to deal
|
data/readme.md
CHANGED
|
@@ -103,10 +103,46 @@ bake agent:skills:install --gem sus
|
|
|
103
103
|
|
|
104
104
|
This gem provides contextual documentation in `context/` for use with [`agent-context`](https://github.com/socketry/agent-context).
|
|
105
105
|
|
|
106
|
+
## Releases
|
|
107
|
+
|
|
108
|
+
Please see the [project releases](https://socketry.github.io/agent-skills/releases/index) for all releases.
|
|
109
|
+
|
|
110
|
+
### v0.0.0
|
|
111
|
+
|
|
112
|
+
- Initial release.
|
|
113
|
+
- Discover and validate skills provided by Ruby gems.
|
|
114
|
+
- Install project-scoped skills with ownership and collision protection.
|
|
115
|
+
|
|
106
116
|
## Contributing
|
|
107
117
|
|
|
108
|
-
We welcome contributions
|
|
118
|
+
We welcome contributions to this project.
|
|
119
|
+
|
|
120
|
+
1. Fork the repository.
|
|
121
|
+
2. Create your feature branch (`git checkout -b my-new-feature`).
|
|
122
|
+
3. Commit your changes (`git commit -am 'Add some feature.'`).
|
|
123
|
+
4. Push to the branch (`git push origin my-new-feature`).
|
|
124
|
+
5. Create a new pull request.
|
|
125
|
+
|
|
126
|
+
### Running Tests
|
|
127
|
+
|
|
128
|
+
To run the test suite:
|
|
129
|
+
|
|
130
|
+
``` bash
|
|
131
|
+
$ bundle exec sus
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Making Releases
|
|
135
|
+
|
|
136
|
+
To make a new release:
|
|
137
|
+
|
|
138
|
+
``` bash
|
|
139
|
+
$ bundle exec bake gem:release:patch # or minor or major
|
|
140
|
+
```
|
|
109
141
|
|
|
110
142
|
### Developer Certificate of Origin
|
|
111
143
|
|
|
112
|
-
|
|
144
|
+
In order to protect users of this project, we require all contributors to comply with the [Developer Certificate of Origin](https://developercertificate.org/). This ensures that all contributions are properly licensed and attributed.
|
|
145
|
+
|
|
146
|
+
### Community Guidelines
|
|
147
|
+
|
|
148
|
+
This project is best served by a collaborative and respectful environment. Treat each other professionally, respect differing viewpoints, and engage constructively. Harassment, discrimination, or harmful behavior is not tolerated. Communicate clearly, listen actively, and support one another. If any issues arise, please inform the project maintainers.
|
data.tar.gz.sig
ADDED
|
Binary file
|
metadata
CHANGED
|
@@ -1,13 +1,42 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: agent-skills
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Samuel Williams
|
|
8
8
|
- Shopify Inc.
|
|
9
9
|
bindir: bin
|
|
10
|
-
cert_chain:
|
|
10
|
+
cert_chain:
|
|
11
|
+
- |
|
|
12
|
+
-----BEGIN CERTIFICATE-----
|
|
13
|
+
MIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11
|
|
14
|
+
ZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK
|
|
15
|
+
CZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz
|
|
16
|
+
MjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd
|
|
17
|
+
MBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj
|
|
18
|
+
bzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
|
|
19
|
+
igKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2
|
|
20
|
+
9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW
|
|
21
|
+
sGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE
|
|
22
|
+
e5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN
|
|
23
|
+
XibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss
|
|
24
|
+
RZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn
|
|
25
|
+
tUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM
|
|
26
|
+
zp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW
|
|
27
|
+
xm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
|
|
28
|
+
BBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs
|
|
29
|
+
aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs
|
|
30
|
+
aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE
|
|
31
|
+
cBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl
|
|
32
|
+
xCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/
|
|
33
|
+
c1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp
|
|
34
|
+
8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws
|
|
35
|
+
JkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP
|
|
36
|
+
eX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt
|
|
37
|
+
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
|
38
|
+
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
|
39
|
+
-----END CERTIFICATE-----
|
|
11
40
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
41
|
dependencies:
|
|
13
42
|
- !ruby/object:Gem::Dependency
|
|
@@ -44,6 +73,8 @@ homepage: https://github.com/socketry/agent-skills
|
|
|
44
73
|
licenses:
|
|
45
74
|
- MIT
|
|
46
75
|
metadata:
|
|
76
|
+
bug_tracker_uri: https://github.com/socketry/agent-skills/issues
|
|
77
|
+
changelog_uri: https://github.com/socketry/agent-skills/blob/main/releases.md
|
|
47
78
|
documentation_uri: https://socketry.github.io/agent-skills/
|
|
48
79
|
funding_uri: https://github.com/sponsors/ioquatix/
|
|
49
80
|
source_code_uri: https://github.com/socketry/agent-skills.git
|
|
@@ -54,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
54
85
|
requirements:
|
|
55
86
|
- - ">="
|
|
56
87
|
- !ruby/object:Gem::Version
|
|
57
|
-
version: '3.
|
|
88
|
+
version: '3.3'
|
|
58
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
90
|
requirements:
|
|
60
91
|
- - ">="
|
metadata.gz.sig
ADDED
|
Binary file
|