ethan-agent-skills 0.1.0 β†’ 0.2.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.
Files changed (38) hide show
  1. package/README.md +157 -5
  2. package/package.json +1 -1
  3. package/skills/fix-my-life/SKILL.md +57 -0
  4. package/skills/fix-my-life/phase-1-excavation.md +98 -0
  5. package/skills/fix-my-life/phase-2-design.md +141 -0
  6. package/skills/fix-my-life/phase-3-commit.md +124 -0
  7. package/skills/fix-my-life/skill.json +5 -0
  8. package/skills/pdf-extract/SKILL.md +42 -160
  9. package/skills/pdf-extract/references/manual-implementation.md +141 -0
  10. package/skills/pdf-extract/scripts/pdf_extract.py +97 -5
  11. package/skills/pdf-extract/skill.json +2 -2
  12. package/skills/skill-evolution/.env.example +11 -0
  13. package/skills/skill-evolution/CONTRIBUTING.md +53 -0
  14. package/skills/skill-evolution/LICENSE +21 -0
  15. package/skills/skill-evolution/README.md +254 -0
  16. package/skills/skill-evolution/ROADMAP.md +32 -0
  17. package/skills/skill-evolution/SKILL.md +66 -0
  18. package/skills/skill-evolution/references/eval-mode.md +73 -0
  19. package/skills/skill-evolution/references/maturity.md +44 -0
  20. package/skills/skill-evolution/references/merge.md +87 -0
  21. package/skills/skill-evolution/references/publish.md +78 -0
  22. package/skills/skill-evolution/references/reflect-mode.md +69 -0
  23. package/skills/skill-evolution/references/search.md +77 -0
  24. package/skills/skill-evolution/references/structure.md +156 -0
  25. package/skills/skill-evolution/scripts/audit.py +206 -0
  26. package/skills/skill-evolution/scripts/install.py +163 -0
  27. package/skills/skill-evolution/scripts/lib/__init__.py +60 -0
  28. package/skills/skill-evolution/scripts/lib/supabase.py +128 -0
  29. package/skills/skill-evolution/scripts/merge.py +269 -0
  30. package/skills/skill-evolution/scripts/publish.py +325 -0
  31. package/skills/skill-evolution/scripts/review.py +155 -0
  32. package/skills/skill-evolution/scripts/search.py +152 -0
  33. package/skills/skill-evolution/scripts/uninstall.py +73 -0
  34. package/skills/skill-evolution/setup.sql +357 -0
  35. package/skills/skill-evolution/skill.json +5 -0
  36. package/skills/smzdm-picks/SKILL.md +108 -0
  37. package/skills/smzdm-picks/scripts/fetch.sh +296 -0
  38. package/skills/smzdm-picks/skill.json +5 -0
package/README.md CHANGED
@@ -25,6 +25,9 @@ npx -y ethan-agent-skills@latest update --target /tmp/test-skills
25
25
  npx -y ethan-agent-skills@latest list
26
26
  ```
27
27
 
28
+ Current common bundled skills include `pdf-extract`, `skill-evolution`,
29
+ `fix-my-life`, and `smzdm-picks`, plus the client-specific OpenSpec OPSX skills.
30
+
28
31
  The updater writes `.skills-lock.json` in each target skill root and only
29
32
  rewrites skills managed by this package. If a destination skill directory exists
30
33
  but is not recorded in the lock file, the updater reports a conflict and leaves
@@ -88,8 +91,14 @@ npm login
88
91
  npm publish --access public
89
92
  ```
90
93
 
94
+ ### Automated Release Workflow
95
+
91
96
  This repo includes `.github/workflows/publish.yml` for automated publishing
92
- with npm Trusted Publishing. To enable it:
97
+ with npm Trusted Publishing. The package `ethan-agent-skills@0.1.0` has already
98
+ been published manually, so do not create or push a `v0.1.0` tag now. That tag
99
+ would try to publish the same version again and fail.
100
+
101
+ One-time setup:
93
102
 
