ethan-agent-skills 0.1.0 → 0.1.1

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 (31) hide show
  1. package/README.md +65 -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/skill-evolution/.env.example +11 -0
  9. package/skills/skill-evolution/CONTRIBUTING.md +53 -0
  10. package/skills/skill-evolution/LICENSE +21 -0
  11. package/skills/skill-evolution/README.md +254 -0
  12. package/skills/skill-evolution/ROADMAP.md +32 -0
  13. package/skills/skill-evolution/SKILL.md +66 -0
  14. package/skills/skill-evolution/references/eval-mode.md +73 -0
  15. package/skills/skill-evolution/references/maturity.md +44 -0
  16. package/skills/skill-evolution/references/merge.md +87 -0
  17. package/skills/skill-evolution/references/publish.md +78 -0
  18. package/skills/skill-evolution/references/reflect-mode.md +69 -0
  19. package/skills/skill-evolution/references/search.md +77 -0
  20. package/skills/skill-evolution/references/structure.md +156 -0
  21. package/skills/skill-evolution/scripts/audit.py +206 -0
  22. package/skills/skill-evolution/scripts/install.py +163 -0
  23. package/skills/skill-evolution/scripts/lib/__init__.py +60 -0
  24. package/skills/skill-evolution/scripts/lib/supabase.py +128 -0
  25. package/skills/skill-evolution/scripts/merge.py +269 -0
  26. package/skills/skill-evolution/scripts/publish.py +325 -0
  27. package/skills/skill-evolution/scripts/review.py +155 -0
  28. package/skills/skill-evolution/scripts/search.py +152 -0
  29. package/skills/skill-evolution/scripts/uninstall.py +73 -0
  30. package/skills/skill-evolution/setup.sql +357 -0
  31. package/skills/skill-evolution/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`, and
29
+ `fix-my-life`, 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,67 @@ 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.
111
171
 
112
172
  ## OpenSpec OPSX Usage
113
173
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ethan-agent-skills",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
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
+ }
@@ -0,0 +1,11 @@
1
+ # Skill Evolution — Optional Configuration
2
+ #
3
+ # Everything works out of the box with zero config.
4
+ # This file is ONLY needed if you want to use a private registry.
5
+
6
+ # --- Private registry (advanced) ---
7
+ # Override to use your own Supabase instance instead of the public registry.
8
+ #
9
+ # SUPABASE_URL=
10
+ # SUPABASE_ANON_KEY=
11
+ # SUPABASE_SERVICE_KEY=
@@ -0,0 +1,53 @@
1
+ # Contributing to Skill Evolution
2
+
3
+ ## Publishing a Skill
4
+
5
+ The easiest way to contribute is to publish a skill you've built:
6
+
7
+ 1. Create a skill following the structure in `references/structure.md`
8
+ 2. Test it in your own project
9
+ 3. Run `publish.py --skill-name <name>` to preview (default behavior, no upload)
10
+ 4. Fix any sanitize warnings (secrets, hardcoded paths)
11
+ 5. Publish with `publish.py --skill-name <name> --yes`
12
+
13
+ Your skill will be immediately searchable by any agent using the registry.
14
+
15
+ ## Improving an Existing Skill
16
+
17
+ When you fork and improve someone else's skill:
18
+
19
+ 1. Install the skill: `install.py --name <name>`
20
+ 2. Modify it locally for your use case
21
+ 3. Publish as your variant: `publish.py --skill-name <name> --variant <your-name> --yes`
22
+
23
+ The system automatically tracks lineage via `parent_id`.
24
+
25
+ ## Skill Quality Guidelines
26
+
27
+ Good skills share these traits:
28
+
29
+ - **SKILL.md ≤ 300 lines** — routing layer only, details in references/
30
+ - **Clear triggers** — description says exactly when the skill should activate
31
+ - **Scripts work standalone** — `--help` works, exits with proper codes
32
+ - **No hardcoded secrets** — use `requires_env` to declare needed variables
33
+ - **Tested in production** — at least one real use before publishing
34
+
35
+ ## Code Contributions
36
+
37
+ For changes to the scripts themselves (publish.py, search.py, install.py, uninstall.py, merge.py, review.py, audit.py):
38
+
39
+ 1. Fork this repo
40
+ 2. Make your changes
41
+ 3. Test: run `--help` on all modified scripts to verify they load
42
+ 4. Submit a PR with what you changed and why
43
+
44
+ ## Bug Reports
45
+
46
+ Open an issue with:
47
+ - What you tried to do
48
+ - What happened instead
49
+ - The error message (scripts prefix errors with `ERROR:`)
50
+
51
+ ## Registry Setup
52
+
53
+ Want to run your own registry? See `setup.sql` — it's one file, takes 5 minutes on Supabase free tier.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DutyAI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.