cyber-aced 0.4.0 → 0.4.2
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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.plugin/plugin.json +1 -1
- package/agents/aced-impl-judge.md +3 -3
- package/agents/aced-scenario-writer.md +2 -2
- package/agents/aced-spec-validator.md +1 -1
- package/governances/README.md +1 -1
- package/governances/skill-design.md +5 -3
- package/package.json +2 -2
- package/skills/aced-architect-impl/SKILL.md +1 -1
- package/skills/aced-builder-impl/SKILL.md +2 -2
- package/skills/aced-builder-spec/SKILL.md +7 -8
- package/skills/aced-fit/SKILL.md +4 -5
- package/skills/aced-impl-producer/SKILL.md +4 -4
- package/skills/check-freshness/SKILL.md +4 -5
- package/skills/define-agent/SKILL.md +2 -2
- package/skills/define-command/SKILL.md +3 -3
- package/skills/define-governance/SKILL.md +2 -2
- package/skills/define-skill/README.md +1 -1
- package/skills/define-skill/SKILL.md +21 -18
- package/skills/define-skill/references/governances/agent-tool-output.md +86 -0
- package/skills/define-skill/references/governances/skill-design.md +260 -0
- package/skills/extract-situation/SKILL.md +1 -1
- package/skills/improve/SKILL.md +2 -2
- package/skills/improve-skill/SKILL.md +6 -12
- package/skills/improve-skill/references/check-definitions.md +3 -3
- package/skills/improve-skill/references/governances/agent-tool-output.md +86 -0
- package/skills/improve-skill/references/governances/skill-design.md +260 -0
- package/skills/improve-skill/scripts/validate.mts +2 -2
- package/skills/init-aced/SKILL.md +2 -2
- package/skills/list-skills/SKILL.md +1 -1
- package/skills/manage-model-runners/SKILL.md +1 -1
- package/skills/manage-skill-dirs/SKILL.md +1 -1
- package/skills/repair-private-skills/SKILL.md +1 -1
- package/skills/report/SKILL.md +2 -2
- package/skills/run/SKILL.md +1 -1
- package/skills/skillify/SKILL.md +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "aced",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.2",
|
|
5
5
|
"description": "Agent Config Evaluation & Development. Spec, evaluate, and improve agent configurations: skills, AGENTS.md sections, subagent definitions, and commands.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "unional"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/cyberuni/marketplace/main/schema/claude/plugin.json",
|
|
3
3
|
"name": "aced",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.2",
|
|
5
5
|
"description": "Agent Config Evaluation & Development. Spec, evaluate, and improve agent configurations: skills, AGENTS.md sections, subagent definitions, and commands.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "unional"
|
package/.plugin/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/cyberuni/marketplace/main/schema/claude/plugin.json",
|
|
3
3
|
"name": "aced",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.2",
|
|
5
5
|
"description": "Agent Config Evaluation & Development. Spec, evaluate, and improve agent configurations: skills, AGENTS.md sections, subagent definitions, and commands.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "unional"
|
|
@@ -19,7 +19,7 @@ The **impl-judge** for agent-configuration domain types — it grades the **buil
|
|
|
19
19
|
## Input
|
|
20
20
|
|
|
21
21
|
```
|
|
22
|
-
DOMAIN, DOMAIN_PATH, SPEC_PATH, FEATURE_PATH
|
|
22
|
+
DOMAIN, DOMAIN_PATH, SPEC_PATH, FEATURE_PATH: the domain under work, its spec folder, its spec.md, and its .feature
|
|
23
23
|
IMPLEMENTATION_PATHS: the agent configuration under evaluation (the SUBJECT)
|
|
24
24
|
VERIFICATION_PATHS: the frozen .feature (the eval source) + eval.md (run policy only)
|
|
25
25
|
```
|
|
@@ -28,9 +28,9 @@ VERIFICATION_PATHS: the frozen .feature (the eval source) + eval.md (run poli
|
|
|
28
28
|
|
|
29
29
|
1. **Read the frozen `.feature` as the eval source.** Enumerate its scenarios in file order. Each scenario carries its own eval: a `@rubric` scenario's inline rubric docstring (named dimensions + `max` + `threshold`), a `@trigger` `Scenario Outline`'s `Examples` rows, or a deterministic boolean `Then`. You **run** it, you do not author it. A `@rubric` scenario whose inline rubric block is **absent** is a `BLOCKER` — you do not free-author the missing rubric.
|
|
30
30
|
|
|
31
|
-
2. **Set the run policy from `eval.md`.** Read the run policy under the `eval:` block: `eval.trigger.{runs, activation_threshold}` for `@trigger` scenarios; `eval.judge.model` and `eval.judge.default_threshold` for `@behavior`/`@quality` scenarios (an inline `threshold` in a `@rubric` docstring overrides the default). Defaults when `eval.md` omits them: judge model
|
|
31
|
+
2. **Set the run policy from `eval.md`.** Read the run policy under the `eval:` block: `eval.trigger.{runs, activation_threshold}` for `@trigger` scenarios; `eval.judge.model` and `eval.judge.default_threshold` for `@behavior`/`@quality` scenarios (an inline `threshold` in a `@rubric` docstring overrides the default). Defaults when `eval.md` omits them: judge model the session's current model, default_threshold 4, trigger activation_threshold 0.5, trigger runs 3.
|
|
32
32
|
|
|
33
|
-
3. **Run the evals.** For each scenario, invoke `aced-case-judge` with the SUBJECT, the **`.feature` path and the scenario name**, and its threshold, over its run count — for a `@trigger` `Scenario Outline`, **once per `Examples` row**, passing its zero-based `ROW` (one row is one case; the judge reports one invoke decision, and aggregating accuracy across rows is yours). **Never pass the scenario's steps, its `Then`, or its rubric** — the judge blinds its own simulating context (composing that context's brief with the `extract-situation` engine) and scores the returned transcript in a separate one; handing it the scenario body would put the answer key back in the context that has to reach the answer. One invocation covers both passes; never sequence them here. It returns a score per named dimension against that dimension's own `max`, plus a total. Aggregate the totals across runs.
|
|
33
|
+
3. **Run the evals.** For each scenario, invoke `aced-case-judge` with the SUBJECT, the **`.feature` path and the scenario name**, and its threshold, over its run count — for a `@trigger` `Scenario Outline`, **once per `Examples` row**, passing its zero-based `ROW` (one row is one case; the judge reports one invoke decision, and aggregating accuracy across rows is yours). **Never pass the scenario's steps, its `Then`, or its rubric** — the judge blinds its own simulating context (composing that context's brief with the `extract-situation` engine) and scores the returned transcript in a separate one; handing it the scenario body would put the answer key back in the context that has to reach the answer. One invocation covers both passes; never sequence them here. It returns a score per named dimension against that dimension's own `max`, plus a total. Aggregate the totals across runs. <!-- field-mandate-ignore: ROW is aced-case-judge's input, which this judge constructs -->
|
|
34
34
|
|
|
35
35
|
**Wait for each case judge, and bank only its last word.** Dispatching a case judge is asynchronous, and the case judge is itself waiting on its own blind simulator — so a judge can report before its measurement exists and correct itself afterwards. Two rules follow. **Only the final notification per agent id is trustworthy**: when an agent reports more than once, the later report supersedes the earlier one entirely — never bank the first and never merge them. And **a verdict is a result only when the agent has finished**: do not collapse to boolean or roll up `IMPLEMENTATION_PASS` while any dispatched case judge is still live. If a run ends with cases still outstanding, that is `STATUS: needs-input` with those scenarios named — not a pass and not a fail.
|
|
36
36
|
|
|
@@ -30,7 +30,7 @@ Before writing anything, classify the subject's fit tier (`aced:aced-fit`) and *
|
|
|
30
30
|
## Input
|
|
31
31
|
|
|
32
32
|
```
|
|
33
|
-
DOMAIN, DOMAIN_PATH, SPEC_PATH
|
|
33
|
+
DOMAIN, DOMAIN_PATH, SPEC_PATH: the domain under work, its spec folder, and its spec.md
|
|
34
34
|
SUBJECT: <full text of the agent configuration under spec, or null for a new one>
|
|
35
35
|
COMMAND_SURFACE: <the configuration's trigger surface / interface — or null>
|
|
36
36
|
DESIGN_DECISIONS: <known choices — or null>
|
|
@@ -56,7 +56,7 @@ USER_ANSWERS: <answers to previously returned QUESTIONS — or null>
|
|
|
56
56
|
- **Select the form before you grade it — the substitutability test.** A `@rubric` is a **compensatory** model (strength on one dimension pays for weakness on another), so a criterion belongs in one **only if** it is **substitutable**: only if you accept that trade — *"great scope makes up for shipping an npx dependency"* is a trade nobody accepts, so `no_npx_dependency` is a boolean `Then`, not a dimension. A rule graded as a dimension becomes **tradeable**, which is the one thing a rule must never be, and no threshold repairs it. Split a **double-barreled** dimension (`harness_agnostic_and_mcp_free`) before selecting — its halves routinely land in different forms. **Write the trade down** for each dimension you author or revise, in the same record that carries the cut's reason, naming it and **what pays for it** — a trade nobody wrote is one nobody can disagree with. The duty is **yours alone**: no judge reports a missing record, so nothing catches you skipping it. **Keep a property a boolean scenario in the suite already decides out of the rubric** — author it as the boolean only, never both; scoring it as a dimension too smuggles an untradeable rule into the compensatory sum (the boolean-smuggling tell: if your rubrics begin restating booleans, the boundary was set too high). This is a **same-object** check, not same-criterion: two dimensions may share a criterion with no boolean twin deciding either without either being a smuggled boolean.
|
|
57
57
|
- **Ask the span question before the trade question — a whole-output criterion is untradeable by construction.** When a graded criterion covers **the whole of what the subject produces** (a persona's voice, the fitness of the artifact as a whole), there is no *rest of the output* left to pay for weakness in it, so the compensatory sum has nothing to trade against. Author it as **one boolean `@quality` scenario**, never as a dimension — and never go hunting for a boolean twin the suite does not have; the same-object check above requires one, this does not. `@quality` names the **result axis** while `@rubric` is the orthogonal, optional **assertion form**, so a boolean `@quality` scenario is ordinary boolean Gherkin, not a new form. The boolean is strictly **stronger**: the gate requires every scenario to pass, so the property cannot be zeroed and bought back on unrelated points the way a dimension can. Do not let *"but it is graded, so it must be a `@rubric` dimension"* route you past this — that inference is exactly what failed. **The test is monadic:** read the single criterion against the output and ask *can I name an attribute of the output this criterion does not touch?* If you can, it is per-attribute and stays a dimension. Sibling dimensions tell you how the **output decomposes**; they are never what you compare the criterion against. Because span is asked **first**, a whole-output criterion authored alongside per-attribute siblings does not make the case ambiguous — the spanning one becomes the boolean and the siblings stay dimensions. A whole-output-*sounding* name (`coherence`, `clarity`, `overall_quality`) is not the test: judge what the dimension **scores**, not how broadly it is worded.
|
|
58
58
|
- **Read your scenarios against each other before returning.** No two sharing a `When` may demand opposite verdicts on one constructible snapshot; narrow one `Given` to exclude the overlap. Overlap whose `Then`s agree, and scenarios whose `When`s name different operations, are not contradictions.
|
|
59
|
-
- **On a backfill, re-derive the scenario set from the CFG's edges** — one per `(path class, edge)` pair, every guard paired with a positive companion — rather than reading the standing `.feature` and patching the gaps a diff notices. Any pre-existing suite or retired golden set is **reference only**: a claim to verify against the current configuration, never the baseline to patch (`sdd:suite-format-governance
|
|
59
|
+
- **On a backfill, re-derive the scenario set from the CFG's edges** — one per `(path class, edge)` pair, every guard paired with a positive companion — rather than reading the standing `.feature` and patching the gaps a diff notices. Any pre-existing suite or retired golden set is **reference only**: a claim to verify against the current configuration, never the baseline to patch (`sdd:suite-format-governance`).
|
|
60
60
|
|
|
61
61
|
4. **Pre-flight before you freeze.** Before returning the `spec.md` + `.feature`, run the produce-time pre-flight — the cheap check that stops a wrong assumption from being frozen into an already-shipped suite:
|
|
62
62
|
- **Ground every asserted harness/tool behavior in the harness's own primary docs.** When a `Then` (or the `spec.md`) asserts *how a harness or tool behaves* — a flag's effect, what a field controls, when a mechanism fires — confirm it against the harness's own primary documentation before freezing. Never assert harness behavior from memory; a wrong assumption frozen into a scenario forces a re-open of a shipped suite.
|
|
@@ -24,7 +24,7 @@ The per-scenario **Checks** below are the `aced:aced-builder-spec` bar (its cano
|
|
|
24
24
|
## Input
|
|
25
25
|
|
|
26
26
|
```
|
|
27
|
-
DOMAIN, DOMAIN_PATH, FEATURE_PATH, SPEC_PATH
|
|
27
|
+
DOMAIN, DOMAIN_PATH, FEATURE_PATH, SPEC_PATH: the domain under work, its spec folder, its .feature, and its spec.md
|
|
28
28
|
SUBJECT: <full text of the agent configuration under spec, or null>
|
|
29
29
|
```
|
|
30
30
|
|
package/governances/README.md
CHANGED
|
@@ -48,5 +48,5 @@ rationale belong in ADRs and research dossiers.
|
|
|
48
48
|
Owned elsewhere and referenced from these documents: `plugin-design`, `slash-invocation`, and
|
|
49
49
|
`universal-plugin` ship from the `universal-plugin` package.
|
|
50
50
|
|
|
51
|
-
See [ADR-0035](
|
|
51
|
+
See [ADR-0035](https://github.com/cyberuni/cyber-sdd/blob/main/docs/adr/0035-authored-governances-ship-as-package-files.md) for why these
|
|
52
52
|
ship as package files rather than as governance skills.
|
|
@@ -123,8 +123,10 @@ When a skill includes `scripts/` or documents CLI commands agents run, load **ag
|
|
|
123
123
|
### Frontmatter
|
|
124
124
|
|
|
125
125
|
- `name` must match the parent directory name exactly.
|
|
126
|
-
- `description`
|
|
127
|
-
-
|
|
126
|
+
- `description` of a situationally triggered skill states what the skill does, then when it applies — the situations, requests, and implicit phrasings that should select it. Lead with the capability, in third person.
|
|
127
|
+
- Do not open the `description` with a fixed lead-in such as `"Use this skill when"` or `"When to use"`. A trigger clause after the capability (`"… Use when …"`) is fine; no particular phrase is required.
|
|
128
|
+
- A **name-only** skill's `description` is exactly `"By name only"` and carries no capability or trigger text at all.
|
|
129
|
+
- Keep `description` ≤1024 characters — the agentskills.io hard limit. Put the capability and the main triggers first; listings may truncate the tail.
|
|
128
130
|
- `compatibility` — optional; declare environment constraints (required tools, network access, OS, runtime version). Include only when the skill has requirements the agent cannot assume.
|
|
129
131
|
|
|
130
132
|
#### Runtime fields
|
|
@@ -180,7 +182,7 @@ The `activation` field belongs in **SKILL.md frontmatter** as a **top-level fiel
|
|
|
180
182
|
---
|
|
181
183
|
name: my-skill
|
|
182
184
|
activation: per-situation
|
|
183
|
-
description: "
|
|
185
|
+
description: "<what it does>. Use when <situations>."
|
|
184
186
|
---
|
|
185
187
|
```
|
|
186
188
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cyber-aced",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Agent Config Evaluation & Development. Spec, evaluate, and improve agent configurations: skills, AGENTS.md sections, subagent definitions, and commands.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"!skills/**/*.test.mts"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@cyberuni/agent-harness": "0.
|
|
27
|
+
"@cyberuni/agent-harness": "0.6.0"
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "public"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aced-architect-impl
|
|
3
|
-
description: "
|
|
3
|
+
description: "By name only"
|
|
4
4
|
user-invocable: false
|
|
5
5
|
metadata:
|
|
6
6
|
actor: architect
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aced-builder-impl
|
|
3
|
-
description: "
|
|
3
|
+
description: "By name only"
|
|
4
4
|
user-invocable: false
|
|
5
5
|
metadata:
|
|
6
6
|
actor: builder
|
|
@@ -29,7 +29,7 @@ agent level.
|
|
|
29
29
|
- **Run policy is explicit — from `eval.md`.** Read the `eval:` block: `@trigger` scenarios run
|
|
30
30
|
`eval.trigger.runs` against `eval.trigger.activation_threshold` (accuracy); `@behavior`/`@quality`
|
|
31
31
|
scenarios run N times against the scenario's inline `threshold` (else `eval.judge.default_threshold`),
|
|
32
|
-
scored by `eval.judge.model`. Defaults when omitted: model
|
|
32
|
+
scored by `eval.judge.model`. Defaults when omitted: model the session's current model, default_threshold 4,
|
|
33
33
|
trigger activation_threshold 0.5, trigger runs 3.
|
|
34
34
|
- **Collapse to a boolean.** A scenario passes when its aggregate **total across the rubric's named
|
|
35
35
|
dimensions** ≥ `threshold` and no must-not-do was triggered (trigger scenarios: accuracy ≥
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aced-builder-spec
|
|
3
|
-
description: "
|
|
3
|
+
description: "By name only"
|
|
4
4
|
user-invocable: false
|
|
5
5
|
metadata:
|
|
6
6
|
actor: builder
|
|
@@ -78,8 +78,8 @@ bar. Two criteria below are **conditional on tier**; a **missing** `**Fit:**` de
|
|
|
78
78
|
- **The test is monadic.** Read the **single** criterion against the output: *can you name an
|
|
79
79
|
attribute of the output this criterion does not touch?* If you can, it is per-attribute and stays
|
|
80
80
|
a dimension. Sibling dimensions are evidence of how the **output decomposes** — never the object
|
|
81
|
-
of the comparison. Comparing one candidate dimension against another is the twin-scan
|
|
82
|
-
|
|
81
|
+
of the comparison. Comparing one candidate dimension against another is the twin-scan the
|
|
82
|
+
suite format rejects, on this ground exactly as much as on Ground 2.
|
|
83
83
|
- **Span is checked before substitutability.** A whole-output criterion never reaches the trade
|
|
84
84
|
question. So when one is authored **alongside** per-attribute siblings — the shape the
|
|
85
85
|
persona-voice recurrence actually took — the span ruling governs the spanning criterion and the
|
|
@@ -99,9 +99,8 @@ bar. Two criteria below are **conditional on tier**; a **missing** `**Fit:**` de
|
|
|
99
99
|
`only` bounds Ground 2's own test, not selection as a whole, so it never licenses passing a
|
|
100
100
|
criterion that fails Ground 1. Two `@rubric` dimensions that merely
|
|
101
101
|
**share a criterion**, with no boolean twin deciding either, do **not** fail selection for sharing
|
|
102
|
-
it — comparing two dimensions to each other is the twin-scan
|
|
103
|
-
|
|
104
|
-
hole) and this Selection verdict (a smuggled boolean, out of the sum) are orthogonal reads of one
|
|
102
|
+
it — comparing two dimensions to each other is the twin-scan the suite format rejects; the
|
|
103
|
+
discrimination verdict (noise, not a hole) and this Selection verdict (a smuggled boolean, out of the sum) are orthogonal reads of one
|
|
105
104
|
dimension.
|
|
106
105
|
- **Discrimination** *(all tiers; every scenario and every `@rubric` dimension).* Each must be able
|
|
107
106
|
to **register a miss** — a plausible wrong config must fail it, or score below the dimension's
|
|
@@ -126,5 +125,5 @@ bar. Two criteria below are **conditional on tier**; a **missing** `**Fit:**` de
|
|
|
126
125
|
Validate-section coverage requires a scenario for.
|
|
127
126
|
- `sdd:suite-format-governance` — the miss test, the wrong-subject table, the three anti-patterns,
|
|
128
127
|
the substitutability test, and the pairwise-consistency rule this bar specializes.
|
|
129
|
-
- `design/
|
|
130
|
-
|
|
128
|
+
- `design/test-levels.md` — the boolean-smuggling tell and the same-object, not same-criterion,
|
|
129
|
+
reconciliation the Selection bullet encodes.
|
package/skills/aced-fit/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aced-fit
|
|
3
|
-
description: "
|
|
3
|
+
description: "By name only"
|
|
4
4
|
user-invocable: false
|
|
5
5
|
metadata:
|
|
6
6
|
type: governance
|
|
@@ -35,7 +35,7 @@ name-only description) makes no activation decision, so it is never `strong`.
|
|
|
35
35
|
## How each role uses it
|
|
36
36
|
|
|
37
37
|
- **`aced-scenario-writer` (producer, explore) — decides.** Classify fit **first**; declare it as a
|
|
38
|
-
`**Fit:** strong | partial` line in the subject's node spec (its `
|
|
38
|
+
`**Fit:** strong | partial` line in the subject's node spec (its `spec.md`) `## Use Cases`. Then author to the tier:
|
|
39
39
|
`strong` → author should-trigger + same-keyword near-miss; `partial` → author behavior/edge/rule,
|
|
40
40
|
**no fabricated near-miss**; `wrong-squad` → **recuse**, produce nothing, recommend the SDD default.
|
|
41
41
|
- **`aced-spec-validator` (judge, gate) — enforces.** Read the declared tier; apply trigger-context /
|
|
@@ -83,7 +83,7 @@ is **not** a `CONTENT_GAP` (unlike the tier's).
|
|
|
83
83
|
Assertions about **the subject being classified**, run by the producer before handoff and re-run by
|
|
84
84
|
the cold judge against the artifact — never against the producer's account of what it did:
|
|
85
85
|
|
|
86
|
-
1. The subject's node spec (`
|
|
86
|
+
1. The subject's node spec (`spec.md`) carries exactly one `**Fit:** strong` or `**Fit:** partial`
|
|
87
87
|
line; a subject recused as wrong-squad has neither a `**Fit:**` line nor an ACED
|
|
88
88
|
`eval.md` (its node, if any, was written by the SDD-default chain). *(mechanical)*
|
|
89
89
|
2. A subject declared `strong` does not have a name-only description (one beginning `By name only`
|
|
@@ -98,8 +98,7 @@ the cold judge against the artifact — never against the producer's account of
|
|
|
98
98
|
|
|
99
99
|
## References
|
|
100
100
|
|
|
101
|
-
- `design/fit.md` (`.agents/specs/aced/design/fit.md`) — the normative model
|
|
102
|
-
ADR 0003 (measured axis).
|
|
101
|
+
- `design/fit.md` (`.agents/specs/aced/design/fit.md`) — the normative model (tier and measured axis).
|
|
103
102
|
- `aced:aced-builder-spec` — the spec bar whose trigger-context / trigger-balance criteria this
|
|
104
103
|
governance makes conditional.
|
|
105
104
|
- `aced:aced-builder-impl` — the impl bar (which eval layers get evals follows the tier).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aced-impl-producer
|
|
3
|
-
description: "
|
|
3
|
+
description: "By name only"
|
|
4
4
|
user-invocable: false
|
|
5
5
|
metadata:
|
|
6
6
|
actor: producer
|
|
@@ -13,7 +13,7 @@ Diagnose failing eval cases and propose targeted edits to the target agent confi
|
|
|
13
13
|
|
|
14
14
|
## Role: the ACED impl-producer
|
|
15
15
|
|
|
16
|
-
When the conductor dispatches `define-agent`, `define-skill`, or `define-governance` as a generic builder (`produced-by sdd:automaton`) for the **impl-producer** role (implement mode, against a frozen `.feature`), it builds the **agent configuration** to pass the frozen suite. The **verification is the frozen `.feature` itself** — its inline `@rubric` scenarios and `@trigger` `Examples`, authored by `aced-scenario-writer` at explore and frozen at the spec gate — so the impl-producer does **not** author a separate eval suite. As impl-producer it self-aligns to `sdd:ownership-governance` plus the resolved **builder-impl + architect-impl** bars (the ACED builder-impl is `aced:aced-builder-impl`). When the **impl-judge** (`aced-impl-judge`) reports scenario failures, load this skill to run the diagnose-and-refine loop below. Independence holds because the evals are anchored to the frozen `.feature` and executed by a separate runner (`aced-case-judge`), which is not the producer.
|
|
16
|
+
When the conductor dispatches `define-agent`, `define-skill`, or `define-governance` as a generic builder (`produced-by sdd:sdd-automaton`) for the **impl-producer** role (implement mode, against a frozen `.feature`), it builds the **agent configuration** to pass the frozen suite. The **verification is the frozen `.feature` itself** — its inline `@rubric` scenarios and `@trigger` `Examples`, authored by `aced-scenario-writer` at explore and frozen at the spec gate — so the impl-producer does **not** author a separate eval suite. As impl-producer it self-aligns to `sdd:ownership-governance` plus the resolved **builder-impl + architect-impl** bars (the ACED builder-impl is `aced:aced-builder-impl`). When the **impl-judge** (`aced-impl-judge`) reports scenario failures, load this skill to run the diagnose-and-refine loop below. Independence holds because the evals are anchored to the frozen `.feature` and executed by a separate runner (`aced-case-judge`), which is not the producer.
|
|
17
17
|
|
|
18
18
|
## Load context
|
|
19
19
|
|
|
@@ -23,7 +23,7 @@ and its colocated `eval.md` (subject + run policy):
|
|
|
23
23
|
- Read `eval.md` for the `subject` agent configuration path and the `eval:` run policy
|
|
24
24
|
- Read the `subject` agent configuration in full
|
|
25
25
|
- Read the frozen `<node>.feature` (the eval source)
|
|
26
|
-
- Read the most recent result file from
|
|
26
|
+
- Read the most recent result file from `.agents/aced/results/<target-slug>/` (sort by filename descending, take first)
|
|
27
27
|
|
|
28
28
|
If no results exist, run `run` first.
|
|
29
29
|
|
|
@@ -54,7 +54,7 @@ For each pattern, propose a concrete change to the agent configuration. Show exa
|
|
|
54
54
|
Examples of edit types:
|
|
55
55
|
|
|
56
56
|
- **Trigger false-positive/negative** → rewrite the `description:` field; add explicit "when NOT to use" section
|
|
57
|
-
- **Missing step** →
|
|
57
|
+
- **Missing step** → state the step and why it matters; break it into sub-steps if it is compound
|
|
58
58
|
- **Ambiguous rule** → replace vague language ("prefer X") with decision rule ("use X when Y, use Z when W")
|
|
59
59
|
- **Conflicting instruction** → add explicit precedence rule or split into separate instructions
|
|
60
60
|
- **Description mismatch** → align `description:` to match what the body actually instructs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: check-freshness
|
|
3
|
-
description: "
|
|
3
|
+
description: "By name only"
|
|
4
4
|
user-invocable: false
|
|
5
5
|
metadata:
|
|
6
6
|
internal: true
|
|
@@ -70,7 +70,7 @@ about what it measured.
|
|
|
70
70
|
|
|
71
71
|
**Trust boundary.** `evaluated` is what the run **reports** consuming, not a verified trace. An
|
|
72
72
|
under-reporting run records a shorter set whose entries all match, and this answers `current` with
|
|
73
|
-
full confidence — a silent failure pointing the unsafe way
|
|
73
|
+
full confidence — a silent failure pointing the unsafe way. What is checkable is
|
|
74
74
|
**coherence**: a set omitting the `.feature` whose scenarios the record scores, or the configuration
|
|
75
75
|
its own `target` names, contradicts the record it accompanies and reads `absent`. That catches only
|
|
76
76
|
an *inconsistent* under-reporter; a uniform one escapes.
|
|
@@ -81,8 +81,7 @@ it should have" is not, and this engine never claims the second.
|
|
|
81
81
|
## Boundaries
|
|
82
82
|
|
|
83
83
|
Scores nothing (`run`), compares no two versions (`compare`), rolls nothing up (`report`), and does
|
|
84
|
-
not judge whether a recorded *pass* was well-founded (a judge-protocol question
|
|
85
|
-
a verdict and reports it; **what a caller does with that verdict is the caller's
|
|
86
|
-
`improve` to consult it is `#476`.
|
|
84
|
+
not judge whether a recorded *pass* was well-founded (a judge-protocol question). It decides
|
|
85
|
+
a verdict and reports it; **what a caller does with that verdict is the caller's**.
|
|
87
86
|
|
|
88
87
|
Spec: `.agents/specs/aced/eval-run/check-freshness/`.
|
|
@@ -7,7 +7,7 @@ description: 'Use this skill when the user wants to create or improve an agent d
|
|
|
7
7
|
|
|
8
8
|
Create or improve an agent definition — a named role encoded in a single file.
|
|
9
9
|
|
|
10
|
-
When the conductor dispatches this skill as a generic builder (`produced-by sdd:automaton`) for the ACED **impl-producer** role (implement mode, against a frozen `.feature`), it builds the **agent definition** to pass the frozen suite. The **verification is the frozen `.feature` itself** — its inline `@rubric` scenarios and `@trigger` `Examples`, authored by `aced-scenario-writer` at explore — so no separate eval suite is authored here; `eval.md` carries only the `subject` binding and run policy. As impl-producer it self-aligns to `sdd:ownership-governance` plus the resolved **builder-impl + architect-impl** bars (the ACED builder-impl is `aced:aced-builder-impl`). (Invoked standalone — no frozen `.feature` — only the agent definition is produced.) If the impl-judge reports scenario failures, load `aced-impl-producer` to run the diagnose-and-refine loop rather than re-deriving it here.
|
|
10
|
+
When the conductor dispatches this skill as a generic builder (`produced-by sdd:sdd-automaton`) for the ACED **impl-producer** role (implement mode, against a frozen `.feature`), it builds the **agent definition** to pass the frozen suite. The **verification is the frozen `.feature` itself** — its inline `@rubric` scenarios and `@trigger` `Examples`, authored by `aced-scenario-writer` at explore — so no separate eval suite is authored here; `eval.md` carries only the `subject` binding and run policy. As impl-producer it self-aligns to `sdd:ownership-governance` plus the resolved **builder-impl + architect-impl** bars (the ACED builder-impl is `aced:aced-builder-impl`). (Invoked standalone — no frozen `.feature` — only the agent definition is produced.) If the impl-judge reports scenario failures, load `aced-impl-producer` to run the diagnose-and-refine loop rather than re-deriving it here.
|
|
11
11
|
|
|
12
12
|
## First: confirm an agent definition is the right artifact
|
|
13
13
|
|
|
@@ -103,7 +103,7 @@ The canonical file lives at the canonical path. All runtime locations are symlin
|
|
|
103
103
|
|
|
104
104
|
Ask the user:
|
|
105
105
|
|
|
106
|
-
1. **Name** — kebab-case slug (e.g. `conductor`, `code-reviewer`). If the agent's role is to **score or verify a specific gate or case**, name it by that gate/scope, not a bare action verb: `<domain>-<gate>-judge` for a gate scorer (e.g. `sdd-impl-judge`, `aced-impl-judge`), `<domain>-case-judge` for a case scorer (e.g. `
|
|
106
|
+
1. **Name** — kebab-case slug (e.g. `conductor`, `code-reviewer`). If the agent's role is to **score or verify a specific gate or case**, name it by that gate/scope, not a bare action verb: `<domain>-<gate>-judge` for a gate scorer (e.g. `sdd-impl-judge`, `aced-impl-judge`), `<domain>-case-judge` for a case scorer (e.g. `aced-case-judge`). Flag any gate/case scorer whose name is not in that form — bare verdict verbs (`implementer`, `judge`, `validator`, `reviewer`, `checker`) and non-verdict action names (`eval-runner`, `grader`) alike. A producer/worker agent (e.g. `scenario-writer`, `doc-writer`) keeps its action-oriented name — this convention only applies to gate/case scorers.
|
|
107
107
|
2. **Role** — one sentence: "You are a [seniority] [role] focused on [bounded concern]."
|
|
108
108
|
3. **Responsibilities** — what does this agent do? (3–6 bounded concerns)
|
|
109
109
|
4. **Output format** — what does it produce? (file, report, JSON, confirmation, etc.)
|
|
@@ -8,7 +8,7 @@ description: 'Use this skill when the user wants to create or improve a command
|
|
|
8
8
|
Create or improve a **command** — a workflow the user invokes explicitly via `/name`, never
|
|
9
9
|
triggered automatically by the model.
|
|
10
10
|
|
|
11
|
-
When the conductor dispatches this skill as a generic builder (`produced-by sdd:automaton`) for the
|
|
11
|
+
When the conductor dispatches this skill as a generic builder (`produced-by sdd:sdd-automaton`) for the
|
|
12
12
|
ACED **impl-producer** role (implement mode, against a frozen `.feature`), it builds the **command
|
|
13
13
|
file** to pass the frozen suite. The **verification is the frozen `.feature` itself** — its inline
|
|
14
14
|
`@rubric` scenarios and `@trigger` `Examples`, authored by `aced-scenario-writer` at explore — so no
|
|
@@ -51,7 +51,7 @@ harnesses to target if not stated):
|
|
|
51
51
|
| Mechanism | File | Portability | When to pick it |
|
|
52
52
|
|---|---|---|---|
|
|
53
53
|
| **`commands/` folder** (legacy) | A standalone markdown file, not a `SKILL.md` | Widest support — Claude Code, and GitHub Copilot CLI (reads `.claude/commands/`); the only option for cross-harness plugin commands targeting Cursor too | Default choice; use for anything shipped in a plugin or targeting more than Claude Code |
|
|
54
|
-
| **`disable-model-invocation: true`** (modern) | A `SKILL.md` with the frontmatter flag | Claude Code, Windsurf; **not** Copilot CLI, Codex CLI, or Gemini CLI;
|
|
54
|
+
| **`disable-model-invocation: true`** (modern) | A `SKILL.md` with the frontmatter flag | Claude Code, Windsurf; **not** Copilot CLI, Codex CLI, or Gemini CLI; may not surface plugin-delivered skills in Cursor's `/` menu — verify before relying on it | Only when targeting Claude Code / Windsurf exclusively and the command benefits from full `SKILL.md` progressive disclosure (a `references/` or `scripts/` dir) |
|
|
55
55
|
|
|
56
56
|
If improving an existing file, read it first and keep its current mechanism unless the user asks to
|
|
57
57
|
migrate.
|
|
@@ -135,7 +135,7 @@ For the `disable-model-invocation` mechanism, run the structural audit and fix a
|
|
|
135
135
|
finding before presenting the skill:
|
|
136
136
|
|
|
137
137
|
```bash
|
|
138
|
-
npx cyberplace
|
|
138
|
+
npx cyberplace@<version> audit validate --path <placement-dir>/<name> # resolve <version> via: npm view cyberplace version — never @latest
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
The `commands/` folder mechanism is not a `SKILL.md` — the audit tool does not apply; check by hand
|
|
@@ -59,7 +59,7 @@ Write the file at the canonical path using this structure:
|
|
|
59
59
|
```markdown
|
|
60
60
|
---
|
|
61
61
|
name: <name>
|
|
62
|
-
description: "
|
|
62
|
+
description: "By name only"
|
|
63
63
|
user-invocable: false
|
|
64
64
|
metadata:
|
|
65
65
|
type: governance
|
|
@@ -90,7 +90,7 @@ dimensions already are the verification.>
|
|
|
90
90
|
|
|
91
91
|
Rules for the body:
|
|
92
92
|
- Set `user-invocable: false` — the classifier for a partial skill (a governance is loaded by name, never user-triggered)
|
|
93
|
-
-
|
|
93
|
+
- Set `description` to exactly `"By name only"` — the harness still sees the description, so anything added is another handle for a spurious match; put identity and caller in the body
|
|
94
94
|
- Do not include `## Why`, `## Rationale`, or causal prose — put that in ADRs
|
|
95
95
|
- Encode decisions and criteria, not facts the model already knows
|
|
96
96
|
- For a **Constraint set**, **Checklist**, or **Decision table** governance, write a `## Validate`
|
|
@@ -24,7 +24,7 @@ The skill walks you through the shape before writing anything:
|
|
|
24
24
|
3. **Pattern** — process, tool-based, or standard (personas go to `define-agent`)
|
|
25
25
|
4. **Placement** — user-global, project-private, or project-public, plus which runtime symlinks to create
|
|
26
26
|
|
|
27
|
-
It then drafts the SKILL.md (kebab-case name, a
|
|
27
|
+
It then drafts the SKILL.md (kebab-case name, a description that leads with the capability and then says when it applies, ≤1024 chars, a step body under the size bar), adds a README for a public skill, runs the structural audit and fixes CRITICAL/HIGH findings, and points you at the ACED eval loop (`start-mission` / `add-scenario` / `run`) to spec and score it.
|
|
28
28
|
|
|
29
29
|
## Enhanced from create-skill
|
|
30
30
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: define-skill
|
|
3
|
-
description: '
|
|
3
|
+
description: 'Creates, scaffolds, or formalizes a workflow skill — a process, tool-based, or standard SKILL.md — from scratch or from an existing ad-hoc workflow. Use when the user asks for one — "create a skill", "write a skill for X", "I want a skill that…", "turn this workflow into a skill", "help me build this skill" — even if they do not say "skill" explicitly. Not for agent definitions or personas (define-agent), reference-only rule sets (define-governance), or extracting the current session (skillify).'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Define Skill
|
|
@@ -8,7 +8,7 @@ description: 'Use this skill when the user wants to create, scaffold, or formali
|
|
|
8
8
|
Create or improve a **workflow skill** — a process, tool-based, or standard SKILL.md — then hand it
|
|
9
9
|
to the ACED eval loop to spec and score.
|
|
10
10
|
|
|
11
|
-
When the conductor dispatches this skill as a generic builder (`produced-by sdd:automaton`) for the
|
|
11
|
+
When the conductor dispatches this skill as a generic builder (`produced-by sdd:sdd-automaton`) for the
|
|
12
12
|
ACED **impl-producer** role (implement mode, against a frozen `.feature`), it builds the **SKILL.md**
|
|
13
13
|
to pass the frozen suite. The **verification is the frozen `.feature` itself** — its inline `@rubric`
|
|
14
14
|
scenarios and `@trigger` `Examples`, authored by `aced-scenario-writer` at explore — so no separate
|
|
@@ -45,16 +45,16 @@ skill here.
|
|
|
45
45
|
|
|
46
46
|
## Load the governance
|
|
47
47
|
|
|
48
|
-
Before writing content, load the **skill-design** governance
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
Before writing content, load the **skill-design** governance as the authoritative rules for
|
|
49
|
+
principles, progressive disclosure, description structure, and when to extract deterministic logic to
|
|
50
|
+
a script. Read the first that exists:
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
```
|
|
52
|
+
1. `.agents/governances/skill-design.md` — a project override
|
|
53
|
+
2. `references/governances/skill-design.md` in this skill — the default copy
|
|
55
54
|
|
|
56
55
|
If the skill will ship a `scripts/` directory or document CLI commands agents run, also load
|
|
57
|
-
**agent-tool-output** for stdout / JSON /
|
|
56
|
+
**agent-tool-output** the same way (`references/governances/agent-tool-output.md`) for stdout / JSON /
|
|
57
|
+
non-interactive / stderr rules.
|
|
58
58
|
|
|
59
59
|
## Settle the shape — five questions
|
|
60
60
|
|
|
@@ -129,12 +129,13 @@ description: <capability> + "Use when <trigger>" + an implicit-phrasing example
|
|
|
129
129
|
2. <step>
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
-
- **Description** — the only field loaded at startup; it carries the whole triggering burden.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
- **Description** — the only field loaded at startup; it carries the whole triggering burden. Lead
|
|
133
|
+
with the capability, then a "Use when…" trigger clause, then an implicit phrasing. Never open with a
|
|
134
|
+
fixed lead-in such as "Use this skill when" or "When to use". Keep it ≤1024 characters, the
|
|
135
|
+
capability and main triggers first. For a
|
|
136
|
+
**name-only skill** (a reusable part other skills call by name, never matched to a situation), set
|
|
137
|
+
`user-invocable: false` and the description to exactly `"By name only"` and nothing else; identity
|
|
138
|
+
and caller go in the body.
|
|
138
139
|
- **Body** — step-by-step, under 500 lines. Keep the *when* here; move any **deterministic,
|
|
139
140
|
fixed-output** step to a `scripts/` file or an existing CLI and have the body only say when to run
|
|
140
141
|
it.
|
|
@@ -162,11 +163,11 @@ is `improve`.
|
|
|
162
163
|
For a subagent this skill scaffolds (realized as a partial skill, e.g. loaded via the ACED
|
|
163
164
|
impl-producer/impl-judge pattern): if its role is to **score or verify a specific gate or case**,
|
|
164
165
|
name it by that gate/scope, not a bare action verb — `<domain>-<gate>-judge` for a gate scorer (e.g.
|
|
165
|
-
`aced-impl-judge`), `<domain>-case-judge` for a case scorer (e.g. `
|
|
166
|
+
`aced-impl-judge`), `<domain>-case-judge` for a case scorer (e.g. `aced-case-judge`). Reject
|
|
166
167
|
`implementer`, `judge`, `validator`, `reviewer`, `checker` alone. A producer subagent (e.g.
|
|
167
168
|
`scenario-writer`, `doc-writer`) keeps its action-oriented name — this check does not fire for it.
|
|
168
169
|
|
|
169
|
-
Evaluate this **in-skill quality check** — separate from the mechanical
|
|
170
|
+
Evaluate this **in-skill quality check** — separate from the mechanical structural audit below — before
|
|
170
171
|
handing the skill back: a drafted gate/case scorer named with a bare action verb is a **HIGH** severity
|
|
171
172
|
finding; fix it (rename to the gate-and-scope form) before presenting the skill.
|
|
172
173
|
|
|
@@ -175,9 +176,11 @@ finding; fix it (rename to the gate-and-scope form) before presenting the skill.
|
|
|
175
176
|
Run the structural audit and fix any CRITICAL or HIGH finding **before** presenting the skill:
|
|
176
177
|
|
|
177
178
|
```bash
|
|
178
|
-
|
|
179
|
+
node "<improve-skill>/scripts/validate.mts" --path <placement-dir>/<name>
|
|
179
180
|
```
|
|
180
181
|
|
|
182
|
+
Replace `<improve-skill>` with the directory of the `improve-skill` skill installed beside this one.
|
|
183
|
+
|
|
181
184
|
For a fuller pass, invoke the `improve-skill` skill. Do not present a skill with an
|
|
182
185
|
open CRITICAL finding.
|
|
183
186
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Agent Tool Output
|
|
2
|
+
|
|
3
|
+
Rules for scripts, hooks, and CLIs that AI agents invoke. Apply when authoring skill `scripts/` or documenting CLI commands in SKILL.md.
|
|
4
|
+
|
|
5
|
+
## Agent-native tools
|
|
6
|
+
|
|
7
|
+
Use for skill `scripts/`, hook runtime commands, and any tool where the primary consumer is always an agent.
|
|
8
|
+
|
|
9
|
+
### Stdout is the machine contract
|
|
10
|
+
|
|
11
|
+
- Emit **one JSON value** per run, or silence on success with no payload.
|
|
12
|
+
- Use `process.stdout.write(JSON.stringify(result) + '\n')` — never `console.log` for contract output.
|
|
13
|
+
- No prose, tables, progress bars, or ANSI decoration on stdout in default mode.
|
|
14
|
+
|
|
15
|
+
### Stderr is human/diagnostic
|
|
16
|
+
|
|
17
|
+
- Use `console.warn`, `console.error`, or `process.stderr.write` for diagnostics.
|
|
18
|
+
- Gate tables, progress, and verbose human output behind a `--verbose` flag.
|
|
19
|
+
|
|
20
|
+
### Files hold durable state
|
|
21
|
+
|
|
22
|
+
- Write artifacts to disk; stdout JSON names paths or fields only.
|
|
23
|
+
- Agents read artifact files by path (from stdout JSON or SKILL.md), not by scraping stdout prose.
|
|
24
|
+
|
|
25
|
+
### Skills present; tools record
|
|
26
|
+
|
|
27
|
+
- SKILL.md tells the agent which file or JSON field to read.
|
|
28
|
+
- The agent summarizes results for the user — the tool does not format user-facing prose on stdout.
|
|
29
|
+
|
|
30
|
+
### Autonomous runs
|
|
31
|
+
|
|
32
|
+
- Document `--yes` or an equivalent non-interactive flag when the tool can prompt.
|
|
33
|
+
- Never put interactive prompts on stdout.
|
|
34
|
+
- Agents must be able to run the tool without human input.
|
|
35
|
+
|
|
36
|
+
### Exit codes
|
|
37
|
+
|
|
38
|
+
- `0` = success.
|
|
39
|
+
- Non-zero = failure; include a concise error on stderr.
|
|
40
|
+
|
|
41
|
+
## Dual-audience CLI
|
|
42
|
+
|
|
43
|
+
Use for command-line tools used by both humans and agents.
|
|
44
|
+
|
|
45
|
+
### Default stdout = human-readable
|
|
46
|
+
|
|
47
|
+
- Tables, aligned fields, and prose summaries are fine for interactive terminal use.
|
|
48
|
+
|
|
49
|
+
### `--format agent` = agent contract
|
|
50
|
+
|
|
51
|
+
- Agents **must** pass `--format agent` when they need output optimized for LLM reasoning.
|
|
52
|
+
- `--format agent` stdout is terse, structured text — lower token cost and better reasoning than JSON.
|
|
53
|
+
- `--format json` is for non-LLM machine consumers (scripts, pipelines, database inserts).
|
|
54
|
+
- SKILL.md must instruct agents to use `--format agent`, not to parse default prose or tables.
|
|
55
|
+
- `--json` is a deprecated alias for `--format json`, accepted for backward compatibility but not shown in `--help`.
|
|
56
|
+
|
|
57
|
+
### Default-stdout exception
|
|
58
|
+
|
|
59
|
+
- When a tool documents **default stdout** as the machine contract (not `--json`), SKILL.md must say so explicitly.
|
|
60
|
+
- Do not assume default stdout is parseable for arbitrary CLIs.
|
|
61
|
+
|
|
62
|
+
### Stderr and verbosity
|
|
63
|
+
|
|
64
|
+
- Errors and validation failures go to stderr.
|
|
65
|
+
- Optional human status (dry-run summaries, registration tables) goes to stderr when `--verbose` is set.
|
|
66
|
+
|
|
67
|
+
### Same non-interactive and exit-code rules
|
|
68
|
+
|
|
69
|
+
- Document `--yes` / non-interactive paths where prompts exist.
|
|
70
|
+
- Exit `0` on success; non-zero on failure.
|
|
71
|
+
|
|
72
|
+
## SKILL.md authoring
|
|
73
|
+
|
|
74
|
+
When a skill documents commands agents run:
|
|
75
|
+
|
|
76
|
+
- Tell agents which flag to use: `--format agent` for LLM consumption, `--format json` for non-LLM machine consumers.
|
|
77
|
+
- Do **not** instruct agents to parse default stdout prose, summary tables, or generic "script output" as data.
|
|
78
|
+
- Prefer: "read `<artifact-path>`" or "run with `--format agent`" or "run with `--format json` and parse the array."
|
|
79
|
+
|
|
80
|
+
## References
|
|
81
|
+
|
|
82
|
+
Related governances (load on demand; read stdout as authoritative):
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npx cyberplace@<version> governance show skill-design
|
|
86
|
+
```
|