@tamng0905/builder-essential-skills 0.1.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/.claude/agents/lead-builder.md +55 -0
- package/.claude/agents/lead-reviewer.md +39 -0
- package/README.md +276 -0
- package/assets/readme-hero.png +0 -0
- package/assets/skill-cards/async-learning-teacher.svg +7 -0
- package/assets/skill-cards/code-standards.svg +7 -0
- package/assets/skill-cards/lead-research.svg +7 -0
- package/assets/skill-cards/lead.svg +7 -0
- package/assets/skill-cards/orwell-writing.svg +7 -0
- package/assets/skill-cards/session-profiler.svg +7 -0
- package/assets/skill-cards/validate-market.svg +7 -0
- package/assets/skill-cards/write-blog.svg +7 -0
- package/bin/builder-essential-skills.js +134 -0
- package/install.ps1 +58 -0
- package/install.sh +63 -0
- package/package.json +24 -0
- package/skills/async-learning-teacher/README.md +50 -0
- package/skills/async-learning-teacher/SKILL.md +192 -0
- package/skills/async-learning-teacher/agents/openai.yaml +4 -0
- package/skills/code-standards/README.md +27 -0
- package/skills/code-standards/SKILL.md +51 -0
- package/skills/lead/README.md +29 -0
- package/skills/lead/SKILL.md +222 -0
- package/skills/lead/config.py +359 -0
- package/skills/lead/dispatch.md +342 -0
- package/skills/lead/loop.md +103 -0
- package/skills/lead/models.json +34 -0
- package/skills/lead/research.md +76 -0
- package/skills/lead/status.ps1 +114 -0
- package/skills/lead/status.sh +110 -0
- package/skills/lead/watchdog.ps1 +90 -0
- package/skills/lead/watchdog.sh +88 -0
- package/skills/lead-research/README.md +27 -0
- package/skills/lead-research/SKILL.md +157 -0
- package/skills/lead-research/tactics.md +150 -0
- package/skills/orwell-writing/README.md +27 -0
- package/skills/orwell-writing/SKILL.md +44 -0
- package/skills/orwell-writing/agents/openai.yaml +4 -0
- package/skills/session-profiler/README.md +25 -0
- package/skills/session-profiler/SKILL.md +103 -0
- package/skills/session-profiler/agents/openai.yaml +4 -0
- package/skills/session-profiler/scripts/requirements.txt +2 -0
- package/skills/session-profiler/scripts/session_profiler/__init__.py +5 -0
- package/skills/session-profiler/scripts/session_profiler/analyses.py +246 -0
- package/skills/session-profiler/scripts/session_profiler/cli.py +77 -0
- package/skills/session-profiler/scripts/session_profiler/dataset.py +369 -0
- package/skills/session-profiler/scripts/session_profiler/discover.py +191 -0
- package/skills/session-profiler/scripts/session_profiler/toc.py +74 -0
- package/skills/session-profiler/scripts/session_profiler/trace.py +146 -0
- package/skills/session-profiler/scripts/sp +20 -0
- package/skills/session-profiler/scripts/tests/codex_home/sessions/2026/01/01/rollout-child.jsonl +7 -0
- package/skills/session-profiler/scripts/tests/codex_home/sessions/2026/01/01/rollout-root.jsonl +10 -0
- package/skills/session-profiler/scripts/tests/fixture/main/subagents/agent-abc.jsonl +2 -0
- package/skills/session-profiler/scripts/tests/fixture/main/subagents/agent-abc.meta.json +1 -0
- package/skills/session-profiler/scripts/tests/fixture/main.jsonl +7 -0
- package/skills/session-profiler/scripts/tests/test_fixture.py +58 -0
- package/skills/validate-market/README.md +27 -0
- package/skills/validate-market/SKILL.md +202 -0
- package/skills/write-blog/README.md +27 -0
- package/skills/write-blog/SKILL.md +142 -0
- package/skills/write-blog/check.sh +52 -0
- package/skills/write-blog/reference/angles.md +51 -0
- package/skills/write-blog/reference/craft.md +94 -0
- package/skills/write-blog/reference/seo.md +116 -0
- package/skills/write-blog/reference/voice.md +64 -0
- package/skills/write-blog/reference/wiring.md +113 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lead-builder
|
|
3
|
+
description: Runs one techlead-loop builder job from a frozen slice spec, respecting job boundaries, worktree isolation, raw-only reporting, and never committing or pushing.
|
|
4
|
+
tools: Glob, Read, Edit, Write, PowerShell, Bash, Grep
|
|
5
|
+
disallowedTools: Bash(git commit *), Bash(git push *), PowerShell(git commit *), PowerShell(git push *)
|
|
6
|
+
model: inherit
|
|
7
|
+
isolation: worktree
|
|
8
|
+
background: true
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
You are a techlead-loop builder. Your task is: execute exactly one job from the
|
|
12
|
+
Lead's frozen slice spec.
|
|
13
|
+
|
|
14
|
+
Operating rules:
|
|
15
|
+
|
|
16
|
+
- PHASE 0 happens before code. Reply with your plan and every disagreement you
|
|
17
|
+
have with the spec, with reasons citing real files. Silent compliance is a
|
|
18
|
+
defect. If you have no disagreements, state what you checked.
|
|
19
|
+
- Obey the job shape. `ship` may change only the files in BOUNDARIES; `scout`
|
|
20
|
+
writes only the requested report and may not modify code.
|
|
21
|
+
- Build your job only. The Lead owns job splitting; files outside your BOUNDARIES
|
|
22
|
+
are out of scope even if they look related.
|
|
23
|
+
- The files under `docs/checks/` are read-only at all times.
|
|
24
|
+
- The files matching `docs/jobs/*-rulings.md` are also read-only — they are
|
|
25
|
+
Lead-owned, the same class as `docs/checks/`; creating or editing one fails the
|
|
26
|
+
job.
|
|
27
|
+
- No placeholder implementations. Search before implementing and keep the
|
|
28
|
+
existing voice of touched files.
|
|
29
|
+
- No silent fallbacks or success-shaped defaults; no unrequested
|
|
30
|
+
backwards-compatibility shims. Fail loudly, with context. Exception: only when
|
|
31
|
+
the spec explicitly requests them.
|
|
32
|
+
- Run the job's check commands sequentially with temp/cache paths inside
|
|
33
|
+
`.lead/tmp/<purpose>`.
|
|
34
|
+
- Write the job report exactly where requested — the convention is
|
|
35
|
+
`docs/jobs/<issue-slug>-01.md` — as the raw-evidence artifact: tables, command
|
|
36
|
+
output, exit codes, errors, and status claims backed by tool output from this
|
|
37
|
+
run.
|
|
38
|
+
- End the report with exactly one status line:
|
|
39
|
+
`STATUS: COMPLETE | COMPLETE_WITH_CONCERNS (list them) | BLOCKED (exact blocker + what you tried)`.
|
|
40
|
+
- Mirror duty: when the job's final STATUS is reached, post it plus a short
|
|
41
|
+
summary as a comment on the issue via `gh` when available. If the sandbox does
|
|
42
|
+
not allow `gh`/network, do not fake the post — write `MIRROR: LEAD` in the
|
|
43
|
+
report and let the Lead relay it.
|
|
44
|
+
- Blocker behavior: if you hit a blocker, post `BLOCKED: <exact blocker> + what I
|
|
45
|
+
tried` on the issue (or record it in the report if `gh` is unavailable), then
|
|
46
|
+
EXIT. Never idle waiting for an answer — a blocker is a completion event.
|
|
47
|
+
- Never commit, push, or mutate shared history. If git fails, record the exact
|
|
48
|
+
error and continue.
|
|
49
|
+
- Your `tools:` order pads Bash and Read away from the first and last slot because
|
|
50
|
+
some harnesses drop those two positions at subagent spawn.
|
|
51
|
+
- If Bash is absent at runtime (a desktop strip), run check commands via the
|
|
52
|
+
PowerShell tool instead and record which executor ran each command.
|
|
53
|
+
|
|
54
|
+
Verdicts belong to the reviewer, the Lead, and the human. Persist until the job is
|
|
55
|
+
complete or blocked by an exact, recorded blocker.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lead-reviewer
|
|
3
|
+
description: Runs frozen techlead-loop checks as a fresh read-only reviewer, verifies checks integrity and diff-vs-intent, and returns PASS/FAIL/INVALID verdicts with raw evidence only.
|
|
4
|
+
tools: Glob, Read, PowerShell, Bash, Grep
|
|
5
|
+
disallowedTools: Edit, Write, Bash(git add *), Bash(git commit *), Bash(git push *), Bash(git checkout *), Bash(git merge *), Bash(git rebase *), Bash(git reset *), Bash(git clean *), Bash(rm *), Bash(del *), Bash(Remove-Item *), PowerShell(git add *), PowerShell(git commit *), PowerShell(git push *), PowerShell(git checkout *), PowerShell(git merge *), PowerShell(git rebase *), PowerShell(git reset *), PowerShell(git clean *), PowerShell(rm *), PowerShell(del *), PowerShell(Remove-Item *)
|
|
6
|
+
model: inherit
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are a techlead-loop reviewer. You inherit no builder context and no Lead
|
|
10
|
+
discussion. Use only the fixed reviewer template supplied by the Lead.
|
|
11
|
+
|
|
12
|
+
Duties:
|
|
13
|
+
|
|
14
|
+
- Read the frozen check file named in the prompt.
|
|
15
|
+
- Read `docs/jobs/<issue-slug>-rulings.md` when present. It is Lead-owned,
|
|
16
|
+
append-only, frozen post-freeze intent; read it alongside the frozen check
|
|
17
|
+
file, spec, and job report. If it is absent or empty, record that there are no
|
|
18
|
+
post-freeze rulings.
|
|
19
|
+
- Check checks integrity with the freeze commit SHA and branch to review.
|
|
20
|
+
- Run each check command exactly as written, unless it is impossible to execute
|
|
21
|
+
in this environment; then return INVALID with raw evidence.
|
|
22
|
+
- Read the diff against the frozen spec intent. Tests passing is necessary, not
|
|
23
|
+
sufficient.
|
|
24
|
+
- Return verdicts only: per-check PASS / FAIL / INVALID, checks-integrity
|
|
25
|
+
PASS / FAIL / INVALID, diff-vs-intent PASS / FAIL / INVALID, raw evidence, and a
|
|
26
|
+
slice verdict.
|
|
27
|
+
- Post the verdict as an issue comment when `gh` is available; if `gh`/network is
|
|
28
|
+
unavailable, record that in the verdict evidence instead of faking the post.
|
|
29
|
+
- Your `tools:` order pads Bash and Read away from the first and last slot with
|
|
30
|
+
read-only tools because some harnesses drop those two positions at subagent
|
|
31
|
+
spawn.
|
|
32
|
+
- If Bash is absent at runtime, run check commands via the PowerShell tool
|
|
33
|
+
instead and record which executor ran each command.
|
|
34
|
+
- Flag only gaps that affect correctness, the stated requirements, or documented
|
|
35
|
+
project invariants — cite file:line evidence for every finding. Do not report
|
|
36
|
+
stylistic preferences.
|
|
37
|
+
|
|
38
|
+
Do not edit files, do not fix failures, do not stage changes, do not commit, and
|
|
39
|
+
do not add advice beyond the requested verdict fields.
|
package/README.md
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/readme-hero.png" alt="Builder's Essential Skills, shown as an original dark atelier of connected creative tools" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
<p align="center">
|
|
5
|
+
<strong>Builder's Essential Skills</strong><br>
|
|
6
|
+
A considered collection of reusable workflows for planning, building, researching, learning, validating, writing, and reviewing with Claude Code and Codex.
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="#pick-a-skill">Pick a skill</a> ·
|
|
11
|
+
<a href="#get-started">Get started</a> ·
|
|
12
|
+
<a href="#bring-your-own-workflow">Create a skill</a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
## Pick a skill
|
|
16
|
+
|
|
17
|
+
<table>
|
|
18
|
+
<tr>
|
|
19
|
+
<td width="50%" valign="top">
|
|
20
|
+
<a href="skills/lead/SKILL.md"><img src="assets/skill-cards/lead.svg" alt="lead — build and delivery skill" width="100%"></a>
|
|
21
|
+
</td>
|
|
22
|
+
<td width="50%" valign="top">
|
|
23
|
+
<a href="skills/lead-research/SKILL.md"><img src="assets/skill-cards/lead-research.svg" alt="lead-research — research and strategy skill" width="100%"></a>
|
|
24
|
+
</td>
|
|
25
|
+
</tr>
|
|
26
|
+
<tr>
|
|
27
|
+
<td width="50%" valign="top">
|
|
28
|
+
<a href="skills/async-learning-teacher/SKILL.md"><img src="assets/skill-cards/async-learning-teacher.svg" alt="async-learning-teacher — learning skill" width="100%"></a>
|
|
29
|
+
</td>
|
|
30
|
+
<td width="50%" valign="top">
|
|
31
|
+
<a href="skills/validate-market/SKILL.md"><img src="assets/skill-cards/validate-market.svg" alt="validate-market — product and market skill" width="100%"></a>
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
<tr>
|
|
35
|
+
<td width="50%" valign="top">
|
|
36
|
+
<a href="skills/write-blog/SKILL.md"><img src="assets/skill-cards/write-blog.svg" alt="write-blog — writing and growth skill" width="100%"></a>
|
|
37
|
+
</td>
|
|
38
|
+
<td width="50%" valign="top">
|
|
39
|
+
<a href="skills/orwell-writing/SKILL.md"><img src="assets/skill-cards/orwell-writing.svg" alt="orwell-writing — direct writing skill" width="100%"></a>
|
|
40
|
+
</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td width="50%" valign="top">
|
|
44
|
+
<a href="skills/code-standards/SKILL.md"><img src="assets/skill-cards/code-standards.svg" alt="code-standards — engineering quality skill" width="100%"></a>
|
|
45
|
+
</td>
|
|
46
|
+
<td width="50%" valign="top">
|
|
47
|
+
<a href="skills/session-profiler/SKILL.md"><img src="assets/skill-cards/session-profiler.svg" alt="session-profiler — developer tools skill" width="100%"></a>
|
|
48
|
+
</td>
|
|
49
|
+
</tr>
|
|
50
|
+
</table>
|
|
51
|
+
|
|
52
|
+
Every skill lives in `skills/<name>/SKILL.md`. Some also ship scripts,
|
|
53
|
+
reference material, or agent definitions that support the workflow.
|
|
54
|
+
|
|
55
|
+
## Why this exists
|
|
56
|
+
|
|
57
|
+
An AI agent is much more useful when it has a repeatable way to handle the
|
|
58
|
+
work. This collection packages practical workflows as portable skills: compact
|
|
59
|
+
instructions, scripts, references, and agent definitions that you can install,
|
|
60
|
+
adapt, and share.
|
|
61
|
+
|
|
62
|
+
Use the whole collection, or take only the skills your team needs.
|
|
63
|
+
|
|
64
|
+
## Get started
|
|
65
|
+
|
|
66
|
+
From the repository root, install every skill for the current user:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
./install.sh
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Once this repository is published to npm, install the collection from
|
|
73
|
+
anywhere with:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx @tamng0905/builder-essential-skills
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
To install into the repository you are currently in:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx @tamng0905/builder-essential-skills --project
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
To install only one skill:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx @tamng0905/builder-essential-skills --skill lead
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Add `--project` to that command to install the selected skill into the current
|
|
92
|
+
repository.
|
|
93
|
+
|
|
94
|
+
The `npx` command installs the same files as the scripts below. It supports
|
|
95
|
+
macOS, Linux, and Windows wherever Node.js 18 or newer is available.
|
|
96
|
+
|
|
97
|
+
On Windows:
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
./install.ps1
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Restart Claude Code or Codex, then invoke a skill in plain English:
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
/lead Build the smallest version of this feature and open a PR.
|
|
107
|
+
$async-learning-teacher Teach me this paper step by step: https://arxiv.org/abs/...
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Want to try the collection inside one repository first? Install it locally
|
|
111
|
+
instead:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
./install.sh --project
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
```powershell
|
|
118
|
+
./install.ps1 -Project
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The project install uses `.claude/skills` and `.codex/skills`, so it stays
|
|
122
|
+
with that repository rather than changing your user-level setup.
|
|
123
|
+
|
|
124
|
+
## What gets installed
|
|
125
|
+
|
|
126
|
+
The installers copy each folder in `skills/` to the right location for your
|
|
127
|
+
agent and install the `lead` builder and reviewer agents for Claude Code.
|
|
128
|
+
|
|
129
|
+
| Install mode | Claude Code | Codex |
|
|
130
|
+
| --- | --- | --- |
|
|
131
|
+
| User | `~/.claude/skills` | `${CODEX_HOME:-~/.codex}/skills` |
|
|
132
|
+
| Current project | `.claude/skills` | `.codex/skills` |
|
|
133
|
+
|
|
134
|
+
You will need Claude Code and/or Codex, depending on which agent you use.
|
|
135
|
+
Python 3 is required for the `lead` routing helper and the
|
|
136
|
+
`session-profiler` tools. The Codex CLI is optional, but `lead` can use it for
|
|
137
|
+
builder jobs:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npm i -g @openai/codex@latest
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Go deeper
|
|
144
|
+
|
|
145
|
+
### Route models for `lead`
|
|
146
|
+
|
|
147
|
+
`lead` and `lead-research` can assign different models to roles such as
|
|
148
|
+
lead, builder, reviewer, researcher, scout, and critic. Inspect the active
|
|
149
|
+
routing before a run:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
python skills/lead/config.py
|
|
153
|
+
python skills/lead/config.py --role builder
|
|
154
|
+
python skills/lead/config.py --check
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Defaults live in `skills/lead/config.py` and `skills/lead/models.json`. Use
|
|
158
|
+
`.lead/config` for a repository override or `~/.lead/config` for a personal
|
|
159
|
+
default.
|
|
160
|
+
|
|
161
|
+
### Profile an agent session
|
|
162
|
+
|
|
163
|
+
After installation, point `SP` at the wrapper for your agent:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Claude Code install
|
|
167
|
+
SP="$HOME/.claude/skills/session-profiler/scripts/sp"
|
|
168
|
+
|
|
169
|
+
# Codex install
|
|
170
|
+
SP="${CODEX_HOME:-$HOME/.codex}/skills/session-profiler/scripts/sp"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Then explore your sessions:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
$SP list --provider codex --n 20
|
|
177
|
+
$SP info <session-id-or-jsonl-path>
|
|
178
|
+
$SP parse <session-id-or-jsonl-path>
|
|
179
|
+
$SP brief
|
|
180
|
+
$SP agent-summary
|
|
181
|
+
$SP costs
|
|
182
|
+
$SP slowest-tools --n 20
|
|
183
|
+
$SP errors
|
|
184
|
+
$SP turns
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Generate richer artifacts:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
$SP toc
|
|
191
|
+
$SP review
|
|
192
|
+
$SP trace
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
`brief` writes a scan-friendly `brief.md` with headline metrics, standout slow
|
|
196
|
+
paths or failures, a prompt trail or TOC storyline, and an agent scoreboard. The
|
|
197
|
+
Perfetto trace adds an overview lane, labeled TOC phases, per-agent work lanes,
|
|
198
|
+
prompt lanes, and cumulative token/cost counters.
|
|
199
|
+
|
|
200
|
+
Cost reports are estimates based on public model pricing, not billing records.
|
|
201
|
+
Session files and traces can include prompts, code, file paths, and other
|
|
202
|
+
sensitive project context. Review them before sharing.
|
|
203
|
+
|
|
204
|
+
## Repository map
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
skills/ The skill collection
|
|
208
|
+
<skill>/SKILL.md Each skill's entry point and workflow
|
|
209
|
+
assets/readme-hero.png README banner
|
|
210
|
+
.claude/agents/ Builder and reviewer agents for lead
|
|
211
|
+
install.sh macOS/Linux installer
|
|
212
|
+
install.ps1 Windows installer
|
|
213
|
+
package.json npm package metadata and npx entrypoint
|
|
214
|
+
bin/builder-essential-skills.js cross-platform npx installer
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Publish the installer
|
|
218
|
+
|
|
219
|
+
Choose an available npm package name in `package.json`, authenticate with npm,
|
|
220
|
+
then publish from the repository root:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
npm login
|
|
224
|
+
npm publish --access public
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
npm requires either 2FA enabled on the account, followed by the one-time code
|
|
228
|
+
requested by `npm publish`, or a granular access token with read/write access
|
|
229
|
+
and **Bypass two-factor authentication** enabled. For a local interactive
|
|
230
|
+
publish, enabling 2FA and running `npm login` again is the simplest option.
|
|
231
|
+
Never commit an access token; use npm's login flow or a secure CI secret.
|
|
232
|
+
|
|
233
|
+
After publishing, users can run `npx @tamng0905/builder-essential-skills` without cloning the
|
|
234
|
+
repository. Bump the version in `package.json` for each subsequent publish.
|
|
235
|
+
|
|
236
|
+
## Bring your own workflow
|
|
237
|
+
|
|
238
|
+
Start with one folder:
|
|
239
|
+
|
|
240
|
+
```text
|
|
241
|
+
skills/my-skill/
|
|
242
|
+
SKILL.md
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Give `SKILL.md` clear frontmatter and a focused workflow:
|
|
246
|
+
|
|
247
|
+
```markdown
|
|
248
|
+
---
|
|
249
|
+
name: my-skill
|
|
250
|
+
description: Explain when an agent should use this skill.
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
# My Skill
|
|
254
|
+
|
|
255
|
+
Write the workflow, rules, examples, and expected output here.
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Keep skills easy to move between projects:
|
|
259
|
+
|
|
260
|
+
- Avoid hard-coding a company, repository, branch, or tool unless the skill is intentionally private.
|
|
261
|
+
- Put reusable scripts beside the skill instead of relying on global shell state.
|
|
262
|
+
- Include request examples that show exactly when the skill should run.
|
|
263
|
+
- Create `assets/skill-cards/<name>.svg` for each new skill and add it to the
|
|
264
|
+
README's "Pick a skill" table.
|
|
265
|
+
- Never put credentials, tokens, or private data in a skill folder.
|
|
266
|
+
|
|
267
|
+
Re-run the installer after adding or changing a skill:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
./install.sh
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## License
|
|
274
|
+
|
|
275
|
+
Add the license that matches how you want others to use this collection before
|
|
276
|
+
publishing it broadly.
|
|
Binary file
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">async-learning-teacher skill card</title><desc id="desc">A Builder's Essential Skill for turning materials into clear learning.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#181519"/><stop offset="1" stop-color="#0b0b10"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="16"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#0b0a0d"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#765d84" stroke-opacity=".6"/><circle cx="966" cy="164" r="120" fill="#9875b5" fill-opacity=".2" filter="url(#glow)"/><path d="M78 532C275 532 359 204 608 204s278 264 516 264" fill="none" stroke="#b292d4" stroke-opacity=".72" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#c7b2d3" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 03</text><text x="78" y="204" fill="#f5eff7" font-family="Arial, Helvetica, sans-serif" font-size="55" font-weight="700">async-learning-teacher</text><text x="80" y="258" fill="#cbc4cf" font-family="Arial, Helvetica, sans-serif" font-size="28">Turn dense material into a paced lesson, study guide,</text><text x="80" y="296" fill="#cbc4cf" font-family="Arial, Helvetica, sans-serif" font-size="28">or interactive tutoring session.</text>
|
|
6
|
+
<g transform="translate(848 112)" fill="none" stroke="#c0a0dc" stroke-width="5"><path d="M12 38q80-30 160 0v126q-80-30-160 0zM92 24v144"/><path d="M38 76h40M38 104h40M106 76h40M106 104h40"/></g><rect x="78" y="376" width="1044" height="1" fill="#b79bc3" fill-opacity=".35"/><text x="78" y="432" fill="#b99cc5" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#f3edf6" font-family="Arial, Helvetica, sans-serif" font-size="29">Learning</text><text x="520" y="432" fill="#b99cc5" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#f3edf6" font-family="Arial, Helvetica, sans-serif" font-size="29">Understanding that stays with you</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#1a1620" stroke="#765a82"/><text x="104" y="596" fill="#dfc9ef" font-family="monospace" font-size="19">$async-learning-teacher Teach me this paper.</text><circle cx="1058" cy="586" r="30" fill="#a884bd"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#1a1020" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">code-standards skill card</title><desc id="desc">A Builder's Essential Skill for disciplined engineering changes.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#11161d"/><stop offset="1" stop-color="#080b10"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="16"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#080a0d"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#536f8a" stroke-opacity=".65"/><circle cx="971" cy="164" r="118" fill="#587daa" fill-opacity=".18" filter="url(#glow)"/><path d="M72 540C294 540 358 194 618 194s269 286 506 286" fill="none" stroke="#72a1cf" stroke-opacity=".76" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#a7c2d8" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 07</text><text x="78" y="204" fill="#ecf4fa" font-family="Arial, Helvetica, sans-serif" font-size="64" font-weight="700">code-standards</text><text x="80" y="258" fill="#c1cbd3" font-family="Arial, Helvetica, sans-serif" font-size="28">Keep an engineering change focused: understand the code,</text><text x="80" y="296" fill="#c1cbd3" font-family="Arial, Helvetica, sans-serif" font-size="28">make the smallest change, then prove it.</text>
|
|
6
|
+
<g transform="translate(849 112)" fill="none" stroke="#83b3df" stroke-width="5"><path d="M55 29 10 92l45 63M125 29l45 63-45 63M73 166h54"/><path d="m83 92 17 17 35-41"/></g><rect x="78" y="376" width="1044" height="1" fill="#96b2c9" fill-opacity=".35"/><text x="78" y="432" fill="#9ebad0" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#edf5fb" font-family="Arial, Helvetica, sans-serif" font-size="29">Engineering quality</text><text x="520" y="432" fill="#9ebad0" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#edf5fb" font-family="Arial, Helvetica, sans-serif" font-size="29">A reviewable change with proof</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#101924" stroke="#4e718e"/><text x="104" y="596" fill="#c6ddf0" font-family="monospace" font-size="17">$code-standards Fix this bug using the project workflow.</text><circle cx="1058" cy="586" r="30" fill="#6393c0"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#091521" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">lead-research skill card</title><desc id="desc">A Builder's Essential Skill for source-grounded strategic research.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#121719"/><stop offset="1" stop-color="#080b0c"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="16"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#080a0b"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#587276" stroke-opacity=".55"/><circle cx="976" cy="166" r="118" fill="#5a9b94" fill-opacity=".18" filter="url(#glow)"/><path d="M74 540C305 540 350 182 620 182s277 294 504 294" fill="none" stroke="#78b4aa" stroke-opacity=".74" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#a9c1bc" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 02</text><text x="78" y="204" fill="#eff6f1" font-family="Arial, Helvetica, sans-serif" font-size="64" font-weight="700">lead-research</text><text x="80" y="258" fill="#c1cac6" font-family="Arial, Helvetica, sans-serif" font-size="28">Map a decision, investigate the field, and make</text><text x="80" y="296" fill="#c1cac6" font-family="Arial, Helvetica, sans-serif" font-size="28">a source-grounded recommendation.</text>
|
|
6
|
+
<g transform="translate(848 116)" fill="none" stroke="#83c1b6" stroke-width="5"><circle cx="93" cy="93" r="64"/><path d="m140 140 52 52M93 45v96M45 93h96"/><circle cx="93" cy="93" r="10" fill="#83c1b6"/></g><rect x="78" y="376" width="1044" height="1" fill="#90b2a8" fill-opacity=".35"/><text x="78" y="432" fill="#89ada3" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#edf5ef" font-family="Arial, Helvetica, sans-serif" font-size="29">Research & strategy</text><text x="520" y="432" fill="#89ada3" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#edf5ef" font-family="Arial, Helvetica, sans-serif" font-size="29">Evidence you can act on</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#131a1a" stroke="#50766d"/><text x="104" y="596" fill="#bfe0d6" font-family="monospace" font-size="20">/lead-research Research the best approach.</text><circle cx="1058" cy="586" r="30" fill="#6ca99d"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#0d1715" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">lead skill card</title><desc id="desc">A Builder's Essential Skill for taking a product goal through delivery.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#171411"/><stop offset="1" stop-color="#090a0d"/></linearGradient><linearGradient id="line" x1="0" y1="0" x2="1" y2="0"><stop stop-color="#b87537" stop-opacity="0"/><stop offset=".5" stop-color="#e0b06e"/><stop offset="1" stop-color="#7162a2" stop-opacity=".2"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="14"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#0b0b0c"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#6c5a40" stroke-opacity=".52"/><circle cx="985" cy="160" r="112" fill="#7d5eab" fill-opacity=".22" filter="url(#glow)"/><path d="M70 552C310 552 350 212 640 212s230 306 486 306" fill="none" stroke="url(#line)" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#c4b79f" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 01</text><text x="78" y="204" fill="#f6f0e5" font-family="Arial, Helvetica, sans-serif" font-size="64" font-weight="700">lead</text><text x="80" y="258" fill="#c6c1b9" font-family="Arial, Helvetica, sans-serif" font-size="28">Turn a product goal into a planned, built,</text><text x="80" y="296" fill="#c6c1b9" font-family="Arial, Helvetica, sans-serif" font-size="28">reviewed, and verified pull request.</text>
|
|
6
|
+
<g transform="translate(844 150)" fill="none" stroke="#e0b06e" stroke-width="5"><path d="M0 152 84 0l84 152z"/><path d="M42 76h84"/><circle cx="84" cy="76" r="14" fill="#e0b06e"/></g><rect x="78" y="376" width="1044" height="1" fill="#9c896c" fill-opacity=".35"/><text x="78" y="432" fill="#b7a27d" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#f3eee5" font-family="Arial, Helvetica, sans-serif" font-size="29">Build & delivery</text><text x="520" y="432" fill="#b7a27d" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#f3eee5" font-family="Arial, Helvetica, sans-serif" font-size="29">A clear path from goal to proof</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#191817" stroke="#806745"/><text x="104" y="596" fill="#e6d4b7" font-family="monospace" font-size="20">/lead Build this feature and prepare one PR.</text><circle cx="1058" cy="586" r="30" fill="#c18a4e"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#14110e" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">orwell-writing skill card</title><desc id="desc">A Builder's Essential Skill for clear, direct writing.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#151917"/><stop offset="1" stop-color="#0a0d0c"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="16"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#090b0a"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#5d7769" stroke-opacity=".6"/><circle cx="975" cy="165" r="118" fill="#6d9c80" fill-opacity=".17" filter="url(#glow)"/><path d="M72 540C300 540 358 197 620 197s267 287 504 287" fill="none" stroke="#83ae90" stroke-opacity=".72" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#b0c9b6" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 06</text><text x="78" y="204" fill="#f0f7ef" font-family="Arial, Helvetica, sans-serif" font-size="64" font-weight="700">orwell-writing</text><text x="80" y="258" fill="#c2cec3" font-family="Arial, Helvetica, sans-serif" font-size="28">Edit prose until it says what it means: direct, specific,</text><text x="80" y="296" fill="#c2cec3" font-family="Arial, Helvetica, sans-serif" font-size="28">and free of filler.</text>
|
|
6
|
+
<g transform="translate(850 108)" fill="none" stroke="#99c5a5" stroke-width="5"><path d="M23 28h132v150H23zM52 68h75M52 98h75M52 128h45"/><path d="m61 172 18 18 43-51"/></g><rect x="78" y="376" width="1044" height="1" fill="#9bb9a0" fill-opacity=".35"/><text x="78" y="432" fill="#9fbda5" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#eff6f0" font-family="Arial, Helvetica, sans-serif" font-size="29">Writing</text><text x="520" y="432" fill="#9fbda5" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#eff6f0" font-family="Arial, Helvetica, sans-serif" font-size="29">Clearer language, still your voice</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#131b16" stroke="#537563"/><text x="104" y="596" fill="#c8e1cd" font-family="monospace" font-size="19">/orwell-writing Rewrite this in plain English.</text><circle cx="1058" cy="586" r="30" fill="#78a987"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#0d180f" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">session-profiler skill card</title><desc id="desc">A Builder's Essential Skill for seeing how an agent session performed.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#16131a"/><stop offset="1" stop-color="#0c0b10"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="16"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#0b0a0d"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#70577e" stroke-opacity=".62"/><circle cx="972" cy="164" r="118" fill="#9a65b0" fill-opacity=".18" filter="url(#glow)"/><path d="M72 540C298 540 358 202 620 202s269 282 504 282" fill="none" stroke="#ac7cc1" stroke-opacity=".75" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#c2aaca" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 08</text><text x="78" y="204" fill="#f6edf8" font-family="Arial, Helvetica, sans-serif" font-size="64" font-weight="700">session-profiler</text><text x="80" y="258" fill="#ccc3d0" font-family="Arial, Helvetica, sans-serif" font-size="28">Make an agent session visible: timing, tool calls, token use,</text><text x="80" y="296" fill="#ccc3d0" font-family="Arial, Helvetica, sans-serif" font-size="28">errors, subagents, and traces.</text>
|
|
6
|
+
<g transform="translate(849 109)" fill="none" stroke="#c194d2" stroke-width="5"><path d="M21 158V30h156v128zM47 130V94l31-28 30 21 29-39 19 18v64"/><circle cx="78" cy="66" r="7" fill="#c194d2"/><circle cx="108" cy="87" r="7" fill="#c194d2"/><circle cx="137" cy="48" r="7" fill="#c194d2"/></g><rect x="78" y="376" width="1044" height="1" fill="#af91ba" fill-opacity=".35"/><text x="78" y="432" fill="#b494c0" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#f5edf7" font-family="Arial, Helvetica, sans-serif" font-size="29">Developer tools</text><text x="520" y="432" fill="#b494c0" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#f5edf7" font-family="Arial, Helvetica, sans-serif" font-size="29">The story behind the session</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#1a1420" stroke="#745c82"/><text x="104" y="596" fill="#dac2e4" font-family="monospace" font-size="17">$session-profiler Profile my latest Codex session.</text><circle cx="1058" cy="586" r="30" fill="#a677b7"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#190d20" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">validate-market skill card</title><desc id="desc">A Builder's Essential Skill for testing market demand.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#181611"/><stop offset="1" stop-color="#0d0d09"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="16"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#0d0c09"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#7a724a" stroke-opacity=".62"/><circle cx="972" cy="165" r="117" fill="#b2a45c" fill-opacity=".18" filter="url(#glow)"/><path d="M72 540C300 540 357 205 624 205s259 286 500 286" fill="none" stroke="#c4b56c" stroke-opacity=".76" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#c9c093" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 04</text><text x="78" y="204" fill="#f7f4e6" font-family="Arial, Helvetica, sans-serif" font-size="64" font-weight="700">validate-market</text><text x="80" y="258" fill="#ceccbd" font-family="Arial, Helvetica, sans-serif" font-size="28">Test whether a product idea has real demand, a credible</text><text x="80" y="296" fill="#ceccbd" font-family="Arial, Helvetica, sans-serif" font-size="28">position, and a worthwhile next step.</text>
|
|
6
|
+
<g transform="translate(851 112)" fill="none" stroke="#d1c574" stroke-width="5"><circle cx="91" cy="91" r="70"/><path d="m91 27 20 42 46 7-33 33 8 46-41-22-41 22 8-46-33-33 46-7z"/><circle cx="91" cy="91" r="10" fill="#d1c574"/></g><rect x="78" y="376" width="1044" height="1" fill="#b9b17d" fill-opacity=".35"/><text x="78" y="432" fill="#c1b978" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#f4f1e5" font-family="Arial, Helvetica, sans-serif" font-size="29">Product & market</text><text x="520" y="432" fill="#c1b978" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#f4f1e5" font-family="Arial, Helvetica, sans-serif" font-size="29">An honest case for the next move</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#1c1a10" stroke="#847b48"/><text x="104" y="596" fill="#e2daab" font-family="monospace" font-size="19">/validate-market Audit this idea's market fit.</text><circle cx="1058" cy="586" r="30" fill="#b0a45e"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#171407" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 760" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">write-blog skill card</title><desc id="desc">A Builder's Essential Skill for publishing a blog post with a human voice.</desc>
|
|
3
|
+
<defs><linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#1a1411"/><stop offset="1" stop-color="#0e0b0a"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="16"/></filter></defs>
|
|
4
|
+
<rect width="1200" height="760" fill="#0d0a09"/><rect x="24" y="24" width="1152" height="712" rx="28" fill="url(#bg)" stroke="#805e47" stroke-opacity=".62"/><circle cx="974" cy="164" r="118" fill="#bf7951" fill-opacity=".18" filter="url(#glow)"/><path d="M72 540C295 540 360 198 620 198s273 290 504 290" fill="none" stroke="#cf8558" stroke-opacity=".75" stroke-width="3"/>
|
|
5
|
+
<text x="78" y="106" fill="#d0ad96" font-family="Arial, Helvetica, sans-serif" font-size="17" font-weight="700" letter-spacing="3">BUILDER'S ESSENTIAL SKILLS / 05</text><text x="78" y="204" fill="#f9eee8" font-family="Arial, Helvetica, sans-serif" font-size="64" font-weight="700">write-blog</text><text x="80" y="258" fill="#d5c4bc" font-family="Arial, Helvetica, sans-serif" font-size="28">Find a strong angle, draft in a human voice, and help</text><text x="80" y="296" fill="#d5c4bc" font-family="Arial, Helvetica, sans-serif" font-size="28">ship a blog post that earns attention.</text>
|
|
6
|
+
<g transform="translate(852 106)" fill="none" stroke="#e09a6e" stroke-width="5"><path d="m22 155 35-9 104-104-26-26L31 120zM118 33l26 26"/><path d="M25 171h150M49 193h101"/><path d="M46 131 67 152"/></g><rect x="78" y="376" width="1044" height="1" fill="#c69c84" fill-opacity=".35"/><text x="78" y="432" fill="#ca9f86" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">DISCIPLINE</text><text x="78" y="476" fill="#f8eeea" font-family="Arial, Helvetica, sans-serif" font-size="29">Writing & growth</text><text x="520" y="432" fill="#ca9f86" font-family="Arial, Helvetica, sans-serif" font-size="16" font-weight="700" letter-spacing="2">PROMISE</text><text x="520" y="476" fill="#f8eeea" font-family="Arial, Helvetica, sans-serif" font-size="29">A post people want to read</text><rect x="78" y="554" width="780" height="66" rx="12" fill="#211612" stroke="#8f6049"/><text x="104" y="596" fill="#edc3ab" font-family="monospace" font-size="19">/write-blog Write a launch post for this project.</text><circle cx="1058" cy="586" r="30" fill="#c47b55"/><path d="m1048 586 8 8 15-17" fill="none" stroke="#1a0e0a" stroke-width="5"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("node:fs");
|
|
4
|
+
const os = require("node:os");
|
|
5
|
+
const path = require("node:path");
|
|
6
|
+
|
|
7
|
+
const packageRoot = path.resolve(__dirname, "..");
|
|
8
|
+
const packageName = require(path.join(packageRoot, "package.json")).name;
|
|
9
|
+
const npxCommand = `npx ${packageName}`;
|
|
10
|
+
const skillsSource = path.join(packageRoot, "skills");
|
|
11
|
+
const agentsSource = path.join(packageRoot, ".claude", "agents");
|
|
12
|
+
|
|
13
|
+
function printHelp() {
|
|
14
|
+
console.log(`Install Builder's Essential Skills.
|
|
15
|
+
|
|
16
|
+
Usage:
|
|
17
|
+
${npxCommand} [--skill <name>] [--project]
|
|
18
|
+
|
|
19
|
+
Options:
|
|
20
|
+
-s, --skill Install one skill instead of the full collection
|
|
21
|
+
-p, --project Install into the current repository instead of your user home
|
|
22
|
+
-h, --help Show this help message
|
|
23
|
+
|
|
24
|
+
User install locations:
|
|
25
|
+
Claude Code ~/.claude/skills and ~/.claude/agents
|
|
26
|
+
Codex $CODEX_HOME/skills (or ~/.codex/skills)
|
|
27
|
+
|
|
28
|
+
Project install locations:
|
|
29
|
+
.claude/skills, .claude/agents, and .codex/skills in the current directory
|
|
30
|
+
`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function parseArgs(args) {
|
|
34
|
+
let project = false;
|
|
35
|
+
let skill = null;
|
|
36
|
+
|
|
37
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
38
|
+
const arg = args[index];
|
|
39
|
+
if (arg === "-p" || arg === "--project") {
|
|
40
|
+
project = true;
|
|
41
|
+
} else if (arg === "-s" || arg === "--skill") {
|
|
42
|
+
const value = args[index + 1];
|
|
43
|
+
if (!value || value.startsWith("-")) {
|
|
44
|
+
console.error("Missing skill name after --skill.");
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
skill = value;
|
|
48
|
+
index += 1;
|
|
49
|
+
} else if (arg === "-h" || arg === "--help") {
|
|
50
|
+
printHelp();
|
|
51
|
+
process.exit(0);
|
|
52
|
+
} else {
|
|
53
|
+
console.error(`Unknown option: ${arg}`);
|
|
54
|
+
console.error(`Run \`${npxCommand} --help\` for usage.`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return { project, skill };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function installDirectory(source, destination, label, selectedSkill) {
|
|
63
|
+
fs.mkdirSync(destination, { recursive: true });
|
|
64
|
+
|
|
65
|
+
for (const entry of fs.readdirSync(source, { withFileTypes: true })) {
|
|
66
|
+
if (!entry.isDirectory() || (selectedSkill && entry.name !== selectedSkill)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const sourcePath = path.join(source, entry.name);
|
|
71
|
+
const destinationPath = path.join(destination, entry.name);
|
|
72
|
+
fs.rmSync(destinationPath, { recursive: true, force: true });
|
|
73
|
+
fs.cpSync(sourcePath, destinationPath, { recursive: true });
|
|
74
|
+
removePythonCaches(destinationPath);
|
|
75
|
+
console.log(`Installed ${label} /${entry.name} to ${destinationPath}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function removePythonCaches(root) {
|
|
80
|
+
for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
|
|
81
|
+
const entryPath = path.join(root, entry.name);
|
|
82
|
+
if (entry.isDirectory() && entry.name === "__pycache__") {
|
|
83
|
+
fs.rmSync(entryPath, { recursive: true, force: true });
|
|
84
|
+
} else if (entry.isDirectory()) {
|
|
85
|
+
removePythonCaches(entryPath);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function installAgents(destination) {
|
|
91
|
+
if (!fs.existsSync(agentsSource)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
fs.mkdirSync(destination, { recursive: true });
|
|
96
|
+
for (const entry of fs.readdirSync(agentsSource, { withFileTypes: true })) {
|
|
97
|
+
if (!entry.isFile()) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const destinationPath = path.join(destination, entry.name);
|
|
102
|
+
fs.cpSync(path.join(agentsSource, entry.name), destinationPath);
|
|
103
|
+
console.log(`Installed agent ${entry.name} to ${destinationPath}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function main() {
|
|
108
|
+
const { project, skill } = parseArgs(process.argv.slice(2));
|
|
109
|
+
const availableSkills = fs
|
|
110
|
+
.readdirSync(skillsSource, { withFileTypes: true })
|
|
111
|
+
.filter((entry) => entry.isDirectory())
|
|
112
|
+
.map((entry) => entry.name);
|
|
113
|
+
|
|
114
|
+
if (skill && !availableSkills.includes(skill)) {
|
|
115
|
+
console.error(`Unknown skill: ${skill}`);
|
|
116
|
+
console.error(`Available skills: ${availableSkills.join(", ")}`);
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const root = project ? process.cwd() : os.homedir();
|
|
121
|
+
const codexHome = process.env.CODEX_HOME || path.join(os.homedir(), ".codex");
|
|
122
|
+
const claudeRoot = path.join(root, ".claude");
|
|
123
|
+
const codexRoot = project ? path.join(root, ".codex") : codexHome;
|
|
124
|
+
|
|
125
|
+
installDirectory(skillsSource, path.join(claudeRoot, "skills"), "Claude", skill);
|
|
126
|
+
installDirectory(skillsSource, path.join(codexRoot, "skills"), "Codex", skill);
|
|
127
|
+
if (!skill || skill === "lead") {
|
|
128
|
+
installAgents(path.join(claudeRoot, "agents"));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
console.log("\nRestart Claude Code or Codex to load the installed skills.");
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
main();
|