Skip to content

Commit bae31e7

Browse files
committed
docs(readme): bring the landing view up to the current repo
The prose around the generated skills table had fallen behind what the repo does. The shared config every skill now reads was absent entirely, as were the two work loops that eight of the skills form; the install command sat below a 57-line catalogue rather than above it. - Order the sections the house style prescribes: install and run first, features after, so the install command is reachable in one screen. - Add Configuration for .tituskirch-skills.json, pointing at the schema that owns the keys rather than restating them. - Add the AI work loop, linking the lifecycle page for the vocabulary. - Correct skills:sync, which regenerates every derived artifact rather than the four the section named, and name skills:check as its guard. - Correct the contributing tip: the gate is pnpm verify, and CI runs on pull_request only, so nothing checks a commit reaching dev otherwise. - Fold the two secondary install paths into a details block and drop the install snippet that was printed twice.
1 parent 8b22325 commit bae31e7

1 file changed

Lines changed: 65 additions & 41 deletions

File tree

README.md

Lines changed: 65 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,52 @@ bunx skills add TitusKirch/skills # bun
2121

2222
That's it. Every skill in this bundle is now discoverable inside your agent — no manifest editing, no symlink dance.
2323

24+
## 📦 Install & run
25+
26+
The `skills.sh` CLI is the path for users — the four package-manager forms are the hook above. Set `DISABLE_TELEMETRY=1` to opt out of its anonymous install-count telemetry.
27+
28+
Then invoke a skill by name or trigger phrase:
29+
30+
```text
31+
/write-readme draft a README for my new Laravel package
32+
```
33+
34+
Your agent picks the right one from the `description:` field in each `SKILL.md` — write that field tight and it routes correctly.
35+
36+
<details>
37+
<summary><b>Two other install paths</b> — symlink locally, or copy a single skill by hand</summary>
38+
39+
### Symlink locally (recommended when developing on this repo)
40+
41+
```bash
42+
git clone https://github.com/TitusKirch/skills.git
43+
cd skills
44+
pnpm install
45+
pnpm skills:link # symlinks every skill into ~/.claude/skills/ and ~/.agents/skills/
46+
pnpm skills:list # lists every SKILL.md in the repo
47+
pnpm skills:unlink # removes only the symlinks pointing back into this repo
48+
```
49+
50+
Both destinations, every run: `~/.claude/skills/` is the only user-scope path Claude Code reads, and `~/.agents/skills/` is the vendor-neutral one Codex, Cursor, OpenCode and Gemini CLI read — Codex reads nothing else this repo links to. `skills:unlink` clears both.
51+
52+
Restart your agent (Claude Code: `/reload-plugins`). Because the skills live as symlinks, edits in the working copy are picked up live.
53+
54+
### Install a single skill by hand
55+
56+
Copy one skill folder into:
57+
58+
- **User scope**`~/.claude/skills/<skill-name>/` (Claude Code) or `~/.agents/skills/<skill-name>/` (Codex, Cursor, OpenCode, Gemini CLI) — available in every project.
59+
- **Project scope**`.claude/skills/<skill-name>/` or `.agents/skills/<skill-name>/` — committed alongside the consuming project.
60+
61+
</details>
62+
2463
## ✨ Features
2564

