You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Copy file name to clipboardExpand all lines: README.md
+65-41Lines changed: 65 additions & 41 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,11 +21,52 @@ bunx skills add TitusKirch/skills # bun
21
21
22
22
That's it. Every skill in this bundle is now discoverable inside your agent — no manifest editing, no symlink dance.
23
23
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)
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
+
24
63
## ✨ Features
25
64
26
65
-**🧩 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.
29
70
-**📋 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.
30
71
-**🚀 Release-please ready** — Conventional Commits drive automated versioning + CHANGELOG via release-please on `main`.
31
72
@@ -86,69 +127,52 @@ Configure the skills themselves, per repo.
86
127
87
128
<!-- skills:end -->
88
129
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
101
131
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:
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).
118
145
119
-
Copy one skill folder into:
146
+
## 🔁 The AI work loop
120
147
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.
127
149
128
150
```text
129
-
/write-readme draft a README for my new Laravel package
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).
133
157
134
158
## ➕ Adding a new skill
135
159
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.
137
161
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).
139
163
140
164
## 💡 Inspiration
141
165
142
166
The local `pnpm skills:link` / `:list` / `:unlink` scripts are modelled on [mattpocock/skills](https://github.com/mattpocock/skills).
143
167
144
168
## 🤝 Contributing
145
169
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.
147
171
148
172
> [!TIP]
149
-
> Run `pnpm check:fix` before pushing — CI 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.
150
174
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).
0 commit comments