@fro.bot/systematic 2.6.1 → 2.7.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/agents/review/api-contract-reviewer.md +1 -1
- package/agents/review/correctness-reviewer.md +1 -1
- package/agents/review/data-migrations-reviewer.md +1 -1
- package/agents/review/dhh-rails-reviewer.md +1 -1
- package/agents/review/julik-frontend-races-reviewer.md +1 -1
- package/agents/review/kieran-python-reviewer.md +1 -1
- package/agents/review/kieran-rails-reviewer.md +1 -1
- package/agents/review/kieran-typescript-reviewer.md +1 -1
- package/agents/review/maintainability-reviewer.md +1 -1
- package/agents/review/performance-reviewer.md +1 -1
- package/agents/review/reliability-reviewer.md +1 -1
- package/agents/review/security-reviewer.md +1 -1
- package/agents/workflow/bug-reproduction-validator.md +1 -1
- package/dist/cli.js +1 -1
- package/dist/{index-3h7kpmfa.js → index-k9tdxh0p.js} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -3
- package/dist/lib/skills.d.ts +1 -0
- package/package.json +1 -1
- package/skills/compound-docs/SKILL.md +2 -3
- package/skills/writing-systematic-skills/SKILL.md +115 -0
- package/skills/writing-systematic-skills/references/foundation-conventions.md +143 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: api-contract-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches API routes, request/response types, serialization, versioning, or exported type signatures. Reviews code for breaking contract changes.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -46,4 +47,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
46
47
|
"testing_gaps": []
|
|
47
48
|
}
|
|
48
49
|
```
|
|
49
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: correctness-reviewer
|
|
3
3
|
description: Always-on code-review persona. Reviews code for logic errors, edge cases, state management bugs, error propagation failures, and intent-vs-implementation mismatches.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -46,4 +47,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
46
47
|
"testing_gaps": []
|
|
47
48
|
}
|
|
48
49
|
```
|
|
49
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: data-migrations-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches migration files, schema changes, data transformations, or backfill scripts. Reviews code for data integrity and migration safety.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -50,4 +51,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
50
51
|
"testing_gaps": []
|
|
51
52
|
}
|
|
52
53
|
```
|
|
53
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dhh-rails-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when Rails diffs introduce architectural choices, abstractions, or frontend patterns that may fight the framework. Reviews code from an opinionated DHH perspective.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -44,4 +45,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
44
45
|
"testing_gaps": []
|
|
45
46
|
}
|
|
46
47
|
```
|
|
47
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: julik-frontend-races-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches async UI code, Stimulus/Turbo lifecycles, or DOM-timing-sensitive frontend behavior. Reviews code for race conditions and janky UI failure modes.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -47,4 +48,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
47
48
|
```
|
|
48
49
|
|
|
49
50
|
Discourage the user from pulling in too many dependencies, explaining that the job is to first understand the race conditions, and then pick a tool for removing them. That tool is usually just a dozen lines, if not less - no need to pull in half of NPM for that.
|
|
50
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kieran-python-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches Python code. Reviews changes with Kieran's strict bar for Pythonic clarity, type hints, and maintainability.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -45,4 +46,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
45
46
|
"testing_gaps": []
|
|
46
47
|
}
|
|
47
48
|
```
|
|
48
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kieran-rails-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches Rails application code. Reviews Rails changes with Kieran's strict bar for clarity, conventions, and maintainability.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -45,4 +46,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
45
46
|
"testing_gaps": []
|
|
46
47
|
}
|
|
47
48
|
```
|
|
48
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: kieran-typescript-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches TypeScript code. Reviews changes with Kieran's strict bar for type safety, clarity, and maintainability.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -45,4 +46,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
45
46
|
"testing_gaps": []
|
|
46
47
|
}
|
|
47
48
|
```
|
|
48
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: maintainability-reviewer
|
|
3
3
|
description: Always-on code-review persona. Reviews code for premature abstraction, unnecessary indirection, dead code, coupling between unrelated modules, and naming that obscures intent.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -46,4 +47,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
46
47
|
"testing_gaps": []
|
|
47
48
|
}
|
|
48
49
|
```
|
|
49
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: performance-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches database queries, loop-heavy data transforms, caching layers, or I/O-intensive paths. Reviews code for runtime performance and scalability issues.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -48,4 +49,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
48
49
|
"testing_gaps": []
|
|
49
50
|
}
|
|
50
51
|
```
|
|
51
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: reliability-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches error handling, retries, circuit breakers, timeouts, health checks, background jobs, or async handlers. Reviews code for production reliability and failure modes.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -46,4 +47,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
46
47
|
"testing_gaps": []
|
|
47
48
|
}
|
|
48
49
|
```
|
|
49
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: security-reviewer
|
|
3
3
|
description: Conditional code-review persona, selected when the diff touches auth middleware, public endpoints, user input handling, or permission checks. Reviews code for exploitable vulnerabilities.
|
|
4
|
+
model: inherit
|
|
4
5
|
tools: Read, Grep, Glob, Bash
|
|
5
6
|
color: blue
|
|
6
7
|
mode: subagent
|
|
@@ -48,4 +49,3 @@ Return your findings as JSON matching the findings schema. No prose outside the
|
|
|
48
49
|
"testing_gaps": []
|
|
49
50
|
}
|
|
50
51
|
```
|
|
51
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bug-reproduction-validator
|
|
3
3
|
description: Systematically reproduces and validates bug reports to confirm whether reported behavior is an actual bug. Use when you receive a bug report or issue that needs verification.
|
|
4
|
+
model: inherit
|
|
4
5
|
mode: subagent
|
|
5
6
|
temperature: 0.1
|
|
6
7
|
---
|
|
@@ -81,4 +82,3 @@ Key Principles:
|
|
|
81
82
|
- If you cannot reproduce after reasonable attempts, clearly state what you tried
|
|
82
83
|
|
|
83
84
|
When you cannot access certain resources or need additional information, explicitly state what would help validate the bug further. Your goal is to provide definitive validation of whether the reported issue is a genuine bug requiring a fix.
|
|
84
|
-
|
package/dist/cli.js
CHANGED
|
@@ -1436,7 +1436,7 @@ function extractFrontmatter(filePath) {
|
|
|
1436
1436
|
metadata,
|
|
1437
1437
|
disableModelInvocation: extractBoolean(data, "disable-model-invocation"),
|
|
1438
1438
|
userInvocable: extractBoolean(data, "user-invocable"),
|
|
1439
|
-
subtask: data.context === "fork" ? true : undefined,
|
|
1439
|
+
subtask: data.context === "fork" ? true : extractBoolean(data, "subtask") ?? undefined,
|
|
1440
1440
|
agent: extractNonEmptyString(data, "agent"),
|
|
1441
1441
|
model: extractNonEmptyString(data, "model"),
|
|
1442
1442
|
argumentHint: argumentHint !== "" ? argumentHint : undefined,
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
findSkillsInDir,
|
|
9
9
|
loadConfig,
|
|
10
10
|
parseFrontmatter
|
|
11
|
-
} from "./index-
|
|
11
|
+
} from "./index-k9tdxh0p.js";
|
|
12
12
|
|
|
13
13
|
// src/index.ts
|
|
14
14
|
import fs3 from "fs";
|
|
@@ -553,6 +553,5 @@ var SystematicPlugin = async ({ client, directory }) => {
|
|
|
553
553
|
};
|
|
554
554
|
var src_default = SystematicPlugin;
|
|
555
555
|
export {
|
|
556
|
-
src_default as default
|
|
557
|
-
SystematicPlugin
|
|
556
|
+
src_default as default
|
|
558
557
|
};
|
package/dist/lib/skills.d.ts
CHANGED
|
@@ -28,5 +28,6 @@ export interface SkillInfo {
|
|
|
28
28
|
argumentHint?: string;
|
|
29
29
|
allowedTools?: string;
|
|
30
30
|
}
|
|
31
|
+
export declare const SKILL_FRONTMATTER_FIELDS: readonly ["name", "description", "argument-hint", "disable-model-invocation", "allowed-tools", "license", "compatibility", "metadata", "user-invocable", "agent", "model", "context", "subtask"];
|
|
31
32
|
export declare function extractFrontmatter(filePath: string): SkillFrontmatter;
|
|
32
33
|
export declare function findSkillsInDir(dir: string, maxDepth?: number): SkillInfo[];
|
package/package.json
CHANGED
|
@@ -7,9 +7,6 @@ allowed-tools:
|
|
|
7
7
|
- Write
|
|
8
8
|
- Bash
|
|
9
9
|
- Grep
|
|
10
|
-
preconditions:
|
|
11
|
-
- Problem has been solved (not in-progress)
|
|
12
|
-
- Solution has been verified working
|
|
13
10
|
---
|
|
14
11
|
|
|
15
12
|
# compound-docs Skill
|
|
@@ -22,6 +19,8 @@ This skill captures problem solutions immediately after confirmation, creating s
|
|
|
22
19
|
|
|
23
20
|
**Organization:** Single-file architecture - each problem documented as one markdown file in its symptom category directory (e.g., `docs/solutions/performance-issues/n-plus-one-briefs.md`). Files use YAML frontmatter for metadata and searchability.
|
|
24
21
|
|
|
22
|
+
**Prerequisites:** The problem has been solved and the solution has been verified working. Do not document in-progress investigations as finalized solutions.
|
|
23
|
+
|
|
25
24
|
---
|
|
26
25
|
|
|
27
26
|
<critical_sequence name="documentation-capture" enforce_order="strict">
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: writing-systematic-skills
|
|
3
|
+
description: Use when creating, editing, auditing, or fixing bundled Systematic skills, especially when authoring SKILL.md files, adding skill reference files, resolving content-integrity frontmatter failures, or deciding which Systematic conventions apply beyond the general writing-skills guidance.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Writing Systematic Skills
|
|
7
|
+
|
|
8
|
+
Systematic skills are OpenCode-native workflow assets. Use this skill after loading the general `writing-skills` foundation; this file only covers the Systematic-specific delta.
|
|
9
|
+
|
|
10
|
+
## When To Use
|
|
11
|
+
|
|
12
|
+
Use this skill when you are:
|
|
13
|
+
|
|
14
|
+
- Creating a new bundled skill under `skills/`
|
|
15
|
+
- Editing an existing bundled skill's frontmatter or file layout
|
|
16
|
+
- Fixing content-integrity frontmatter or sub-file failures
|
|
17
|
+
- Deciding whether a skill needs references, scripts, assets, or templates
|
|
18
|
+
- Auditing bundled skills for provider-portable defaults
|
|
19
|
+
|
|
20
|
+
Do not use this as a replacement for `~/.agents/skills/writing-skills/SKILL.md`. Load that foundation first when authoring or substantially editing skill content.
|
|
21
|
+
|
|
22
|
+
## Foundation
|
|
23
|
+
|
|
24
|
+
`writing-skills` supplies the authoring discipline: pressure scenarios, clear trigger-oriented descriptions, concise bodies, and reference files only when depth earns its keep.
|
|
25
|
+
|
|
26
|
+
Systematic adds repository-specific constraints:
|
|
27
|
+
|
|
28
|
+
- Runtime-recognized frontmatter fields are fixed by the skill loader.
|
|
29
|
+
- Skill sub-files live in a small set of conventional directories.
|
|
30
|
+
- Bundled agents must use provider-portable model defaults.
|
|
31
|
+
- Content-integrity enforces the mechanical parts in CI.
|
|
32
|
+
|
|
33
|
+
For worked examples and judgment calls, read `references/foundation-conventions.md`.
|
|
34
|
+
|
|
35
|
+
## Frontmatter Rules
|
|
36
|
+
|
|
37
|
+
Every bundled skill must have YAML frontmatter with:
|
|
38
|
+
|
|
39
|
+
- `name` - unprefixed skill identifier. The loader adds the `systematic:` command prefix automatically unless the skill intentionally belongs to another namespace such as `ce:`.
|
|
40
|
+
- `description` - third-person trigger conditions. Prefer `Use when...`; describe when to load the skill, not its internal workflow.
|
|
41
|
+
|
|
42
|
+
Optional fields are allowed only when the runtime loader recognizes them:
|
|
43
|
+
|
|
44
|
+
| Field | Use |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `argument-hint` | Shows expected invocation arguments. |
|
|
47
|
+
| `disable-model-invocation` | Prevents direct model invocation for dispatcher-style skills. |
|
|
48
|
+
| `allowed-tools` | Declares tool constraints for skill execution. |
|
|
49
|
+
| `license` | Carries skill licensing metadata. |
|
|
50
|
+
| `compatibility` | Notes platform or version compatibility. |
|
|
51
|
+
| `metadata` | String-only metadata map. |
|
|
52
|
+
| `user-invocable` | Marks whether users should invoke the skill directly. |
|
|
53
|
+
| `agent` | Selects a companion agent when the loader supports it. |
|
|
54
|
+
| `model` | Selects a model for skill execution when justified. |
|
|
55
|
+
| `context` | Use `fork` when the skill should run in forked subtask context. |
|
|
56
|
+
| `subtask` | Explicit forked-subtask marker recognized by the runtime. |
|
|
57
|
+
|
|
58
|
+
`preconditions` is banned. It has no runtime consumer. Put prerequisite guidance in the skill body instead.
|
|
59
|
+
|
|
60
|
+
## File Layout
|
|
61
|
+
|
|
62
|
+
The required entry point is:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
skills/<skill-name>/SKILL.md
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Optional sub-files must live under one of these directories:
|
|
69
|
+
|
|
70
|
+
- `references/` - deeper guidance, decision tables, long examples, or API notes
|
|
71
|
+
- `scripts/` - executable helpers an agent can run
|
|
72
|
+
- `assets/` - static files used by the skill
|
|
73
|
+
- `templates/` - reusable stubs or document templates
|
|
74
|
+
|
|
75
|
+
Keep the main `SKILL.md` small enough to decide whether and how to proceed. Move heavy detail to `references/`, and cite it with a repo-local path such as `references/foundation-conventions.md` so the sub-file integrity gate can verify it exists.
|
|
76
|
+
|
|
77
|
+
## Identity Defaults
|
|
78
|
+
|
|
79
|
+
Bundled agents must declare:
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
model: inherit
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Hardcoded provider model IDs break users who do not use that provider. Use `model: inherit` unless a future design explicitly proves a provider-specific dependency and documents the tradeoff.
|
|
86
|
+
|
|
87
|
+
For agent or API attribution, `ai:systematic` is the machine ID used by Systematic-owned operations, such as Proof's `by` field and `X-Agent-Id` header. It is not a skill cross-reference convention.
|
|
88
|
+
|
|
89
|
+
## Validator
|
|
90
|
+
|
|
91
|
+
Run the content-integrity gate before shipping skill changes:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
bun 'scripts/content-integrity.ts'
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The gate checks:
|
|
98
|
+
|
|
99
|
+
- Skill frontmatter is present and uses only runtime-recognized fields.
|
|
100
|
+
- Required `name` and `description` fields are non-empty.
|
|
101
|
+
- Banned frontmatter such as `preconditions` is absent.
|
|
102
|
+
- Bundled agents use `model: inherit`.
|
|
103
|
+
- Skill references to `references/`, `scripts/`, `assets/`, and `templates/` resolve on disk.
|
|
104
|
+
|
|
105
|
+
If the gate fails, fix the content rather than broadening the validator unless the runtime loader contract has actually changed.
|
|
106
|
+
|
|
107
|
+
## Common Mistakes
|
|
108
|
+
|
|
109
|
+
| Mistake | Fix |
|
|
110
|
+
|---|---|
|
|
111
|
+
| Adding a new frontmatter field because it reads well | Add body prose instead, unless the runtime loader consumes the field. |
|
|
112
|
+
| Summarizing the whole workflow in `description` | Describe trigger conditions only. |
|
|
113
|
+
| Adding provider-specific agent models | Use `model: inherit`. |
|
|
114
|
+
| Linking to a non-existent reference file | Create the file or remove the link. |
|
|
115
|
+
| Duplicating the general writing-skills guidance | Link to the foundation and document only the Systematic delta. |
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Foundation Conventions
|
|
2
|
+
|
|
3
|
+
This reference expands the Systematic-specific rules from `SKILL.md`. The mechanical rules are enforced by `bun scripts/content-integrity.ts`; this file explains the judgment calls behind them.
|
|
4
|
+
|
|
5
|
+
## Frontmatter
|
|
6
|
+
|
|
7
|
+
Systematic skill frontmatter mirrors what the runtime loader actually reads. Do not invent fields for documentation structure. If the loader does not consume the field, put the information in the body.
|
|
8
|
+
|
|
9
|
+
| Field | Required | When To Use | Example |
|
|
10
|
+
|---|---:|---|---|
|
|
11
|
+
| `name` | Yes | Every skill. Use the unprefixed skill identifier unless another namespace is intentional. | `name: writing-systematic-skills` |
|
|
12
|
+
| `description` | Yes | Trigger-oriented discovery text. Third person. Prefer `Use when...`. | `description: Use when fixing bundled skill frontmatter failures...` |
|
|
13
|
+
| `argument-hint` | No | The skill accepts meaningful invocation arguments. | `argument-hint: "[path/to/document.md]"` |
|
|
14
|
+
| `disable-model-invocation` | No | Dispatcher or routing skills that should not be directly model-invoked. | `disable-model-invocation: true` |
|
|
15
|
+
| `allowed-tools` | No | The skill needs an explicit tool allowlist. | `allowed-tools: Bash, Read` |
|
|
16
|
+
| `license` | No | Licensing metadata matters for distribution. | `license: MIT` |
|
|
17
|
+
| `compatibility` | No | A platform or version caveat is real and useful. | `compatibility: OpenCode` |
|
|
18
|
+
| `metadata` | No | String-only metadata map. Keep it boring. | `metadata: { owner: systematic }` |
|
|
19
|
+
| `user-invocable` | No | Direct user invocation should be explicitly advertised or suppressed. | `user-invocable: false` |
|
|
20
|
+
| `agent` | No | A loader-supported companion agent is required. | `agent: general` |
|
|
21
|
+
| `model` | No | A skill-level model choice is justified. Prefer inheritance elsewhere. | `model: inherit` |
|
|
22
|
+
| `context` | No | Forked execution is required. `fork` derives subtask behavior at runtime. | `context: fork` |
|
|
23
|
+
| `subtask` | No | Explicit forked-subtask dispatch marker. | `subtask: true` |
|
|
24
|
+
|
|
25
|
+
### Required Fields
|
|
26
|
+
|
|
27
|
+
`name` and `description` must be present. Empty strings are not valid values. Bare YAML keys such as `name:` parse as null and count as missing.
|
|
28
|
+
|
|
29
|
+
### Banned Field
|
|
30
|
+
|
|
31
|
+
`preconditions` is banned because it has no runtime consumer. Use a body section instead:
|
|
32
|
+
|
|
33
|
+
```markdown
|
|
34
|
+
## Prerequisites
|
|
35
|
+
|
|
36
|
+
Only run this skill after the bug is reproduced and the fix has been verified.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Runtime-Recognized Forking Fields
|
|
40
|
+
|
|
41
|
+
`context: fork` and `subtask: true` are allowed. They are runtime-recognized and must not be treated as idiosyncratic frontmatter.
|
|
42
|
+
|
|
43
|
+
Use them only when the skill genuinely needs forked subtask behavior. Do not cargo-cult them onto normal skills.
|
|
44
|
+
|
|
45
|
+
### Description Style
|
|
46
|
+
|
|
47
|
+
Good descriptions answer: should the agent load this skill now?
|
|
48
|
+
|
|
49
|
+
Good:
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
description: Use when creating, editing, auditing, or fixing bundled Systematic skills, especially when authoring SKILL.md files or resolving content-integrity frontmatter failures.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Bad:
|
|
56
|
+
|
|
57
|
+
```yaml
|
|
58
|
+
description: This skill explains frontmatter, file layout, validation, and identity defaults for Systematic skills.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
The bad version describes content. The good version describes trigger conditions.
|
|
62
|
+
|
|
63
|
+
## File Layout
|
|
64
|
+
|
|
65
|
+
Every skill has exactly one entry point:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
skills/<skill-name>/SKILL.md
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Use sub-files only when the content is too bulky or operationally distinct for the main skill.
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
skills/<skill-name>/
|
|
75
|
+
├── SKILL.md
|
|
76
|
+
├── references/
|
|
77
|
+
│ └── detailed-guidance.md
|
|
78
|
+
├── scripts/
|
|
79
|
+
│ └── helper.mjs
|
|
80
|
+
├── assets/
|
|
81
|
+
│ └── diagram.svg
|
|
82
|
+
└── templates/
|
|
83
|
+
└── output-template.md
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Directory Choices
|
|
87
|
+
|
|
88
|
+
| Directory | Use For | Do Not Use For |
|
|
89
|
+
|---|---|---|
|
|
90
|
+
| `references/` | Long explanations, decision tables, extended examples | Required setup that must be read before deciding to use the skill |
|
|
91
|
+
| `scripts/` | Executable helpers the agent can run | Pseudocode or prose examples |
|
|
92
|
+
| `assets/` | Static images, fixtures, or other bundled files | Markdown guidance that belongs in `references/` |
|
|
93
|
+
| `templates/` | Fillable documents, prompts, or output stubs | Examples that should not be copied verbatim |
|
|
94
|
+
|
|
95
|
+
### Sub-File Links
|
|
96
|
+
|
|
97
|
+
When `SKILL.md` mentions a sub-file path, the content-integrity gate verifies it exists. Prefer direct repo-local paths:
|
|
98
|
+
|
|
99
|
+
```markdown
|
|
100
|
+
Read `references/foundation-conventions.md` for examples.
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Avoid ambiguous references such as "the conventions doc". They are harder for agents to follow and impossible for the gate to verify.
|
|
104
|
+
|
|
105
|
+
## Identity Defaults
|
|
106
|
+
|
|
107
|
+
### Bundled Agent Model
|
|
108
|
+
|
|
109
|
+
Bundled agents must use:
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
model: inherit
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
This keeps Systematic provider-portable. Hardcoded provider IDs make an agent unusable for users on other providers and are almost never worth the lock-in.
|
|
116
|
+
|
|
117
|
+
If a future agent truly depends on a specific provider, document the constraint in the plan and get explicit review before adding the hardcoded model.
|
|
118
|
+
|
|
119
|
+
### Machine ID
|
|
120
|
+
|
|
121
|
+
`ai:systematic` is a machine identity string for Systematic-owned operations. Proof uses it as the `by` field on operations and the `X-Agent-Id` header. Keep it lowercase and stable.
|
|
122
|
+
|
|
123
|
+
Do not use `ai:systematic` as a skill-reference pattern. Skill and agent references use their own namespaces, such as `systematic:writing-systematic-skills` or `systematic:research:best-practices-researcher`.
|
|
124
|
+
|
|
125
|
+
### Public-Facing Voice
|
|
126
|
+
|
|
127
|
+
Skill text should be reusable guidance, not a session transcript. Avoid first-person process narration, internal note IDs, and references to how a particular implementation session unfolded.
|
|
128
|
+
|
|
129
|
+
## Validator Workflow
|
|
130
|
+
|
|
131
|
+
Run:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
bun scripts/content-integrity.ts --verbose
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Use the output as the source of truth for cleanup. If a violation surprises you, check the runtime loader before changing the validator:
|
|
138
|
+
|
|
139
|
+
- Skill frontmatter rules mirror `src/lib/skills.ts`.
|
|
140
|
+
- YAML parsing behavior comes from `src/lib/frontmatter.ts`.
|
|
141
|
+
- Sub-file directories come from `SUBFILE_DIRECTORY_NAMES` in `scripts/content-integrity.ts`.
|
|
142
|
+
|
|
143
|
+
When the runtime contract changes, update the loader and validator together. A validator allow-list that drifts from the loader creates false failures or misses real runtime-invisible fields.
|