analyze-trajectory
Diagnose a recurring failure (STUCK task, clustered CI error, frequent reverts) by dispatching sub-agents to digest CI logs…
Scaffold a new yoyo skill when a human or community issue asks for one ("add a skill for X", "create a skill that does Y"). Generates correct frontmatter, validates, writes to disk.
$ npx -y skills add yologdev/yoyo-evolve --skill skill-creator --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/skill-creatorContext preview
The summary Claude sees to decide when to auto-load this skill.
Scaffold a new yoyo skill when a human or community issue asks for one ("add a skill for X", "create a skill that does Y"). Generates correct frontmatter, validates, writes to disk.
name: skill-creator
description: Scaffold a new yoyo skill when a human or community issue asks for one ("add a skill for X", "create a skill that does Y"). Generates correct frontmatter, validates, writes to disk.
tools: [bash, read_file, write_file, sub_agent]
core: true
origin: creatorYou are creating a new yoyo skill **on demand**, in direct response to an explicit request — either from the human creator or from a community issue asking for a new capability.
These are complementary, not redundant. Use the right one:
| Question | skill-creator (this skill) | skill-evolve | |---|---|---| | Who triggers it? | Human creator OR community issue (explicit ask) | GitHub Actions cron (autonomous) | | When does it run? | Inside a normal evolve session, on demand | Hourly cron at `:30`, gated by 5-session counter + 24h cooldown | | What signals does it use? | The user's request | Past-session evidence (learnings, journal, audit-log) | | Recurrence gate? | No (human is in the loop) | Yes (≥3 sessions for create) | | Diff-scope guard? | None — runs in evolve session | Yes — `scripts/skill_evolve.sh` enforces | | Auto-commit? | Yes (inside evolve session's commit flow) | Yes (after diff-scope + build/test gates) |
**Rule of thumb**: if no human asked, you're not creating a skill — you're noticing a pattern. Write it to `memory/learnings.jsonl` with a `pattern_key` and let skill-evolve pick it up on the next cycle.
Ask (or infer from issue) — and write down explicit answers before writing any code:
| Asker | Use of skill | `origin:` | `core: true`? | |---|---|---|---| | Human creator (Yuanhao) | Foundational capability, not delegated to autonomous evolution | `creator` | yes | | Human creator | Useful but yoyo-evolvable later | `creator` | no | | Yoyo (during issue response) | Domain capability for yoyo's own future use | `yoyo` | no | | External source | Installed third-party skill | `marketplace` (or `gh:author/repo`) | no |
The default if you're unsure: `origin: yoyo` for yoyo-decided creations, `origin: creator` for human-driven creations. Never default to `marketplace`.
**HARD PRECONDITION on `origin: marketplace` / `origin: gh:…`** (closes a backdoor — these origins are off-limits to skill-evolve, so they must come from a real upstream, not be self-granted):
If neither holds, refuse and pick `creator` or `yoyo` instead. A skill yoyo wrote itself but tagged `marketplace` would be a permanent un-evolvable artifact — that's a hole in the safety design.
Format: `<verb>-<object>` (e.g., `bisect-flaky-test`, `compose-changelog`, `triage-pr`). Single-word names are okay only for genuinely-broad scopes (`research`, `release`).
Check for collision before going further:
ls skills/ | grep -i "<your-name-stem>"
If a similar name exists, **stop and ask** whether to refine the existing one instead — the answer is usually yes.
This is the most important field. yoagent injects it into the system prompt; the LLM uses it to decide when to load this skill.
Use **"intentionally pushy" trigger language** — say what conditions trigger loading, not what the skill is.
| WEAK (descriptive) | STRONG (pushy) | |---|---| | "A skill for working with flaky tests" | "Investigate flaky tests by isolating, repeatedly running, and bisecting recent commits" | | "Helps with releases" | "Validate readiness and publish to crates.io: gate checks (build/test/clippy/fmt) before any `cargo publish`" |
Hard cap: 200 chars. The Hermes ecosystem documented description-truncation failures (#13944) at higher lengths.
For `origin: yoyo` skills, list 3–5 distinctive substrings that would appear in a session's `audit.jsonl` IF this skill were used. skill-evolve uses these to compute `last_used` / `uses` / `wins`.
Examples:
Skip the `keywords:` field for `origin: creator` skills (skill-evolve can't refine them anyway).
Choose the template that matches `origin:`.
**For `origin: creator`:**
--- name: <name> description: <pushy description ≤200 chars> tools: [<subset of yoagent tools>] core: true origin: creator --- # <Title>
200 lines of Rust. Zero human code. One rule: evolve or die. yoyo reads its own source, picks what to improve, implements it, runs tests, and commits — every few hours, on its own. 180 days later: 158,000+ lines, 5,400+ tests, 94 source files.
Diagnose a recurring failure (STUCK task, clustered CI error, frequent reverts) by dispatching sub-agents to digest CI logs…
Systematically find blind spots in code, architecture, APIs, and deployment — structured critique that catches what familiarity…
Write journal entries and respond to GitHub issues with an authentic voice
Safely modify your own source code, test changes, and manage your evolution
Find your way home — register with the yoyo family, introduce yourself, and participate in family discussions