2665
- **🧩 Self-contained skills** — each folder under `skills/` ships a `SKILL.md` (YAML frontmatter + body) plus optional templates, references and scripts. No runtime code.
27-
- **🛡️ Lint-clean by construction**`oxlint` + `oxfmt` (markdown-first) gated by husky + commitlint + lint-staged. CI runs the same checks.
28-
- **🔁 Three install paths**`skills.sh` CLI for users, `pnpm skills:link` for live local dev, hand-copy for one-off picks.
66+
- **⚙️ Configurable per repo** — one committed `.tituskirch-skills.json` tells every skill which forge, tracker, branch and language _this_ repo uses. Absent config means built-in defaults.
67+
- **🔁 Two AI work loops** — an implement loop that builds and pushes, a review loop that judges the result as an independent agent; the issue's label is the entire handover.
68+
- **🛡️ Lint-clean by construction**`oxlint` + `oxfmt` (markdown-first) gated by husky + commitlint + lint-staged. CI runs the same checks, plus a conformance check against the [Agent Skills spec](https://agentskills.io/specification).
69+
- **📥 Three install paths**`skills.sh` CLI for users, `pnpm skills:link` for live local dev, hand-copy for one-off picks.
2970
- **📋 House-style enforced** — the [`write-readme`](skills/docs/write-readme/SKILL.md) skill prescribes the README layout, section emojis and badge palette so every kirchDev repo looks the same.
3071
- **🚀 Release-please ready** — Conventional Commits drive automated versioning + CHANGELOG via release-please on `main`.
3172

@@ -86,69 +127,52 @@ Configure the skills themselves, per repo.
86127

87128
<!-- skills:end -->
88129

89-
## 📦 Installation
90-
91-
### Option A — `skills.sh` CLI (recommended for users)
92-
93-
```bash
94-
npx skills add TitusKirch/skills # npm
95-
pnpm dlx skills add TitusKirch/skills # pnpm
96-
yarn dlx skills add TitusKirch/skills # yarn
97-
bunx skills add TitusKirch/skills # bun
98-
```
99-
100-
Set `DISABLE_TELEMETRY=1` to opt out of the CLI's anonymous install-count telemetry.
130+
## ⚙️ Configuration
101131

102-
### Option B — symlink locally (recommended when developing on this repo)
132+
Most skills read an optional, committed `.tituskirch-skills.json` at the **consuming** repo's root — the one place that says which forge, tracker, branch and language that repo uses:
103133

104-
```bash
105-
git clone https://github.com/TitusKirch/skills.git
106-
cd skills
107-
pnpm install
108-
pnpm skills:link # symlinks every skill into ~/.claude/skills/ and ~/.agents/skills/
109-
pnpm skills:list # lists every SKILL.md in the repo
110-
pnpm skills:unlink # removes only the symlinks pointing back into this repo
134+
```json
135+
{
136+
"$schema": "https://raw.githubusercontent.com/TitusKirch/skills/main/tituskirch-skills.schema.json",
137+
"forge": "github",
138+
"language": "de",
139+
"verify": "pnpm verify",
140+
"pr": { "base": "dev" }
141+
}
111142
```
112143

113-
Both destinations, every run: `~/.claude/skills/` is the only user-scope path Claude Code reads, and `~/.agents/skills/` is the vendor-neutral one Codex, Cursor, OpenCode and Gemini CLI read — Codex reads nothing else this repo links to. `skills:unlink` clears both.
114-
115-
Restart your agent (Claude Code: `/reload-plugins`). Because the skills live as symlinks, edits in the working copy are picked up live.
116-
117-
### Option C — install a single skill by hand
144+
Resolution per setting is **config → detected → built-in default**, so a repo without the file keeps today's behaviour. Run `/tituskirch-skills-config` to have [that skill](skills/meta/tituskirch-skills-config/SKILL.md) write and reconcile the file rather than hand-rolling it. Every key and its allowed values live in [`tituskirch-skills.schema.json`](tituskirch-skills.schema.json) — point `$schema` at the raw URL and your editor completes them; which skill reads which key is listed in [`skills/README.md`](skills/README.md#shared-config).
118145

119-
Copy one skill folder into:
146+
## 🔁 The AI work loop
120147

121-
- **User scope**`~/.claude/skills/<skill-name>/` (Claude Code) or `~/.agents/skills/<skill-name>/` (Codex, Cursor, OpenCode, Gemini CLI) — available in every project.
122-
- **Project scope**`.claude/skills/<skill-name>/` or `.agents/skills/<skill-name>/` — committed alongside the consuming project.
123-
124-
## 🚀 Quick start
125-
126-
Once installed, invoke a skill by name or trigger phrase. The `write-readme` skill, for example, activates on prompts like:
148+
Eight of the skills above form two loops: **implement** ([`work-implement`](skills/work/work-implement/SKILL.md) and its queue) claims an issue, builds, verifies and pushes; **review** ([`work-review`](skills/work/work-review/SKILL.md) and its queue) judges the pushed result as a structurally fresh agent. Nothing passes between them in memory — the issue's `ai:` label is the entire handover, which is why a crashed run resumes instead of restarting and why both loops can drain at the same time.
127149

128150
```text
129-
/write-readme draft a README for my new Laravel package
151+
ai: ready → ai: working → ai: review requested → ai: done
152+
↑ ↓
153+
ai: changes requested ←────┘
130154
```
131155

132-
Your agent picks the right skill based on the `description:` field in each `SKILL.md` — write that field tight and it will route correctly.
156+
`ai: ready` is the only label a human sets by hand — that opt-in is what makes the drains unattended. Full vocabulary, escalation states and loop ownership: [AI work lifecycle](docs/1.concepts/2.ai-work-lifecycle.md).
133157

134158
## ➕ Adding a new skill
135159

136-
Drop a `skills/<category>/<name>/SKILL.md`, run `pnpm skills:sync` — it regenerates the table above, the category's `README.md`, [`.claude-plugin/plugin.json`](.claude-plugin/plugin.json) and [`skills.sh.json`](skills.sh.json) from the frontmatter — then commit as `feat(<name>): add skill`.
160+
Drop a `skills/<category>/<name>/SKILL.md`, run `pnpm skills:sync` — it regenerates **every** derived artifact from your frontmatter, from the table above and the category `README.md` to [`.claude-plugin/plugin.json`](.claude-plugin/plugin.json), [`skills.sh.json`](skills.sh.json)'s groupings and the shared blocks mirrored into each skill. Hand-editing any of them is pointless: `pnpm skills:check` fails the gate on drift.
137161

138-
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the full workflow and [`skills/README.md`](skills/README.md) for the frontmatter contract.
162+
Then commit as `feat(<name>): add skill`. The frontmatter contract is in [`skills/README.md`](skills/README.md); what spans more than one skill lives in [`docs/`](docs/index.md).
139163

140164
## 💡 Inspiration
141165

142166
The local `pnpm skills:link` / `:list` / `:unlink` scripts are modelled on [mattpocock/skills](https://github.com/mattpocock/skills).
143167

144168
## 🤝 Contributing
145169

146-
PRs welcome. Conventional Commits required (enforced via commitlint). Husky runs `oxlint` + `oxfmt` on `git commit` — primarily on markdown, since that's what skills are made of.
170+
PRs welcome — branch off `dev` and target `dev`. Conventional Commits required (enforced via commitlint). Husky runs `oxlint` + `oxfmt` on `git commit` — primarily on markdown, since that's what skills are made of.
147171

148172
> [!TIP]
149-
> Run `pnpm check:fix` before pushingCI will catch what husky missed.
173+
> Run `pnpm verify` before pushing. It is the whole gate — lint, format, artifact drift, types and tests — and CI runs `on: pull_request` only, so nothing checks a commit that reaches `dev` any other way.
150174
151-
See [`CONTRIBUTING.md`](CONTRIBUTING.md) and [`SECURITY.md`](SECURITY.md).
175+
The full workflow is in [`CONTRIBUTING.md`](CONTRIBUTING.md), the disclosure process in [`SECURITY.md`](SECURITY.md), and why things are shaped the way they are in [`docs/99.adr/`](docs/99.adr/index.md).
152176

153177
## 🛣️ Versioning
154178

0 commit comments

Comments
 (0)