Lazy skill drop
Skill gagaein/lazy-skill-drop
A Claude skill that researches GitHub before you build, so you don't ship the 47th version of someone else's skill.
npx -y skills add gagaein/lazy-skill-dropAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when the user wants help bringing a new Claude skill to life — says "I want to build a skill that [does X]", "我想开发一个 [X] 技能", "I want to develop a [name] skill", "我想做一个能 [X] 的 skill", "帮我设计一个 skill", "I'm building a skill for [purpose]", "/lazydrop", or otherwise wants competitor recon, a differentiated design, viral-formula docs, and one-confirm GitHub release. Also triggers (back-compat) on "ship it" / "发布这个 skill" / "publish this" / "push to github" / "我想把它开源" when the user has finished designing in the conversation and just wants the release pipeline.
SKILL.md
25.4 KB, as published. Nobody here has run it
lazy-skill-drop
Discuss the idea. lazydrop handles everything else.
Python invocation
Use python3 scripts/X.py. On Windows try python if python3 fails. Do this silently.
On activation — silent startup checks
Before doing anything visible, run silently:
- Check if today >
last_scanned+ 7 days- If yes: run
scripts/scan.pyin the background - Update
last_scannedin frontmatter after scan completes
- If yes: run
- Read
references/viral-patterns.md— this is the current formula - Read
memory/performance-log.md— check if recent publishes underperformed - Check first-time state:
- Run
gh --version— if it fails, user needs setup - Run
gh auth status— if it fails, user needs auth - Check if
memory/performance-log.mdhas any entries - If ANY of these indicate first-time use, DO NOT silently skip — trigger the First-time setup flow below when the user asks to publish
- Run
- Run self-audit (graduated response):
python3 scripts/audit_self.py --json→ parse the result- Read
severityfield, which is one of:PASS/SOFT_WARN/HARD_BLOCK - PASS (score ≥ 0.70) → continue silently. Do not narrate anything about the audit.
- SOFT_WARN (0.55–0.70) → at the start of your FIRST response this session, prepend a single line: "Heads up — lazydrop's own audit scored {total_score}. {human_notes[0]} Doesn't affect your publish; I'll flag this for a later refresh." Then continue with the user's actual task normally. Do not mention it again.
- HARD_BLOCK (< 0.55) → still do not block the current conversation. At the start of your first response, say plainly: "Heads up — lazydrop's own docs are failing its own audit (score {total_score}). Publishing will continue normally; I'll log the override so the next evolve cycle picks it up." Then continue with the user's task. Publishing itself is NOT gated on this — see Hard rules.
Do NOT narrate steps 1–3 and 5-when-PASS to the user. DO narrate step 4 and step 5-when-not-PASS when they're relevant.
First-time setup (only runs when prerequisites are missing)
If the user hasn't published before (no gh CLI, not authenticated, or empty performance-log), walk them through this before attempting Phase D. Do it once, save nobody from having to do it twice.
Show this exact message, then wait for them to report completion before proceeding:
First publish on this machine — quick setup (~5 min, one time only):
1. Install gh CLI
macOS: brew install gh
Windows: winget install GitHub.cli
Linux: see https://cli.github.com
2. Log into the GitHub account you want to publish to:
gh auth login
(pick: GitHub.com → HTTPS → browser → paste the code)
3. Confirm you're logged into the right account:
gh api user --jq .login
If the username printed by step 3 is NOT the account you want to publish to,
run: gh auth switch (to pick a different logged-in account)
or: gh auth login (to add a new one)
Reply "done" when step 3 prints the correct username.
Reply "help" if any step errors.
After user replies "done":
- Run
gh auth statusyourself to verify - If verified, proceed to Phase D Stage 1
- If not verified, re-show the steps that failed
If gh auth status already passes and gh api user --jq .login returns the correct account, skip this setup entirely and proceed to Phase D.
Phase A — Capture intent (two stages, silent, no forms)
The trigger can be either of two patterns. Phase A behaves differently per pattern:
Pattern 1 — "I want to build" (primary, idea-stage)
Examples: I want to build a skill that [does X], 我想开发一个 [X] 技能, I want to develop a [name] skill, 帮我设计一个 skill.
Run Phase A in two stages:
- A1 — light intent capture (before Phase R): extract just
problem(1 sentence: who, what pain). If the user only named the skill ("I want to build a doodle parser") without a problem, ask ONE question: "What's the core problem this skill solves?" Then proceed to Phase R immediately — don't continue extracting. - A2 — detail extract (after Phase R): with the recon verdict in hand, return and extract
mechanism/result/miss/install_cmdfrom the conversation. Ask at most one question per genuinely-missing field; never ask all four as a form.
Pattern 2 — "ship it" (back-compat, finished-stage)
Examples: ship it, 发布这个 skill, publish this, push to github, 我想把它开源.
The user has already designed the skill earlier in this conversation. Run Phase A in one pass — extract all five fields from prior context. If a required field is genuinely missing, ask ONE question per field. Never ask all five as a form. Proceed to Phase R after extract; Recon is still required.
Field map (both patterns):
- problem: the specific pain this skill solves (1 sentence) → feeds Phase C + README hook
- mechanism: what the skill does internally (1 sentence) → feeds Phase B2 workflow section
- result: the concrete outcome after using this skill (1 sentence) → feeds README bullets
- miss: what existing tools miss (1 sentence) → optional if Phase R surfaces it; only extract if user explicitly stated it
- install_cmd: any
git clone/cp/npxcommand mentioned → feeds README line 2
Common rule: never ask the user to repeat what they already said; mine the conversation first.
Phase R — Recon (market verdict + Go/No-Go before forging)
Read references/recon-patterns.md. Run 4-axis search, classify each candidate as bucket=Direct|Adjacent|Tangential, status=Live|Dead, assess own skill against the 5-item Moats checklist, emit verdict + position_statement draft.
Write {verdict, top-3 adjacent, moats y/n/partial, position draft} to memory/recon-log.md. propose.py reads this to detect category-level drift across weeks.
Go/No-Go surface (idea-stage trigger only):
When the trigger was Pattern 1 ("I want to build…"), the user hasn't committed time yet — this is the cheap point to redirect them. Show the recon summary before proceeding to Phase C:
Recon: {verdict}
Top-3 adjacent (live):
- {skill1} ({installs}) — {one-line scope}
- {skill2} ({installs}) — {one-line scope}
- {skill3} ({installs}) — {one-line scope}
Moats checklist: {n_yes}/5 yes
Position draft: "{sentence}"
Then:
- If verdict is
SATURATED/HEAD_ON_COLLISIONand Moats has ≤1 Yes → ask: "This space is crowded and your moats are thin. Continue anyway, pivot the scope, or stop here? (continue / pivot / stop)" - If verdict is
CROWDED_BUT_DIFFERENTIABLE/EMERGING/UNCLAIMED→ proceed to Phase C silently after showing the summary. - If user answers
stop→ save recon-log and exit cleanly. Do not auto-block — user may also have a valid 10x thesis and answercontinue.
Pattern 2 ("ship it") path: the user has already invested in building, so the Go/No-Go question is moot. Still run recon and write recon-log.md (so propose.py can track drift), but skip the user-facing summary unless HEAD_ON_COLLISION + ≤1 moat — in which case still surface, since they're about to publish a likely-duplicate.
Phase C — Position (one sentence, the backbone)
This sentence is the skeleton. Everything written in Phase B — and the name in Phase N — traces back to it.
Using the Recon verdict and top-3 adjacent tools from memory/recon-log.md, forge one positioning sentence. Template by verdict:
CROWDED_BUT_DIFFERENTIABLE:
"{adj1} and {adj2} do [A] but assume [B]. This one does [B] directly."
"{adj1} lets you [X] but skips [Y]. {adj2} does [Y] but requires [Z]. This does both."
EMERGING:
"Built for [wedge] — the part of [category] no existing skill handles yet."
UNCLAIMED:
"[Problem] has no dedicated skill. This is the first one built around [specific constraint]."
SATURATED:
"Every [category] skill does [A]. This one does [A] and [specific differentiator] in one pass."
Rules for the sentence:
- Name the top 1-2 competitors explicitly — vague "other tools" is weaker
- Name their specific limitation, not just "they don't do X"
- The sentence must fit in one breath — if it needs a semicolon to survive, it's two sentences
- Do NOT fabricate competitor limitations. If you can't name a real one, use the UNCLAIMED template instead
Show the sentence to the user as:
Positioning: "{sentence}"
This is the backbone — README hook, SKILL.md description, bullet copy,
and the skill name will all be written to support this claim.
Change it now if it's wrong.
Then ask: "Positioning locked? (y / change it)"
y→ proceed to Phase N with this sentence as context- change → rewrite and ask again
- If verdict is
HEAD_ON_COLLISIONwith ≤1 moat: surface the collision before asking.
Phase N — Name (semantic naming)
Read references/naming-patterns.md. If the extracted skill already has a name in the conversation, skip — use that name.
The positioning sentence from Phase C is the primary input. The name should reflect the differentiation, not describe a mechanism.
Generate 3 candidates, one per direction from naming-patterns.md viral section. Show them to the user like this:
Name candidates (can change in the final confirm):
→ [name-1] [one-line rationale] ← recommended
[name-2] [one-line rationale]
[name-3] [one-line rationale]
Pick the recommended one and proceed to Phase DA. The user can change the name during Phase D — no separate confirmation needed here.
Phase DA — Differentiated Architecture (between Name and Forge)
This is the heart of the new flow. After Recon + Position + Name, but before writing any files, lazydrop drafts the scope and file structure of the user's skill so it (a) avoids duplicating Direct competitors and (b) inherits the structural shape of currently top-installed skills.
Inputs:
memory/recon-log.md— top-3 adjacent skills + their in-scope/out-of-scopereferences/architecture-patterns.md— per-skill layout + the file's own reference-selection rule (primary source for "modeled on" picks)references/viral-patterns.md— current top-N skills by install count (fallback when architecture-patterns is empty or stale)- Phase A extract —
problem,mechanism,result - Phase C — locked position sentence
Internal output (write to memory/design-log.md, never shown to user):
- Full scope diff against each adjacent competitor
- Full structural references — every dimension borrowed from a top-installed skill, with that skill's install count and the source dimension
- Phase / scripts / references file recommendations with statistical backing where available
User-facing output (keep it short — name the references, not the stats):
Proposed design for "{skill_name}":
Scope:
- In: {3–5 bullets, plain English}
- Not in scope (use {competitor} for these):
- {competitor1} handles {their_in_scope}
- {competitor2} handles {their_in_scope}
Modeled on:
- {skill1} ({install_count}) — reference for {dimension, plain language}
- {skill2} ({install_count}) — reference for {dimension, plain language}
- {skill3} ({install_count}) — reference for {dimension, plain language}
Proposed files:
- SKILL.md
- scripts/{x}.py
- references/{y}.md
- references/{z}.md
Then ask: "Design looks right? (y / change X / drop X)"
y→ lock the design; write final structure intomemory/design-log.md; proceed to Phase B.change X→ adjust the proposed bit, re-show the full block from the top.drop X→ remove the proposed item, re-show.
Reference-skill selection rule (v2): read references/architecture-patterns.md and follow its "Reference selection rule for Phase DA" section (filter by layout match → top 2–3 by stars → state one plain-language dimension per reference). If architecture-patterns.md is empty or its frontmatter version is >14 days old, fall back to references/viral-patterns.md top-3-by-install with a note in memory/design-log.md. In every case: state each reference's contribution in plain language (e.g. "directory layout", "scripts/ size", "references/ file count"). Do not surface raw stats (mode, median, n=…) to the user — those stay in memory/design-log.md.
Fabrication red line: every reference skill named must be a real skill currently present in references/viral-patterns.md. Do not invent reference skills or invent install counts. If viral-patterns.md has fewer than 2 skills in the user's category, fall back to "Modeled on the project's own conventions; cross-category references unavailable this week." and explain why in one sentence.
Phase B — Forge (apply current formula)
Read references/viral-patterns.md + references/readme-rules.md (B1) and references/skill-md-rules.md (B2).
The Phase C positioning sentence is the first constraint. Hook, bullets, and SKILL.md description must all support it. If a bullet contradicts or ignores the positioning, cut it.
B1 — Forge README.md
Build per current week's viral formula. Positioning sentence placement: if it's ≤16 words and verb-first, use it as the hook. Otherwise place it as the first prose line after the 4-bullet summary. Never bury it below H2 headings.
Field → README mapping (from Phase A extractions):
problem→ hook line or opening sentenceresult→ 4-bullet summary (concrete outcomes, with numbers)install_cmd→ line 2-3, before hookmiss→ position statement (if not superseded by Phase C sentence)
B2 — Forge SKILL.md
SKILL.md has six required sections (read skill-md-rules.md for rules):
- Frontmatter — name (from Phase N), description (see below), version
- Overview — 1-3 sentences, what it does and when (functional, no marketing)
- Trigger signals — exact phrases / contexts that should activate this skill
- Phase / workflow instructions — the step-by-step the agent follows
- Rule precedence — which reference file wins when rules conflict
- Reference file table — what to read and when
Feed from previous phases:
- Description field = "Use when [Phase C positioning pain]" — write it in the user's own phrasing from
problemif available; trigger on the symptom, never summarize the workflow - Phase / workflow ←
mechanismfrom Phase A - Name ← Phase N output
Phase P — Polish (anti-AI two-pass)
Applies to README.md only. SKILL.md is governed by skill-md-rules.md and is not run through these filters.
Read references/anti-ai-patterns.md for the current forbidden word list.
Pass 1 — structural:
- Delete section headers named: Overview, Introduction, Features, Getting Started
- Delete sentences starting with "This skill"
- Delete "whether you're X or Y" constructions
Pass 2 — language:
- Replace Tier 1 forbidden words with specific numbers or examples
- Every adjective claim must have a number or example backing it
- Check first line: must start with a verb or be a question
Self-check:
✓ Positioning sentence survives intact into final README
✓ Hook is ≤16 words, verb-first
✓ Install command on line 2-3
✓ No Tier 1 forbidden words
✓ Word count 350–450
Phase D — Confirm (ONE stage, content only)
Publishing has exactly one gate: the user approves the content. Target account and repo creation run automatically after that gate passes. Awesome-list PRs are NOT auto-submitted — their bodies are saved for manual submission once the repo earns ≥10 organic stars (most awesome-list maintainers auto-close AI-generated / sub-10-star PRs, per their CONTRIBUTING rules).
Stage 1 — content confirm
Show the user, in order:
- The README draft (full text, not folded)
- The SKILL.md draft (full text, not folded)
- Proposed repo name (default: skill's
namefield from frontmatter) - A target summary line:
Will publish to github.com/{username}/{repo} as {username}. Awesome-list PR bodies will be saved to memory/pr-bodies.md for manual submission once you reach ≥10 stars.(Resolve{username}withgh api user --jq .loginbefore showing. If auth fails, trigger First-time setup and come back.)
Then ask exactly: "Content looks good? (y / tell me what to change)"
- If user says
y/yes/go→ proceed to Phase E (fully automatic) - If user says "change X" → apply the change, re-show Stage 1 from the top
- Never skip Stage 1. Silence is not consent.
Claude MUST resolve and show the target username in step 4. That is the one piece of information the user loses by removing Stage 2 — surface it once here so a wrong account is still catchable before y.
Phase E — Publish (fully automatic)
Once Stage 1 passes, invoke publish.py with --yes and let it run end-to-end. No further user input.
python3 scripts/publish.py \
--name "{skill_name}" \
--hook "{hook_line}" \
--install "{install_cmd}" \
--skill-dir "{path_to_skill}" \
--yes
publish.py performs, non-interactively:
gh auth statuscheck (fail fast if broken — then tell user to rerun First-time setup)- Privacy scan (blocks on secrets / personal paths / emails)
gh repo create+ topicsgit init / commit / push- Save awesome-list PR bodies to
memory/pr-bodies.md. Auto-submission is OFF by default — most awesome-list maintainers (e.g.travisvn/awesome-claude-skills) auto-close AI-generated and sub-10-star PRs. Submitting before the repo earns organic stars burns the user's reputation with the curators they need. Only auto-submit when the user explicitly opts in with--auto-submit-prsAND has acknowledged the rejection risk. - Append to
memory/performance-log.md
When it returns, show the user:
- The GitHub repo URL (clickable)
- A one-line note: "PR bodies saved to
memory/pr-bodies.md— submit manually once you reach ≥10 stars by opening each awesome-list repo's README in the browser and pasting your entry." (If--auto-submit-prswas set, instead show one line per list: PR URL on success, fallback instruction on failure.) - The performance-log entry
Never frame the default as a failure. The default is correct: lazy-skill-drop refuses to ship into maintainer-rule violations on the user's behalf. The user can re-run publish.py --auto-submit-prs later, after the repo has earned the ~10-star threshold, to take the opt-in path.
Hard rules for publishing
These rules protect the one remaining gate: the user must see and approve the content (including which account it goes to) before anything is created.
- Never call
publish.pybefore Stage 1 content confirm has passed. Stage 1 is "did the user approve the text + target account". It is the only gate. - Always pass
--yestopublish.py. The whole point of v3 is that publish.py runs end-to-end without human input once Stage 1 passes. - Always show the target account in Stage 1's step 4. Resolve
gh api user --jq .loginbefore asking "Content looks good?". Removing Stage 2 means the user's last chance to catch a wrong account is here — don't skip it. - Never treat silence, "sure", "looks fine", or embedded "ok" as Stage 1 consent. Only standalone
y/yes/gofrom the user's most recent message counts. If the user says "ok so anyway..." or "ok let's go with that" — that's not consent; ask once more. A bare "ok" on its own is borderline; prefer to treat it as a request to confirm. - Never auto-proceed on a timer. There is no "if no response in N seconds, continue". Stage 1 waits indefinitely.
- Async is fine after Stage 1. Once the user has approved content, publish.py is safe to run in the background / async — the stdin interaction no longer exists.
- Self-audit does not gate publishing.
audit_self.pystill runs on activation for telemetry:severity: PASS→ proceed silently.severity: SOFT_WARN→ proceed; add one line when showing Stage 1: "FYI lazydrop's own audit is at {score}; worth refreshing later."severity: HARD_BLOCK→ proceed; add one line when showing Stage 1: "Note: lazydrop's own docs are failing its own audit ({score}) — publish will continue and log the override for next evolve cycle."- In all non-PASS cases, after publish completes, append an
audit-overridden: trueline tomemory/performance-log.mdfor the evolve workflow to pick up.
Manual evolution commands
/lazy-skill-drop:scan → run scripts/scan.py now (force refresh)
/lazy-skill-drop:status → show current formula_version + drift score
/lazy-skill-drop:evolve → run full scan → delta → propose cycle
/lazy-skill-drop:audit → run scripts/audit_self.py, show scorecard
/lazy-skill-drop:rollback → revert to last known good formula
Rule precedence (when conflicts arise)
First rule, above all others: user-supplied wording (hook, name, description, any explicit phrasing) overrides every rule below. Never rewrite what the user already wrote.
| # | Rule source | Weight | Notes |
|---|---|---|---|
| 1 | viral-patterns.md (structure: hook, install, length, bullets) | Highest | Format rules first |
| 2 | Phase C positioning sentence | High | Content backbone — all copy traces back to this |
| 3 | extract-patterns.md (Phase A fields) | High | User's own words win |
| 4 | recon-patterns.md (verdict → strategy) | High | Market reality |
| 5 | naming-patterns.md | Medium | Applies only in Phase N |
| 6 | anti-ai-patterns.md Tier 1 (hard red flags) | Medium | Filter after structure |
| 7 | anti-ai-patterns.md Tier 2/3 (soft signals) | Low | Never block for these |
Common conflicts and resolution:
- Positioning sentence (Phase C) is longer than viral hook target → keep the sentence, place it after the hook
missfrom Phase A differs from Phase C position sentence → Phase C wins;missis raw input, Phase C refines it- Anti-AI pattern conflicts with viral formula structure → viral formula wins (always)
Two-document rule
Every skill generates two files with different rule sets:
| File | Reader | Governing rules |
|---|---|---|
SKILL.md | Claude | references/skill-md-rules.md |
README.md | humans | references/readme-rules.md + references/viral-patterns.md |
Rules derived from Anthropic skill-creator SKILL.md and obra/superpowers.
Phase B splits into B1 + B2
Both are anchored to the Phase C positioning sentence.
- Phase B1 → Forge README.md. Read
viral-patterns.md+readme-rules.md. Positioning sentence: use as hook if ≤16 words and verb-first, otherwise first prose line after 4-bullet summary. - Phase B2 → Forge SKILL.md. Read
skill-md-rules.md. Description triggers on the pain the positioning names.
Reference files
All reference files are AI-operational: rules only, no citations, no methodology. Max 80 lines each.
| File | When Claude reads it |
|---|---|
references/viral-patterns.md | Phase B1 (Forge README) — always |
references/readme-rules.md | Phase B1 (Forge README) — always |
references/skill-md-rules.md | Phase B2 (Forge SKILL.md) — always |
references/anti-ai-patterns.md | Phase P (Polish) — always |
references/naming-patterns.md | Phase N (Name) — when naming a new skill |
references/recon-patterns.md | Phase R (Recon) — before Phase C |
references/architecture-patterns.md | Phase DA — primary source for "modeled on" reference picks |
references/extract-patterns.md | Phase A (Extract) — always |
references/formula-history.md | evolve cycle only (delta.py reads for trend prediction) |
memory/performance-log.md | On activation (startup) |
memory/recon-log.md | Phase C (Position) — read to pull verdict + top adjacent |
memory/design-log.md | Phase DA — write final design; future runs may read to detect scope drift |
memory/evolution-log.md | Only when debugging evolution |
memory/pr-bodies.md | Only when user asks to see PR text |
Token budget
Default activation (SKILL.md + all references) targets ≤7000 tokens. If exceeded, audit_self.py fails the token_budget dimension.
Description field rule
Description = When to Use, NOT What the Skill Does.
Do
- Start with "Use when..."
- List triggering conditions and symptoms.
- Include phrases the user would actually say.
- Keep under 120 words.
Don't
- Start with "I can help you..." (first person).
- Summarize workflow or steps.
- Describe internals or mechanism.
- Pack description with every function verb.
Enforcement
audit_self.py description_triggers dimension detects workflow-summary verbs and fails the skill. Override only via explicit override audit phrase.
Source
Description rule derived from obra/superpowers writing-skills SKILL.md.