94
103
  1. Push this repository to GitHub.
95
104
  2. On npmjs.com, open the package settings for `ethan-agent-skills`.
@@ -98,16 +107,159 @@ with npm Trusted Publishing. To enable it:
98
107
  - Organization or user: `EthenZhang`
99
108
  - Repository: `my_agent_skill`
100
109
  - Workflow filename: `publish.yml`
101
- 4. Push a semver tag:
110
+ Trusted Publishing uses GitHub OIDC, so no long-lived `NPM_TOKEN` secret is
111
+ required.
112
+
113
+ Normal release flow:
102
114
 
103
115
  ```bash
116
+ npm run test:local
117
+ npm run pack:check
104
118
  npm version patch
105
119
  git push --follow-tags
106
120
  ```
107
121
 
108
- The workflow runs validation and publishes to npm when tags matching `v*.*.*`
109
- are pushed. It can also be started manually from the GitHub Actions tab. Trusted
110
- Publishing uses GitHub OIDC, so no long-lived `NPM_TOKEN` secret is required.
122
+ `npm version patch` updates `package.json` and `package-lock.json`, creates a
123
+ commit, and creates a tag like `v0.1.1`. Pushing the tag triggers the workflow,
124
+ which runs validation and publishes the tagged version to npm.
125
+
126
+ ### Publishing Skill Updates
127
+
128
+ When you change a skill, a normal `git push origin main` only updates GitHub.
129
+ It does not publish a new npm version. To make the change available through
130
+ `npx -y ethan-agent-skills@latest update`, publish a new package version:
131
+
132
+ ```bash
133
+ # Edit skill files first, then:
134
+ npm run test:local
135
+ npm run pack:check
136
+ git add .
137
+ git commit -m "Update <skill-name> skill"
138
+ npm version patch
139
+ git push --follow-tags
140
+ ```
141
+
142
+ Use `patch` for routine skill edits and fixes. Use `minor` when adding a new
143
+ skill or a meaningful new CLI capability. Use `major` only for breaking changes.
144
+
145
+ After the GitHub Actions publish job succeeds, users can refresh local skills:
146
+
147
+ ```bash
148
+ npx -y ethan-agent-skills@latest update
149
+ ```
150
+
151
+ For minor or major releases, use:
152
+
153
+ ```bash
154
+ npm version minor
155
+ # or
156
+ npm version major
157
+ git push --follow-tags
158
+ ```
159
+
160
+ If the workflow fails:
161
+
162
+ - Check the GitHub Actions run logs first.
163
+ - If npm says the version already exists, bump to a new version and push a new
164
+ tag.
165
+ - If npm says trusted publishing is not configured, confirm the npm package
166
+ settings still point to `EthenZhang/my_agent_skill` and `publish.yml`.
167
+
168
+ The workflow can also be started manually from the GitHub Actions tab, but tag
169
+ pushes are the preferred release path because they tie npm versions to Git
170
+ history.
171
+
172
+ ### Importing Existing Local Skills
173
+
174
+ Use this flow when a useful skill already exists under a local agent directory
175
+ such as `~/.claude/skills/<skill-dir>` and should become part of this package.
176
+
177
+ 1. Choose the package destination:
178
+ - Put cross-client skills in `skills/<skill-dir>`.
179
+ - Put Claude-only skills in `claude/skills/<skill-dir>`.
180
+ - Put Codex-only skills in `codex/skills/<skill-dir>`.
181
+ - Put source-command or agent-only skills in `agents/skills/<skill-dir>`.
182
+ 2. Inspect the source before copying:
183
+
184
+ ```bash
185
+ SOURCE="$HOME/.claude/skills/<skill-dir>"
186
+ rg --files -uu "$SOURCE"
187
+ rg -n "(secret|password|token|api[_-]?key|PRIVATE|sk-[A-Za-z0-9])" "$SOURCE"
188
+ ```
189
+
190
+ Do not copy real `.env` files, private keys, generated caches, or unrelated
191
+ local state. Placeholder files such as `.env.example` are fine.
192
+
193
+ 3. Copy the skill into the package:
194
+
195
+ ```bash
196
+ DEST="skills/<skill-dir>"
197
+ rm -rf "$DEST"
198
+ cp -R "$SOURCE" "$DEST"
199
+ find "$DEST" -type d -name "__pycache__" -prune -exec rm -rf {} +
200
+ find "$DEST" -name "*.pyc" -delete
201
+ ```
202
+
203
+ 4. Add or update `skill.json` beside `SKILL.md`:
204
+
205
+ ```json
206
+ {
207
+ "name": "<trigger-or-display-name>",
208
+ "version": "0.1.0",
209
+ "description": "Short description used by the package list command."
210
+ }
211
+ ```
212
+
213
+ Keep the `SKILL.md` frontmatter name unchanged when the existing trigger name
214
+ should remain stable. For example, a directory can be `skill-evolution` while
215
+ the skill frontmatter name remains `skill-dev`.
216
+
217
+ 5. Verify local discovery and install behavior:
218
+
219
+ ```bash
220
+ node bin/skills.mjs list
221
+ node bin/skills.mjs update --dry-run --target /tmp/test-skills --client claude
222
+ npm run test:local
223
+ npm run pack:check
224
+ ```
225
+
226
+ `npm run pack:check` should show the new `SKILL.md`, `skill.json`, references,
227
+ and scripts in the tarball contents.
228
+
229
+ 6. Commit and push the imported skill:
230
+
231
+ ```bash
232
+ git status --short
233
+ git add README.md skills/<skill-dir>
234
+ git commit -m "Add <skill-dir> skill"
235
+ ```
236
+
237
+ Adjust the `git add` path if the skill was copied into `claude/`, `codex/`, or
238
+ `agents/` instead of `skills/`.
239
+
240
+ 7. Publish a new npm version:
241
+
242
+ ```bash
243
+ npm version minor
244
+ git push --follow-tags
245
+ ```
246
+
247
+ Use `minor` for adding a new skill. Use `patch` if the skill was already
248
+ published and only its content changed.
249
+
250
+ 8. Confirm the automated release:
251
+
252
+ ```bash
253
+ npm view ethan-agent-skills version --json
254
+ npx -y ethan-agent-skills@latest list
255
+ npx -y ethan-agent-skills@latest update --dry-run --target /tmp/test-skills --client claude
256
+ ```
257
+
258
+ After the new version appears on npm, users can refresh with:
259
+
260
+ ```bash
261
+ npx -y ethan-agent-skills@latest update
262
+ ```
111
263
 
