skilld-harness 3.3.0 → 3.4.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.
|
@@ -93,6 +93,22 @@ Good: `Add and debug Schema.org JSON-LD in Nuxt with nuxt-schema-org. Use when a
|
|
|
93
93
|
|
|
94
94
|
## 4. Check and report
|
|
95
95
|
|
|
96
|
+
### Cross-Agent portability
|
|
97
|
+
|
|
98
|
+
Keep one source Skill for compatible Agents. Keep their discovery paths outside the generated Skill.
|
|
99
|
+
Use capability descriptions instead of provider-specific tool names.
|
|
100
|
+
Ask for inputs explicitly; do not depend on `$ARGUMENTS`, hooks, or dynamic context injection.
|
|
101
|
+
Resolve bundled files from the Skill directory and consumer commands from the consumer project root.
|
|
102
|
+
Name script runtimes, binaries, network access, and credential requirements beside their use.
|
|
103
|
+
If a required capability is unavailable, report it and stop that dependent step.
|
|
104
|
+
Never invent evidence or silently skip a required check.
|
|
105
|
+
|
|
106
|
+
Check a matching task, an unrelated task, and a missing-input task.
|
|
107
|
+
When available, use a fresh session in each Agent the user asks to support.
|
|
108
|
+
Record its version, model, task, output, and required permissions.
|
|
109
|
+
Distinguish format validation, discovery, activation, and task completion.
|
|
110
|
+
Report unavailable Agent paths untested. Package example checks do not prove cross-Agent execution.
|
|
111
|
+
|
|
96
112
|
Before finishing, confirm:
|
|
97
113
|
|
|
98
114
|
- Each example ran against the recorded version, or is reported untested.
|
|
@@ -59,6 +59,26 @@ The `SKILL.md` frontmatter must contain only `name` and `description`.
|
|
|
59
59
|
Use lowercase letters, numbers, and single hyphens in the name.
|
|
60
60
|
Keep the name at 64 characters or fewer.
|
|
61
61
|
|
|
62
|
+
## Cross-Agent portability
|
|
63
|
+
|
|
64
|
+
Keep one source Skill for Claude Code, Codex, Gemini CLI, and other compatible Agents.
|
|
65
|
+
Their discovery paths differ. Keep installation instructions outside the generated Skill.
|
|
66
|
+
The [Agent Skills specification](https://agentskills.io/specification) defines the shared format.
|
|
67
|
+
|
|
68
|
+
- Describe capabilities, such as reading files or running a command, instead of provider-specific tool names.
|
|
69
|
+
- Ask for inputs explicitly. Do not require `$ARGUMENTS`, dynamic context injection, hooks, or a specific subagent API.
|
|
70
|
+
- State the project root as the working directory for project commands.
|
|
71
|
+
Resolve bundled references and scripts from the Skill directory instead.
|
|
72
|
+
- Name required runtimes, binaries, network access, and credentials beside the step that needs them.
|
|
73
|
+
- If a required capability is unavailable, report the missing capability and stop that dependent step.
|
|
74
|
+
Never invent evidence or silently skip a required check.
|
|
75
|
+
|
|
76
|
+
Check one matching task, one unrelated task, and one missing-input task.
|
|
77
|
+
Use a fresh session for each Agent the user asks to support when those Agents are available.
|
|
78
|
+
Record the Agent version, model, task, observed output, and any required permission.
|
|
79
|
+
Separate format validation, discovery, activation, and task completion in the report.
|
|
80
|
+
If an Agent is unavailable, report that path untested. Valid frontmatter alone does not prove portability.
|
|
81
|
+
|
|
62
82
|
## Quality checks
|
|
63
83
|
|
|
64
84
|
- Describe when the Skill applies.
|
|
@@ -14,7 +14,8 @@ Run a Skill first. Install a Skill only when the user asks to keep it.
|
|
|
14
14
|
Use `--json` with `search`, `run`, and `update --check`.
|
|
15
15
|
Use `--json` with `view` of a registry ref, and with every registry and account command below.
|
|
16
16
|
Their `data` is the skilld.dev answer. A command whose answer has no body returns `data: null`.
|
|
17
|
-
|
|
17
|
+
Use `--json` with `sync --check` for declared Skills.
|
|
18
|
+
The remaining commands do not support JSON output.
|
|
18
19
|
Use `--plain` when another command needs stable text.
|
|
19
20
|
|
|
20
21
|
Check the exit code before reading stdout.
|
|
@@ -26,6 +27,21 @@ An update check can exit with code 1 and return valid JSON.
|
|
|
26
27
|
Read its update relations before treating that exit as a failure.
|
|
27
28
|
Never parse formatted terminal output.
|
|
28
29
|
|
|
30
|
+
## Sync declared Skills
|
|
31
|
+
|
|
32
|
+
Read [Declared Skills](references/declared-skills.md) when a project needs explicit Skill requirements.
|
|
33
|
+
Use `.skills/skilld.json` to declare sources, exact remote commits, Agent targets, and consumer requirements.
|
|
34
|
+
Run `skilld sync --check --json` to find differences without installing or fetching remote bytes.
|
|
35
|
+
Exit code `1` with success data means sync is needed.
|
|
36
|
+
Run `skilld sync` to install the full declaration in one transaction.
|
|
37
|
+
Use `--global` for global Agent targets.
|
|
38
|
+
Use `--adopt` only when migrating identical unmanaged symlinks.
|
|
39
|
+
Changed unmanaged targets block sync.
|
|
40
|
+
Required Skills cannot be removed until their declaration releases the requirement.
|
|
41
|
+
|
|
42
|
+
For browser-controlled account login, use `skilld auth login --no-browser --plain`.
|
|
43
|
+
Open the printed URL in the intended signed-in browser while the command waits.
|
|
44
|
+
|
|
29
45
|
## Search for a Skill
|
|
30
46
|
|
|
31
47
|
Run a focused search:
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Declared Skills
|
|
2
|
+
|
|
3
|
+
Use `.skills/skilld.json` when a project needs Skills on explicit Agent targets.
|
|
4
|
+
Run `skilld sync` to install the declaration.
|
|
5
|
+
Run `skilld sync --check --json` to check without installing or fetching remote bytes.
|
|
6
|
+
Exit code `1` with success data means the declaration needs sync.
|
|
7
|
+
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"version": 1,
|
|
11
|
+
"name": "my-project",
|
|
12
|
+
"agents": ["codex", "claude-code", "opencode"],
|
|
13
|
+
"mode": "symlink",
|
|
14
|
+
"skills": {
|
|
15
|
+
"write-human": {
|
|
16
|
+
"source": "github:owner/repository/skills/write-human#commit:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
17
|
+
},
|
|
18
|
+
"local-review": { "source": "../skills/local-review" }
|
|
19
|
+
},
|
|
20
|
+
"requires": { "pr": ["write-human", "local-review"] }
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Replace the example commit with the exact source commit.
|
|
25
|
+
Remote sources use verified hosted Artifact delivery.
|
|
26
|
+
Private sources need a skilld account and access through the skilld GitHub App.
|
|
27
|
+
There is no direct GitHub fallback.
|
|
28
|
+
|
|
29
|
+
Local sources resolve relative to the declaration file.
|
|
30
|
+
The source directory must match the declared Skill name.
|
|
31
|
+
Sync copies local bytes into the managed store.
|
|
32
|
+
After a local edit, run sync again.
|
|
33
|
+
Checks also detect local file permission changes, including executable bits.
|
|
34
|
+
Sync copies those permissions to every managed Agent target.
|
|
35
|
+
Symlink mode links each Agent target to that managed copy.
|
|
36
|
+
|
|
37
|
+
`requires` names each consumer and its required Skills.
|
|
38
|
+
Consumers can come from a separate Plugin.
|
|
39
|
+
Every required Skill must have a source in this declaration.
|
|
40
|
+
The existing lockfile records these requirements and each declaration's sources and targets.
|
|
41
|
+
Removal refuses a required Skill until its consumer declaration releases it through sync.
|
|
42
|
+
|
|
43
|
+
Sync prepares every source before changing Agent targets.
|
|
44
|
+
One transaction writes installed Skills, targets, requirements, and declarations.
|
|
45
|
+
Preparation failures and target conflicts leave existing targets unchanged.
|
|
46
|
+
Repeated sync uses installed bytes when a remote source still matches its exact commit.
|
|
47
|
+
Sync preserves installed Skills omitted from the declaration.
|
|
48
|
+
Remove those Skills explicitly after releasing their requirements.
|
|
49
|
+
|
|
50
|
+
Declarations in one store can share a Skill with the same source.
|
|
51
|
+
Local sources must resolve to the same directory.
|
|
52
|
+
Remote sources must use the same selector and exact commit.
|
|
53
|
+
Sync combines their Agent targets.
|
|
54
|
+
If declarations share an Agent target, they must use the same install mode.
|
|
55
|
+
Conflicting sources or modes fail before any installation changes.
|
|
56
|
+
Changing one declaration's targets preserves targets required by other declarations.
|
|
57
|
+
Use a distinct `name` for each declaration in a store.
|
|
58
|
+
|
|
59
|
+
Use `--manifest PATH` to select another declaration.
|
|
60
|
+
Use `--global` for global Agent targets.
|
|
61
|
+
Use `SKILLD_DATA_DIR` to select a separate managed store.
|
|
62
|
+
This setting does not change global Agent target paths.
|
|
63
|
+
|
|
64
|
+
Existing unmanaged targets block sync.
|
|
65
|
+
Use `--adopt` to take ownership of an unmanaged symlink with identical Skill bytes.
|
|
66
|
+
Different bytes, directories, and broken links still block sync.
|
|
67
|
+
Sync preserves the original source directory.
|
|
68
|
+
|
|
69
|
+
Use a CLI containing `sync` to read lockfiles with recorded requirements.
|
|
70
|
+
Older CLIs reject those fields.
|
|
71
|
+
Keep legacy v2 stores separate; sync does not migrate their lockfiles.
|
|
72
|
+
|
|
73
|
+
## Account login from an Agent
|
|
74
|
+
|
|
75
|
+
Run `skilld auth login --no-browser --plain`.
|
|
76
|
+
The CLI prints an authorization URL and waits for its loopback callback.
|
|
77
|
+
Open that URL in the intended signed-in browser.
|
|
78
|
+
The CLI stores the resulting credential through its normal credential store.
|
|
79
|
+
Never copy browser cookies or tokens into a declaration.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skilld-harness",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.4.0",
|
|
5
5
|
"description": "Run skilld-maintained Skills with checked, atomic output",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Harlan Wilton",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"build": "obuild && node scripts/copy-skilld-maintained-skills.mjs",
|
|
70
70
|
"lint": "eslint .",
|
|
71
71
|
"lint:fix": "eslint . --fix",
|
|
72
|
-
"typecheck": "
|
|
72
|
+
"typecheck": "tsc6 --noEmit",
|
|
73
73
|
"test": "vitest",
|
|
74
74
|
"test:run": "vitest run",
|
|
75
75
|
"publint": "publint",
|