Skip to content

Commit db66971

Browse files
committed
Rename package and add compatibility checks
1 parent 4a4ebb3 commit db66971

15 files changed

Lines changed: 284 additions & 44 deletions

File tree

README.md

Lines changed: 51 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1-
# Codex SkillForge
1+
# Agent SkillForge
22

33
[![CI](https://github.com/f0d010c/skillforge/actions/workflows/ci.yml/badge.svg)](https://github.com/f0d010c/skillforge/actions/workflows/ci.yml)
4-
[![npm version](https://img.shields.io/npm/v/codex-skillforge.svg)](https://www.npmjs.com/package/codex-skillforge)
4+
[![npm version](https://img.shields.io/npm/v/agent-skillforge.svg)](https://www.npmjs.com/package/agent-skillforge)
55
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
66

7-
**ESLint for Codex skills and plugins.**
7+
**ESLint for agent skills and plugins.**
88

9-
SkillForge helps Codex extension authors scaffold, lint, smoke-test, inspect, and package skills/plugins before they publish or submit them to a marketplace.
9+
SkillForge helps agent extension authors scaffold, lint, smoke-test, inspect, and package skills/plugins before they publish or submit them to a marketplace.
10+
11+
Codex is the first-class target today. Portable skill compatibility for Claude-style skills and cross-agent packages is now starting with `skillforge compat`.
1012

1113
Listed in [awesome-codex-plugins](https://github.com/hashgraph-online/awesome-codex-plugins) under "Validate Before You Ship."
1214

1315
```bash
14-
npx codex-skillforge lint .
16+
npx agent-skillforge lint .
1517
```
1618

1719
Example output:
@@ -25,19 +27,20 @@ SkillForge plugin lint found 3 issue(s) (2 blocking, 1 advisory) [source]:
2527

2628
## Why This Exists
2729

28-
Codex skills and plugins are small, powerful folders. They are also easy to get subtly wrong:
30+
Agent skills and plugins are small, powerful folders. They are also easy to get subtly wrong:
2931

3032
- weak skill descriptions that Codex will not trigger well
3133
- stale `agents/openai.yaml` shapes
3234
- plugin paths that are not `./`-relative
3335
- missing bundled skills, hooks, MCP, app, or asset files
34-
- plugins that work locally but are not marketplace-ready
36+
- packages that work locally but are not marketplace-ready
37+
- skills that claim cross-agent compatibility but still contain agent-specific assumptions
3538

36-
SkillForge is not a marketplace. It is the publish-readiness check you run before sharing a Codex skill/plugin repo.
39+
SkillForge is not a marketplace. It is the publish-readiness check you run before sharing an agent skill/plugin repo.
3740

3841
## Security Model
3942

40-
SkillForge is a CLI linter, not a Codex runtime plugin. Running `lint`, `doctor`, and `smoke` reads local files and reports issues; it does not install skills, load plugins into Codex, or execute scripts from the target project.
43+
SkillForge is a CLI linter, not an agent runtime plugin. Running `lint`, `compat`, `doctor`, and `smoke` reads local files and reports issues; it does not install skills, load plugins into Codex, or execute scripts from the target project.
4144

4245
Commands that write files are explicit:
4346

@@ -47,32 +50,34 @@ Commands that write files are explicit:
4750
For cautious use, pin the npm version, review the source, and start with read-only commands:
4851

4952
```bash
50-
npx codex-skillforge@0.2.0 lint .
51-
npx codex-skillforge@0.2.0 smoke ./path/to/skill
53+
npx agent-skillforge@0.3.0 lint .
54+
npx agent-skillforge@0.3.0 compat . --target portable
5255
```
5356

5457
## Install
5558

5659
Run with npm:
5760

5861
```bash
59-
npx codex-skillforge lint .
62+
npx agent-skillforge lint .
6063
```
6164

6265
Or install it in a project:
6366

6467
```bash
65-
npm install --save-dev codex-skillforge
68+
npm install --save-dev agent-skillforge
6669
npx skillforge lint .
6770
```
6871

6972
After installing, you can use the shorter aliases:
7073

7174
```bash
7275
skillforge lint .
73-
csf lint .
76+
asf lint .
7477
```
7578

79+
The old `codex-skillforge` binary remains available as a compatibility alias.
80+
7681
## Demo
7782

7883
See a tiny working example repo:
@@ -94,32 +99,33 @@ The `examples/real-world-cases/` folder contains tiny, intentionally flawed exam
9499
Try them:
95100

96101
```bash
97-
npx codex-skillforge lint examples/real-world-cases/missing-mcp-server-file
98-
npx codex-skillforge lint examples/real-world-cases/stale-skill-reference
99-
npx codex-skillforge lint examples/real-world-cases/weak-trigger-description --strict
102+
npx agent-skillforge lint examples/real-world-cases/missing-mcp-server-file
103+
npx agent-skillforge lint examples/real-world-cases/stale-skill-reference
104+
npx agent-skillforge lint examples/real-world-cases/weak-trigger-description --strict
100105
```
101106

102107
## Quick Start
103108

104109
Create and check a new skill:
105110

106111
```bash
107-
npx codex-skillforge init skill ./my-skill --name my-skill
108-
npx codex-skillforge lint ./my-skill
109-
npx codex-skillforge smoke ./my-skill
110-
npx codex-skillforge pack ./my-skill
112+
npx agent-skillforge init skill ./my-skill --name my-skill
113+
npx agent-skillforge lint ./my-skill
114+
npx agent-skillforge smoke ./my-skill
115+
npx agent-skillforge pack ./my-skill
111116
```
112117

113118
Check an existing Codex extension repo:
114119

115120
```bash
116-
npx codex-skillforge lint .
121+
npx agent-skillforge lint .
117122
```
118123

119124
If SkillForge is installed globally or in your project, the same workflow is shorter:
120125

121126
```bash
122127
skillforge lint .
128+
skillforge compat . --target portable
123129
skillforge smoke ./my-skill
124130
skillforge pack ./my-skill
125131
```
@@ -138,6 +144,7 @@ skillforge lint ./my-plugin --profile marketplace
138144
skillforge lint ./my-skill --strict
139145

140146
skillforge lint .
147+
skillforge compat . --target portable
141148
skillforge doctor .
142149
skillforge smoke ./my-skill
143150
skillforge pack ./my-plugin
@@ -147,6 +154,24 @@ skillforge pack ./my-plugin
147154

148155
Default lint mode focuses on deterministic publish-readiness problems. Use `--strict` to include advisory checks such as trigger-description quality, large skill bodies, unreferenced scripts, and plugin name/folder mismatch.
149156

157+
## Compatibility
158+
159+
Use `compat` to check whether a skill/package is likely to work in a specific agent ecosystem.
160+
161+
```bash
162+
skillforge compat . --target codex
163+
skillforge compat . --target claude
164+
skillforge compat . --target portable
165+
```
166+
167+
`codex` runs Codex-oriented lint checks.
168+
169+
`claude` checks the shared `SKILL.md` basics expected by Claude-style skills.
170+
171+
`portable` combines both and adds warnings for agent-specific wording, `.claude/`, `.codex/`, `.agents/`, and obvious OS-specific script assumptions.
172+
173+
This is an analysis command, not an auto-converter.
174+
150175
## Profiles
151176

152177
Use profiles to match where the plugin is being checked:
@@ -178,7 +203,7 @@ on:
178203
branches: [main]
179204

180205
jobs:
181-
lint-codex-extensions:
206+
lint-agent-extensions:
182207
runs-on: ubuntu-latest
183208
steps:
184209
- uses: actions/checkout@v4
@@ -281,7 +306,7 @@ Verify from a clean directory after npm publish:
281306
```bash
282307
mkdir skillforge-smoke
283308
cd skillforge-smoke
284-
npx codex-skillforge --version
285-
npx codex-skillforge init skill ./demo-skill --name demo-skill
286-
npx codex-skillforge lint ./demo-skill
309+
npx agent-skillforge --version
310+
npx agent-skillforge init skill ./demo-skill --name demo-skill
311+
npx agent-skillforge lint ./demo-skill
287312
```

action.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
name: "Codex SkillForge"
2-
description: "Lint Codex skills and plugins in CI."
1+
name: "Agent SkillForge"
2+
description: "Lint agent skills and plugins in CI."
33
author: "f0d010c"
44

55
inputs:

docs/example-pr.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This runs the Codex skill/plugin files through SkillForge and fixes a few publis
1111
## Validation
1212

1313
```bash
14-
npx codex-skillforge lint .
14+
npx agent-skillforge lint .
1515
```
1616

1717
## Notes

docs/launch.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Codex extensions are easy to package incorrectly: vague `SKILL.md` triggers, bro
1313
SkillForge gives authors a quick publish-readiness check:
1414

1515
```bash
16-
npx codex-skillforge lint .
16+
npx agent-skillforge lint .
1717
```
1818

1919
It also scaffolds skills/plugins, smoke-tests declared example prompts, and packs release artifacts with install notes.

docs/real-world-scan.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ With the v0.1.1 rule set:
1313
- Default mode reported 239 findings: 221 errors and 18 warnings.
1414
- Strict mode reported 874 findings: 221 errors and 653 warnings.
1515

16-
Default mode now focuses on higher-confidence publish-readiness problems. Strict mode includes advisory checks such as trigger-description quality, large skill bodies, unreferenced scripts, and plugin folder/name mismatch.
16+
Default mode now focuses on deterministic publish-readiness problems. Strict mode includes advisory checks such as trigger-description quality, large skill bodies, unreferenced scripts, and plugin folder/name mismatch.
1717

1818
## Most Common Default Findings
1919

@@ -40,7 +40,7 @@ The initial scan showed that some checks were too noisy for default CI usage. In
4040

4141
- `--strict` was added for advisory checks.
4242
- Default mode became lower-noise.
43-
- Findings gained confidence metadata.
43+
- Later releases replaced confidence metadata with deterministic `blocking` and `advisory` impact labels.
4444
- `reference.missing` was tightened so placeholder words and external URLs are not treated as missing files.
4545
- A regression fixture was added for reference-noise cases.
4646

package-lock.json

Lines changed: 6 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
{
2-
"name": "codex-skillforge",
3-
"version": "0.2.0",
4-
"description": "Creator tooling for OpenAI Codex skills and plugins.",
2+
"name": "agent-skillforge",
3+
"version": "0.3.0",
4+
"description": "Creator tooling for agent skills and plugins.",
55
"type": "module",
66
"bin": {
7+
"agent-skillforge": "dist/cli.js",
78
"codex-skillforge": "dist/cli.js",
89
"skillforge": "dist/cli.js",
10+
"asf": "dist/cli.js",
911
"csf": "dist/cli.js"
1012
},
1113
"files": [
@@ -48,7 +50,9 @@
4850
"node": ">=20"
4951
},
5052
"keywords": [
53+
"agent-skills",
5154
"codex",
55+
"claude-code",
5256
"openai",
5357
"skills",
5458
"plugins",

src/cli.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ import { lintCommand } from "./commands/lint.js";
55
import { doctorCommand } from "./commands/doctor.js";
66
import { packCommand } from "./commands/pack.js";
77
import { smokeCommand } from "./commands/smoke.js";
8+
import { compatCommand, type CompatFormat, type CompatTarget } from "./commands/compat.js";
89
import type { ReportFormat } from "./lib/reporters.js";
910
import type { LintProfile } from "./types.js";
1011

1112
const program = new Command();
1213

1314
program
14-
.name("codex-skillforge")
15-
.description("Creator tooling for OpenAI Codex skills and plugins.")
16-
.version("0.2.0")
15+
.name("agent-skillforge")
16+
.description("Creator tooling for agent skills and plugins.")
17+
.version("0.3.0")
1718
.exitOverride();
1819

1920
program
@@ -66,6 +67,17 @@ program
6667
process.exitCode = result.exitCode;
6768
});
6869

70+
program
71+
.command("compat")
72+
.argument("[path]", "skill or plugin path", ".")
73+
.option("--target <target>", "codex, claude, or portable", parseCompatTarget, "portable")
74+
.option("-f, --format <format>", "text or json", parseCompatFormat, "text")
75+
.action(async (targetPath: string, options: { target: CompatTarget; format: CompatFormat }) => {
76+
const result = await compatCommand(targetPath, options.target, options.format);
77+
console.log(result.output);
78+
process.exitCode = result.exitCode;
79+
});
80+
6981
try {
7082
await program.parseAsync(process.argv);
7183
} catch (error) {
@@ -100,3 +112,17 @@ function parseProfile(value: string): LintProfile {
100112
}
101113
throw new InvalidArgumentError("profile must be 'source' or 'marketplace'");
102114
}
115+
116+
function parseCompatTarget(value: string): CompatTarget {
117+
if (value === "codex" || value === "claude" || value === "portable") {
118+
return value;
119+
}
120+
throw new InvalidArgumentError("target must be 'codex', 'claude', or 'portable'");
121+
}
122+
123+
function parseCompatFormat(value: string): CompatFormat {
124+
if (value === "text" || value === "json") {
125+
return value;
126+
}
127+
throw new InvalidArgumentError("format must be 'text' or 'json'");
128+
}

0 commit comments

Comments
 (0)