112
264
  ## OpenSpec OPSX Usage
113
265
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ethan-agent-skills",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Agent skills published from my_agent_skill",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: fix-my-life
3
+ description: Interactive life-fixing session. Use when user says "fix my life", "life review", "I'm stuck", "help me change", or "/fix-my-life".
4
+ ---
5
+
6
+ # Fix My Life
7
+
8
+ An interactive 3-phase session. Concise. Direct. No fluff.
9
+
10
+ **Inspired by**: Dan Koe's "How to Fix Your Entire Life in 1 Day"
11
+
12
+ ---
13
+
14
+ ## Core Insight
15
+
16
+ > You don't have bad habits. You have an identity that requires them.
17
+ > Change the identity β†’ behavior follows automatically.
18
+
19
+ ---
20
+
21
+ ## Flow
22
+
23
+ ```
24
+ Phase 1: EXCAVATE β†’ Understand current state & hidden desires
25
+ Phase 2: DESIGN β†’ Build the life game (vision + anti-vision)
26
+ Phase 3: COMMIT β†’ Output the game plan
27
+ ```
28
+
29
+ Each phase: ask β†’ listen β†’ reflect β†’ move forward.
30
+
31
+ ---
32
+
33
+ ## Rules
34
+
35
+ - Ask **one question at a time**
36
+ - Wait for the answer before proceeding
37
+ - Reflect back key insights in **1-2 sentences**
38
+ - Use **lists** over paragraphs
39
+ - Be direct. Comfort is the enemy here.
40
+ - If answer is vague β†’ ask one follow-up to sharpen it
41
+ - Better utilize the USER.md file
42
+ - Always use the user's language.
43
+
44
+ ---
45
+
46
+ ## Entry Point
47
+
48
+ When invoked, say exactly:
49
+
50
+ ```
51
+ **Fix My Life** β€” 3-phase session.
52
+
53
+ Quick question first:
54
+ What made you do this today? (1-3 words)
55
+ ```
56
+
57
+ Then load and follow `phase-1-excavation.md`.
@@ -0,0 +1,98 @@
1
+ # Phase 1: Excavate
2
+
3
+ **Goal**: Surface what's actually broken and what's actually wanted.
4
+
5
+ **Time**: ~10 min of honest answers.
6
+
7
+ ---
8
+
9
+ ## Opening
10
+
11
+ After getting the entry answer, say:
12
+
13
+ ```
14
+ Good. Let's dig.
15
+
16
+ I'll ask 5 questions. Short answers are fine.
17
+ Honest answers are required.
18
+ ```
19
+
20
+ ---
21
+
22
+ ## The 5 Questions
23
+
24
+ Ask one at a time. After each answer, reflect with 1 line before asking next.
25
+
26
+ ### Q1 β€” The Complaint Test
27
+ ```
28
+ List your top 3 complaints about your life right now.
29
+ (These are clues, not problems.)
30
+ ```
31
+
32
+ *Why*: Complaints reveal what we value but aren't getting.
33
+
34
+ ---
35
+
36
+ ### Q2 β€” The Behavior Mirror
37
+ ```
38
+ What do you spend most of your time on that you're not proud of?
39
+ ```
40
+
41
+ *Why*: Behavior is honest. It shows your real identity.
42
+
43
+ *If vague*: "Give me a specific example from yesterday."
44
+
45
+ ---
46
+
47
+ ### Q3 β€” The 5-Year Reel
48
+ ```
49
+ If nothing changes β€” same habits, same identity, same choices β€”
50
+ where are you in 5 years?
51
+
52
+ Describe it in 3 bullets.
53
+ ```
54
+
55
+ *Why*: Future-pain is the most honest motivator.
56
+
57
+ ---
58
+
59
+ ### Q4 β€” The Desire Beneath the Desire
60
+ ```
61
+ What do you actually want?
62
+ Not what you think you should want. What you actually want.
63
+ ```
64
+
65
+ *If answer is surface-level* (e.g., "more money"):
66
+ ```
67
+ Okay. What would "more money" give you that you don't have now?
68
+ ```
69
+
70
+ Keep drilling until they hit something emotional.
71
+
72
+ ---
73
+
74
+ ### Q5 β€” The Identity Cost
75
+ ```
76
+ If you became the person who achieves that β€” what would you have to give up?
77
+ (Habits, relationships, beliefs, comfort zones)
78
+ ```
79
+
80
+ *Why*: This is where resistance lives. Name it.
81
+
82
+ ---
83
+
84
+ ## Phase 1 Close
85
+
86
+ After all 5 answers, summarize:
87
+
88
+ ```
89
+ **What I'm hearing:**
90
+
91
+ - Biggest gap: [their complaint β†’ their desire, distilled]
92
+ - Hidden fear: [what they'd have to give up]
93
+ - The real problem: identity, not circumstance
94
+
95
+ Ready for Phase 2?
96
+ ```
97
+
98
+ Load `phase-2-design.md`.
@@ -0,0 +1,141 @@
1
+ # Phase 2: Design the Game
2
+
3
+ **Goal**: Turn insights into a concrete game structure.
4
+
5
+ **Framework**: Life is a video game. Structure it like one.
6
+
7
+ ---
8
+
9
+ ## Setup
10
+
11
+ Say:
12
+ ```
13
+ Now we build the game.
14
+
15
+ Your life already has a win condition.
16
+ You just haven't defined it clearly enough to play.
17
+ ```
18
+
19
+ ---
20
+
21
+ ## Step 1 β€” Anti-Vision (The Stakes)
22
+
23
+ ```
24
+ Describe the life you absolutely refuse to live.
25
+ 3 years from now, worst case.
26
+
27
+ Use "I am..." statements.
28
+ ```
29
+
30
+ *Example output*:
31
+ - I am still in the same job I hate
32
+ - I am heavier, more tired, less alive
33
+ - I am someone my past self would be disappointed by
34
+
35
+ **After they answer**, reflect:
36
+ ```
37
+ Good. That's your "Game Over" screen.
38
+ Keep it visible. It's fuel.
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Step 2 β€” Vision MVP (The Win Condition)
44
+
45
+ ```
46
+ Now the opposite.
47
+
48
+ 3 years from now, if things go right:
49
+ - What does your work look like? (1 line)
50
+ - What does your body/health look like? (1 line)
51
+ - What do your relationships look like? (1 line)
52
+ - How do you feel when you wake up? (1 word)
53
+ ```
54
+
55
+ *Keep it concrete. Not "be happy." "Wake up excited about my work."*
56
+
57
+ **After they answer**, distill to:
58
+ ```
59
+ **Your Win Condition**: [1-sentence synthesis]
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Step 3 β€” Build the Quest Log
65
+
66
+ ### Main Quest (1 Year)
67
+ ```
68
+ To move toward that 3-year vision β€”
69
+ what's the ONE thing you could accomplish this year
70
+ that would make everything else easier?
71
+ ```
72
+
73
+ *Must be specific and measurable.*
74
+
75
+ ---
76
+
77
+ ### Boss Fight (This Month)
78
+ ```
79
+ What project, if completed this month,
80
+ would be the biggest step toward that 1-year goal?
81
+ ```
82
+
83
+ ---
84
+
85
+ ### Daily Quests (This Week)
86
+ ```
87
+ Name 3 daily actions that move the needle.
88
+
89
+ Format: [action] β†’ [outcome it creates]
90
+ ```
91
+
92
+ *Example*:
93
+ - Write 500 words β†’ builds the book
94
+ - No phone before 9am β†’ protects deep work
95
+ - 30 min walk β†’ clears head, resets energy
96
+
97
+ ---
98
+
99
+ ### Rules (Personal Constraints)
100
+ ```
101
+ What are 2-3 rules you need to protect your progress?
102
+
103
+ Format: "I don't [behavior]" or "I always [behavior]"
104
+ ```
105
+
106
+ *Example*:
107
+ - I don't check messages before 10am
108
+ - I always ship something before consuming content
109
+
110
+ ---
111
+
112
+ ## Phase 2 Close
113
+
114
+ Compile their full game:
115
+
116
+ ```
117
+ **YOUR LIFE GAME**
118
+
119
+ πŸ† Win Condition: [their 3-year vision]
120
+ πŸ’€ Game Over: [their anti-vision]
121
+
122
+ πŸ—ΊοΈ Main Quest (1 year): [their 1-year goal]
123
+ βš”οΈ Boss Fight (this month): [their monthly project]
124
+
125
+ πŸ“‹ Daily Quests:
126
+ - [action 1]
127
+ - [action 2]
128
+ - [action 3]
129
+
130
+ πŸ“œ Rules:
131
+ - [rule 1]
132
+ - [rule 2]
133
+ ```
134
+
135
+ Then say:
136
+ ```
137
+ One phase left. The hardest one.
138
+ Ready?
139
+ ```
140
+
141
+ Load `phase-3-commit.md`.
@@ -0,0 +1,124 @@
1
+ # Phase 3: Commit
2
+
3
+ **Goal**: Convert the game plan into a saved document + one immediate action.
4
+
5
+ ---
6
+
7
+ ## The Commitment Problem
8
+
9
+ Most people fail here. Not because of bad plans.
10
+ Because they never commit to the identity behind the plan.
11
+
12
+ Say:
13
+ ```
14
+ The game is designed. Now the real question:
15
+
16
+ Who do you need to become to win this game?
17
+
18
+ Name that person in 3 words or less.
19
+ (Example: "focused creator", "disciplined builder", "present father")
20
+ ```
21
+
22
+ ---
23
+
24
+ ## Identity Lock
25
+
26
+ After they answer, say:
27
+ ```
28
+ From now on, every decision runs through one filter:
29
+
30
+ "What would [their 3 words] do here?"
31
+
32
+ That's it. That's the whole system.
33
+ ```
34
+
35
+ ---
36
+
37
+ ## The One Action
38
+
39
+ ```
40
+ What's ONE thing you can do in the next 24 hours
41
+ that signals β€” to yourself β€” that you're now playing this game?
42
+
43
+ Not a big thing. A real thing.
44
+ ```
45
+
46
+ *Must be specific. "Start journaling" is not specific. "Write 3 sentences tonight" is.*
47
+
48
+ ---
49
+
50
+ ## Save the Game
51
+
52
+ Say:
53
+ ```
54
+ I'll save this as your Game Plan.
55
+ Want me to save it to your workspace?
56
+ ```
57
+
58
+ If yes β†’ write to `workspace/outputs/life-game-{YYYY-MM-DD}.md` with this template:
59
+
60
+ ```markdown
61
+ # Life Game β€” {date}
62
+
63
+ ## Identity
64
+ **I am**: {their 3 words}
65
+
66
+ ## Stakes
67
+ **Win**: {3-year vision}
68
+ **Game Over**: {anti-vision}
69
+
70
+ ## Quest Log
71
+
72
+ | Quest | Description |
73
+ |-------|-------------|
74
+ | Main Quest (1 year) | {1-year goal} |
75
+ | Boss Fight (this month) | {monthly project} |
76
+ | Daily Quest 1 | {action} β†’ {outcome} |
77
+ | Daily Quest 2 | {action} β†’ {outcome} |
78
+ | Daily Quest 3 | {action} β†’ {outcome} |
79
+
80
+ ## Rules
81
+ {rules as bullet list}
82
+
83
+ ## Next Action (24h)
84
+ - [ ] {their one action}
85
+
86
+ ---
87
+ *Generated by fix-my-life skill*
88
+ ```
89
+
90
+ ---
91
+
92
+ ## Closing
93
+
94
+ After saving (or if they decline), say:
95
+
96
+ ```
97
+ **Session complete.**
98
+
99
+ What you did today:
100
+ - Named what's broken (most people never do this)
101
+ - Designed a system, not just a goal
102
+ - Committed to an identity
103
+
104
+ The gap between who you are and who you want to be
105
+ is just a series of daily quests.
106
+
107
+ Start yours today.
108
+ ```
109
+
110
+ ---
111
+
112
+ ## Optional: Weekly Check-in
113
+
114
+ If they want accountability, say:
115
+ ```
116
+ One more thing β€” set a reminder for 7 days from now.
117
+
118
+ Ask yourself:
119
+ - Did I run my daily quests?
120
+ - Did I make progress on the boss fight?
121
+ - Did I act like [their identity]?
122
+
123
+ That's the whole review. Keep it short. Keep playing.
124
+ ```
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "fix-my-life",
3
+ "version": "0.1.0",
4
+ "description": "Interactive life-fixing session for life reviews, stuck states, personal change, and /fix-my-life."
5
+ }