@gallopsystems/agent-skills 1.10.0 → 1.11.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/README.md
CHANGED
|
@@ -44,10 +44,17 @@ yarn add -D @gallopsystems/agent-skills
|
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
On install, a `postinstall` script symlinks the package's content into the
|
|
47
|
-
project
|
|
47
|
+
project, for both Claude Code and Codex:
|
|
48
48
|
|
|
49
49
|
- **skills** — each directory containing a `SKILL.md` → `.claude/skills/<name>`
|
|
50
|
-
|
|
50
|
+
(Claude Code) **and** `.agents/skills/<name>` (Codex). The `SKILL.md` format is
|
|
51
|
+
identical for both agents, so each skill dir is linked verbatim. Everything ships
|
|
52
|
+
as a skill: in current Claude Code a skill is both slash-invocable (`/<name>`) and
|
|
53
|
+
model-invocable, so `contribute-skill`, for example, gives you `/contribute-skill`
|
|
54
|
+
*and* gets auto-offered when relevant — no separate command needed.
|
|
55
|
+
- **commands** — each `.md` file under any `commands/` directory →
|
|
56
|
+
`.claude/commands/<name>.md` (Claude only; Codex has no project command dir). Kept
|
|
57
|
+
for legacy/Claude-only commands; this package ships none today.
|
|
51
58
|
|
|
52
59
|
Updating is just a version bump:
|
|
53
60
|
|
|
@@ -61,12 +68,13 @@ recreated on every install), so ignore them in `.gitignore`:
|
|
|
61
68
|
```
|
|
62
69
|
.claude/skills
|
|
63
70
|
.claude/commands
|
|
71
|
+
.agents/skills
|
|
64
72
|
```
|
|
65
73
|
|
|
66
74
|
Notes:
|
|
67
|
-
- The script never clobbers a real `.claude/skills/<name
|
|
68
|
-
you authored, and only removes symlinks it created.
|
|
69
|
-
remove all managed links.
|
|
75
|
+
- The script never clobbers a real `.claude/skills/<name>`, `.agents/skills/<name>`,
|
|
76
|
+
or `.claude/commands/<name>` you authored, and only removes symlinks it created.
|
|
77
|
+
Run `yarn unlink-skills` to remove all managed links.
|
|
70
78
|
- Works out of the box with Yarn (Classic, or Berry with `nodeLinker: node-modules`)
|
|
71
79
|
and npm. **pnpm** (v10+) blocks dependency build scripts by default — add the
|
|
72
80
|
package to `pnpm.onlyBuiltDependencies` for the `postinstall` to run.
|
|
@@ -163,8 +171,8 @@ Covers:
|
|
|
163
171
|
|
|
164
172
|
Every skill ends with a **Contributing Back** section: when Claude works through
|
|
165
173
|
something the skill didn't cover, it offers to contribute the lesson upstream. The
|
|
166
|
-
|
|
167
|
-
|
|
174
|
+
`contribute-skill` skill (run `/contribute-skill` on Claude Code, or let either agent
|
|
175
|
+
invoke it when relevant) automates the flow: distill the generic lesson,
|
|
168
176
|
privacy-sweep it, clone or fork this repo, and open a PR against the right skill
|
|
169
177
|
file. PRs from forks are welcome — content must be generic (placeholders only, no
|
|
170
178
|
project-specific names, IDs, or domains).
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gallopsystems/agent-skills",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Gallop Systems
|
|
3
|
+
"version": "1.11.0",
|
|
4
|
+
"description": "Gallop Systems agent skills, symlinked into .claude/skills (Claude Code) and .agents/skills (Codex) on install.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "contribute-skill",
|
|
3
|
+
"description": "Contribute a lesson learned this session back to the gallop-systems/agent-skills repo as a PR: distill the generic rule, privacy-sweep it, and open a PR against the right skill.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "yeedle"
|
|
7
|
+
}
|
|
8
|
+
}
|
package/{commands/contribute-skill.md → plugins/contribute-skill/skills/contribute-skill/SKILL.md}
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
name: contribute-skill
|
|
3
|
+
description: Contribute a lesson learned this session back to the gallop-systems/agent-skills repo as a PR. Use when capturing an error→fix, a behavior that contradicted a skill, or a workflow gap the skill didn't cover, and turning it into a generic, public-safe addition to an installed skill.
|
|
3
4
|
argument-hint: [which skill and/or what lesson]
|
|
4
5
|
---
|
|
5
6
|
|
package/scripts/link-skills.mjs
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// Postinstall: symlink this package's skills and commands into the consuming
|
|
3
|
-
// project
|
|
4
|
-
//
|
|
2
|
+
// Postinstall: symlink this package's skills (and any commands) into the consuming
|
|
3
|
+
// project, so a `yarn add` / `yarn install` keeps the project in sync with this
|
|
4
|
+
// package's version:
|
|
5
5
|
//
|
|
6
|
-
// skills -> .claude/skills/<name> (a dir
|
|
7
|
-
//
|
|
6
|
+
// skills -> .claude/skills/<name> (Claude Code; a dir with SKILL.md)
|
|
7
|
+
// skills -> .agents/skills/<name> (Codex; same SKILL.md format)
|
|
8
|
+
// commands -> .claude/commands/<rel>.md (Claude Code only; a .md under commands/)
|
|
9
|
+
//
|
|
10
|
+
// The SKILL.md format (name + description frontmatter, no nesting) is identical
|
|
11
|
+
// across Claude and Codex, so skill dirs are linked verbatim into both roots. In
|
|
12
|
+
// current Claude Code, custom commands were merged into skills: a skill is itself
|
|
13
|
+
// slash-invocable (`/<name>`) AND model-invocable, so it fully covers what a command
|
|
14
|
+
// did. We therefore ship workflows as skills, not commands. The commands/ path is
|
|
15
|
+
// still honored for any legacy Claude-only command, but Codex has no project command
|
|
16
|
+
// dir, so commands are never linked there.
|
|
8
17
|
//
|
|
9
18
|
// This runs during `yarn install`, so it MUST NOT throw — a thrown error aborts
|
|
10
19
|
// the whole install. Every failure path here degrades to a warning + exit 0.
|
|
@@ -229,20 +238,27 @@ function main() {
|
|
|
229
238
|
return
|
|
230
239
|
}
|
|
231
240
|
|
|
232
|
-
const
|
|
233
|
-
const
|
|
241
|
+
const claudeSkillsRoot = path.join(projectRoot, '.claude', 'skills') // Claude Code
|
|
242
|
+
const codexSkillsRoot = path.join(projectRoot, '.agents', 'skills') // Codex
|
|
243
|
+
const commandsRoot = path.join(projectRoot, '.claude', 'commands') // Claude Code only
|
|
234
244
|
|
|
235
245
|
if (UNLINK) {
|
|
236
|
-
for (const root of [
|
|
246
|
+
for (const root of [claudeSkillsRoot, codexSkillsRoot, commandsRoot]) {
|
|
237
247
|
if (fs.existsSync(root)) removeStaleLinks(realOrSelf(root), new Set())
|
|
238
248
|
}
|
|
239
|
-
log('removed managed symlinks from .claude/
|
|
249
|
+
log('removed managed symlinks from .claude/ and .agents/.')
|
|
240
250
|
return
|
|
241
251
|
}
|
|
242
252
|
|
|
243
|
-
const
|
|
253
|
+
const skillSources = collectSkills(PKG_DIR)
|
|
254
|
+
const skills = linkInto(claudeSkillsRoot, skillSources, 'skills')
|
|
255
|
+
linkInto(codexSkillsRoot, skillSources, 'skills')
|
|
244
256
|
const commands = linkInto(commandsRoot, collectCommands(PKG_DIR), 'commands')
|
|
245
|
-
log(
|
|
257
|
+
log(
|
|
258
|
+
`linked ${skills} skill${skills === 1 ? '' : 's'} (.claude + .agents)` +
|
|
259
|
+
(commands ? ` and ${commands} command${commands === 1 ? '' : 's'} (.claude)` : '') +
|
|
260
|
+
'.',
|
|
261
|
+
)
|
|
246
262
|
}
|
|
247
263
|
|
|
248
264
|
try {
|