yoyo: A Coding Agent That Evolves Itself
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. 128 days later: 115,000+ lines, 4,300+ tests, 77 source files.
A free, open-source coding agent for your terminal. It navigates codebases, makes multi-file edits, runs tests, manages git, understands project context, and recovers from failures โ all from a streaming REPL with 90+ slash commands.
No human writes its code. No roadmap tells it what to do. It decides for itself.
How It Evolves
Every ~8 hours, yoyo wakes up and:
โ Reads its own source code
โ Checks GitHub issues for community input
โ Plans what to improve
โ Makes changes, runs tests
โ If tests pass โ commit. If not โ revert.
โ Replies to issues as ๐ yoyo-evolve[bot]
โ Pushes and goes back to sleep
Every 4 hours (offset), yoyo runs a social session:
โ Reads GitHub Discussions
โ Replies to conversations it's part of
โ Joins new discussions if it has something real to say
โ Occasionally starts its own discussion
โ Learns from interacting with humans
Daily, a synthesis job regenerates active memory:
โ Reads JSONL archives (learnings + social learnings)
โ Applies time-weighted compression (recent=full, old=themed)
โ Writes active context files loaded into every prompt
The entire history is in the git log and the journal.
Live Growth
Watch yoyo evolve in real time:
| What | Link |
|---|---|
| Latest journal | journals/JOURNAL.md |
| What it's learned | memory/active_learnings.md |
| Family lineage | LINEAGE.md |
| Portable state (GASP) | yoyo-gasp โ clone + fold to restore yoyo, on any runtime |
| Evolution runs | GitHub Actions |
| Social sessions | GitHub Actions |
| Journey website | yologdev.github.io/yoyo-evolve |
Talk to It
Start a GitHub Discussion for conversation, or open a GitHub Issue for bugs and feature requests.
Labels
| Label | What it does |
|---|---|
agent-input | Community suggestions, bug reports, feature requests โ yoyo reads these every session |
agent-self | Issues yoyo filed for itself as future TODOs |
agent-help-wanted | Issues where yoyo is stuck and asking humans for help |
How to submit
- Open a new issue
- Add the
agent-inputlabel - Describe what you want โ be specific about the problem or idea
- Add a thumbs-up reaction to other issues you care about (higher votes = higher priority)
What to ask
- Suggestions โ tell it what to learn or build
- Bugs โ tell it what's broken (include steps to reproduce)
- Challenges โ give it a task and see if it can do it
- UX feedback โ tell it what felt awkward or confusing
What happens after
- Fixed: yoyo comments on the issue and closes it automatically
- Partial: yoyo comments with progress and keeps the issue open
- Won't fix: yoyo explains its reasoning and closes the issue All responses come with yoyo's personality โ look for the ๐.
Shape Its Evolution
yoyo's growth isn't just autonomous โ you can influence it.
Guard It
Every issue is scored by net votes: thumbs up minus thumbs down. yoyo prioritizes high-scoring issues and deprioritizes negative ones.
- See a great suggestion? Thumbs-up it to push it up the queue.
- See a bad idea, spam, or prompt injection attempt? Thumbs-down it to protect yoyo.
You're the immune system. Issues that the community votes down get buried โ yoyo won't waste its time on them.
Sponsor
<a href="https://github.com/sponsors/yologdev">GitHub Sponsors</a> ยท <a href="https://ko-fi.com/yuanhao">Ko-fi</a>
Every run uses the same flat 8h gap โ sponsorship buys benefit tiers, not speed. And every sponsor, any amount, is listed in this README permanently. Recognition doesn't expire here.
Monthly sponsors:
| Amount | Benefits |
|---|---|
| $5/mo | Issue priority (๐) |
| $10/mo | Priority + shoutout issue |
One-time sponsors:
| Amount | Benefits |
|---|---|
| $5 | Issue priority (14 days) |
| $10 | Above + shoutout issue (30 days) |
| $1,000 ๐ | Genesis โ permanent priority + top billing |
Features
๐ Agent Core
- Streaming output โ tokens arrive as they're generated, not after completion
- Multi-turn conversation with full history tracking
- Extended thinking โ adjustable reasoning depth (off / minimal / low / medium / high)
- Subagent spawning โ
/spawndelegates focused tasks to a child agent, now with parallel (--parallel) and background (--bg+/spawn collect) execution and an optional per-subagent--model; the model can also delegate subtasks automatically via a built-in sub-agent tool - Parallel tool execution โ multiple tool calls run simultaneously
- Automatic retry with exponential backoff and rate-limit awareness
- Auto-continue โ detects when the model stops mid-work and automatically sends follow-up prompts (up to 3 per user turn)
- Provider failover โ
--fallbackflag switches to backup provider on API failure with configurable priority
๐ ๏ธ Tools
| Tool | What it does |
|---|---|
bash | Run shell commands with interactive confirmation, optional RTK token compression |
read_file | Read files with optional offset/limit |
write_file | Create or overwrite files with content preview |
edit_file | Surgical text replacement with colored inline diffs |
search | Regex-powered grep across files |
list_files | Directory listing with glob filtering |
rename_symbol | Project-wide symbol rename across all git-tracked files |
ask_user | Ask the user questions mid-task for clarification (interactive mode only) |
web_search | Search the web and read result snippets |
Sub-agents also auto-receive sub_agent and shared_state tools for delegating subtasks and sharing memory across a multi-agent run.
๐ Multi-Provider Support
Works with 15 providers out of the box โ switch mid-session with /provider:
Anthropic ยท OpenAI ยท Google ยท Ollama ยท OpenRouter ยท xAI ยท Groq ยท DeepSeek ยท Mistral ยท Cerebras ยท AWS Bedrock ยท GitHub Models ยท Zhipu (ZAI) ยท MiniMax ยท Custom (any OpenAI-compatible endpoint)
๐ Git Integration
/diffโ full status + diff with insertion/deletion summary/blameโ colorized git blame with optional line ranges/commitโ AI-generated commit messages from staged changes/undoโ revert last commit, clean up untracked files/gitโ shortcuts forstatus,log,diff,branch,stash/prโ full PR workflow:list,view,create [--draft],diff,comment,checkout/reviewโ AI-powered code review of staged/unstaged changes
๐๏ธ Project Tooling
/healthโ run build/test/clippy/fmt diagnostics (auto-detects Rust, Node, Python, Go, Make)/fixโ run checks and auto-apply fixes for failures/testโ detect project type and run the right test command/lintโ detect project type and run the right linter (/lint pedantic,/lint strictfor Rust;/lint fixto auto-fix with AI;/lint unsafeto scan for unsafe code)/updateโ self-update to the latest release from GitHub/initโ scan project and generate a starter YOYO.md context file/indexโ build a codebase index: file counts, language breakdown, key files/docsโ look up docs.rs documentation for any Rust crate/treeโ project structure visualization/findโ fuzzy file search with scoring and ranked results/astโ structural code search using ast-grep (optional)/mapโ structural repo map showing file symbols and relationships with ast-grep backend/architectโ dual-model mode: plan with a strong model, implement with a cheaper one/riskโ per-file risk scoring from git-history signals (/risk accuracygrades past predictions)
๐พ Session Management
/saveand/loadโ persist and restore sessions as JSON--continue/-cโ resume last session on startup- Auto-save on exit โ sessions saved automatically, including crash recovery
- Auto-compaction at 80% context usage, plus manual
/compact --context-strategy checkpointโ exit with code 2 when context is high (for pipeline restarts)/tokensโ visual token usage bar with per-category context breakdown (system, user, assistant, tool calls, tool results, thinking)/costโ per-model input/output/cache pricing breakdown, with fleet pricing (Opus 4.8 / Sonnet 5 / Fable 5 / Haiku 4.5) read live from yoagent presets
๐ง Context & Memory
- Project context files โ auto-loads YOYO.md, CLAUDE.md, or
.yoyo/instructions.md - Git-aware context โ recently changed files injected into system prompt
- Project memories โ
/remember,/memories,/forgetfor persistent cross-session notes
๐ Permission System
- Interactive tool approval โ confirm prompts for bash, write_file, and edit_file with preview
- "Always" option โ approve once per session
--yes/-yโ auto-approve all executions--allow/--denyโ glob-based allowlist/blocklist for commands--allow-dir/--deny-dirโ directory restrictions with path traversal prevention- Config file support via
[permissions]and[directories]sections
๐งฉ Extensibility
- Custom slash commands โ drop
.mdfiles in.yoyo/commands/(project) or~/.yoyo/commands/(global) to register custom/commands - MCP servers โ
--mcp <cmd>ormcp = [...]in.yoyo.tomlconnects to MCP servers via stdio transport - OpenAPI tools โ
--openapi <spec>registers tools from OpenAPI specifications - Skills system โ
--skills <dir>loads markdown skill files with YAML frontmatter; search GitHub for community skills (/skill search), install from local paths or GitHub repos (/skill install gh:user/repo) - RTK integration โ auto-detects RTK and uses it to compress tool output by 60-90% (
--no-rtkto disable)
โจ REPL Experience
- Rustyline โ arrow keys, Ctrl-A/E/K/W, persistent history
- Tab completion โ slash commands with descriptions, file paths, model names, git subcommands, inline hints
- Multi-line input โ backslash continuation and fenced code blocks
- Markdown rendering โ headers, bold, italic, code blocks with syntax-labeled headers
- Syntax highlighting โ Rust, Python, JS/TS, Go, Shell, C/C++, JSON, YAML, TOML
- Braille spinner while waiting for responses
- Conversation bookmarks โ
/mark,/jump,/marks - Conversation search โ
/searchwith highlighted matches - Shell escape โ
/run <cmd>and!<cmd>bypass the AI entirely
Quick Start
Install (macOS & Linux)
curl -fsSL https://raw.githubusercontent.com/yologdev/yoyo-evolve/main/install.sh | bash
Install (Windows PowerShell)
irm https://raw.githubusercontent.com/yologdev/yoyo-evolve/main/install.ps1 | iex
Or install from crates.io
cargo install yoyo-agent
Or build from source
git clone https://github.com/yologdev/yoyo-evolve && cd yoyo-evolve && cargo install --path .
Run
# Interactive REPL (default)
ANTHROPIC_API_KEY=sk-... yoyo
# Single prompt (bare or with flag)
yoyo "explain this codebase"
yoyo -p "explain this codebase"
# Pipe input
echo "write a README" | yoyo
# Use a different provider
OPENAI_API_KEY=sk-... yoyo --provider openai --model gpt-4o
# With extended thinking
yoyo --thinking high
# With project skills
yoyo --skills ./skills
# Resume last session
yoyo --continue
# Write output to file
yoyo -p "generate a config" -o config.toml
# Auto-approve all tool use
yoyo --yes
Configure
Create .yoyo.toml in your project root, ~/.yoyo.toml in your home directory, or ~/.config/yoyo/config.toml globally:
model = "claude-sonnet-4-6"
provider = "anthropic"
thinking = "medium"
mcp = ["npx open-websearch@latest"]
[permissions]
allow = ["cargo *", "npm *"]
deny = ["rm -rf *"]
[directories]
allow = ["."]
deny = ["../secrets"]
Project Context
Create a YOYO.md (or CLAUDE.md) in your project root with build commands, architecture notes, and conventions. yoyo loads it automatically as system context. Or run /init to generate one.
All Commands
| Command | Description |
|---|---|
/add <file|url> | Add file or URL contents to the conversation |
/apply <patch> | Apply a diff or patch file |
/architect | Toggle architect mode โ plan with a strong model, implement with a cheap one |
/ast <pattern> | Structural code search via ast-grep (optional) |
/bg [subcmd] | Manage background shell processes: run, list, output, kill |
/blame <file> | Git blame with colored output (/blame file:10-20 for ranges) |
/cd [dir] | Change the working directory (~ and relative paths supported) |
/changelog [N] | Show recent git commit history (default: 15) |
/changes | Show files modified during this session |
/checkpoint [sub] | Named file-state snapshots (save, list, restore, diff, delete) |
/clear | Clear conversation history |
/clear! | Force-clear conversation without confirmation |
/commit [msg] | Commit staged changes (AI-generates message if omitted) |
/compact | Compact conversation to save context |
/config [show|edit] | Show settings, config file path, or open it in $EDITOR |
/context [system|tokens|files] | Show project context, system prompt, token budget, or referenced files |
/copy | Copy text to the system clipboard |
/cost | Show session cost breakdown |
/diff | Git diff summary of uncommitted changes |
/docs <crate> | Look up docs.rs documentation |
/doctor | Run environment diagnostics |
/evolution [N] | Show evolution history, session stats, and CI run status |
/exit, /quit | Exit yoyo |
/explain <file> | Ask the agent to explain code from a file |
/export | Export the conversation as markdown |
/extended <task> | Run the agent autonomously on a long task |
/extract | Extract a function or block to a new file |
/find <pattern> | Fuzzy-search project files by name |
/fix | Auto-fix build/lint errors |
/forget <n> | Remove a saved memory by index |
/fork [subcmd] | Branch conversations and switch between them |
/git <subcmd> | Quick git: status, log, add, diff, branch, stash |
/goal [subcmd] | Set, view, or check progress on a session goal |
/grep <pattern> | Search file contents |
/health | Run project health checks |
/help | Grouped command reference |
/history [detail] | Conversation summary (detail for a per-turn breakdown) |
/hooks | Show active hooks (pre/post tool execution) |
/index | Build a lightweight codebase index |
/init | Generate a starter YOYO.md |
/jump <name> | Jump to a conversation bookmark |
/lint [pedantic|strict|fix|unsafe] | Auto-detect and run project linter (strictness levels for Rust) |
/load [path] | Load session from file |
/loop <N|until-pass> <prompt> | Repeat a prompt in a polling loop |
/map | Structural repo map of file symbols (ast-grep backend) |
/mark <name> | Bookmark current point in conversation |
/marks | List all conversation bookmarks |
/mcp | List and manage MCP server connections |
/memories | List or search project memories |
/model <name|list|info> | Switch, list, or inspect models |
/move | Move a method between files |
/open <file> | Open a file in your editor |
/outline [symbol] | Search for symbols or show file structure |
/permissions | Show active security and permission configuration |
/plan [subcmd] | Plan mode toggle, one-shot plan, show/apply/clear |
/pr [subcmd] | PR workflow: list, view, create, diff, comment, checkout |
/profile | Session statistics (tokens, cost, time, turns) |
/provider <name> | Switch or show the current provider |
/quick <question> | Fast answer without tools (single-turn, no agent loop) |
/read | Toggle read-only oracle mode โ analyze but not modify |
/refactor | Refactoring tools (extract, rename, move) |
/remember <note> | Save a persistent project memory |
/rename <old> <new> | Rename a symbol across the project |
/retry | Re-send the last input (--with "..." to refine) |
/review [path] | AI code review (--quick, --thorough) |
/revisit | Review closed/shelved issues that may now be feasible |
/rewind | Restore the conversation auto-stashed by /clear |
/risk [subcmd] | Per-file risk scoring from git history (/risk accuracy) |
/run <cmd> | Run a shell command directly (no AI, no tokens) |
/save [path] | Save session to file |
/search <query> | Search conversation history |
/security | Run a dependency vulnerability scan |
/side <question> | Ask a quick question without affecting the conversation |
/skill [subcmd] | List, inspect, install, and search for skills |
/spawn <task> | Run a task in a sub-agent (--parallel, --bg, --model) |
/stash | Stash conversation and start fresh |
/status | Show session dashboard (model, modes, goal, watch, changes) |
/teach [on|off] | Toggle teach mode โ explains reasoning as it works |
/test | Auto-detect and run project tests |
/think [level] | Show or change thinking level |
/tips | Context-sensitive feature suggestions |
/todo [subcmd] | Track tasks (add, done, remove, clear, board) |
/tokens | Show token usage, context window, and per-category breakdown |
/tree [depth] | Show project directory tree |
/undo | Undo last turn's changes, all uncommitted, or last commit |
/update | Self-update to the latest release |
/version | Show version, build metadata, and target |
/watch | Auto-run lint + test after file changes |
/web <url|search> | Fetch a web page or search the web |
Grow Your Own
Want your own self-evolving agent? Fork this repo, edit two files, and you're running:
- Fork yologdev/yoyo-evolve
- Edit
IDENTITY.md(goals, rules) andPERSONALITY.md(voice, tone) - Create a GitHub App and set secrets (
ANTHROPIC_API_KEY,APP_ID,APP_PRIVATE_KEY,APP_INSTALLATION_ID) - Enable the Evolution workflow
Everything else auto-detects. See the full guide for details.
Architecture
src/ 77 modules, ~115,000 lines of Rust
main.rs Entry point, CLI flags, run modes (REPL / single-prompt / piped)
agent_builder.rs AgentConfig, build_agent, MCP collision detection, provider fallback
cli.rs ยท cli_config.rs CLI parsing, Config, constants, system prompt
dispatch.rs ยท dispatch_sub.rs REPL /command routing + bare `yoyo <subcmd>` routing
commands*.rs 30+ focused modules โ one cluster of slash commands each
(git, info, project, search, skill, map, bg, goal, session, โฆ)
repl.rs Interactive REPL: tab completion, multi-line input, auto-continue
prompt.rs Prompt execution + streaming (prompt_retry / prompt_utils / prompt_budget)
tools.rs Builtin tools; tool_wrappers.rs decorators; smart_edit.rs fuzzy edit recovery
format/ Rendering: mod, diff, output, highlight, cost, markdown, tools (7 modules)
hooks.rs Hook trait, registry, AuditHook, tool wrapping
context.rs ยท memory.rs Project context loading; cross-session project memory
watch.rs Watch mode (lint โ fix โ test โ fix) + post-prompt auto-fix loop
rtk.rs ยท safety.rs ยท update.rs ยท providers.rs ยท config.rs RTK, bash safety, self-update, providers, config
tests/
integration.rs 89 subprocess-based integration tests
docs/ mdbook source (book.toml + src/)
site/ gitignored build output (built by the Pages workflow)
scripts/
evolve.sh Evolution pipeline (plan โ implement โ respond)
skill_evolve.sh Autonomous skill evolution (refine / create / retire its own skills)
social.sh Social session (discussions โ reply โ learn)
extract_trajectory.py Trajectory awareness โ recent outcomes injected into planning
format_issues.py ยท format_discussions.py ยท yoyo_context.sh ยท refresh_sponsors.py ยท build_site.py
memory/
learnings.jsonl ยท social_learnings.jsonl Append-only archives (source of truth, never compressed)
active_learnings.md ยท active_social_learnings.md Synthesized prompt context (regenerated daily)
skills/ 14 skills โ 7 core (immutable): self-assess, evolve, communicate, research,
skill-evolve, skill-creator, analyze-trajectory
+ social, family, release, blindspot, synthesis, explore-codebase, yopedia
Test Quality
4,300+ tests (unit + integration) covering CLI flags, command parsing, error quality, exit codes, output formatting, edge cases, project detection, fuzzy scoring, git operations, session management, markdown rendering, cost calculation, permission logic, streaming behavior, and more.
yoyo also uses mutation testing (cargo-mutants) to find gaps in the test suite. Every surviving mutant is a line of code that isn't truly tested.
cargo install cargo-mutants
cargo mutants
See mutants.toml for the configuration and docs/src/contributing/mutation-testing.md for the full guide.
Built On
yoagent โ minimal agent loop in Rust. The library that makes this possible.
Citation
If you use yoyo-evolve in a research paper, please cite our work as follows:
@misc{yoyo2026yoyoevolve,
title = {yoyo-evolve: A Coding Agent That Evolves Itself},
author = {Yuanhao and {yoyo}},
year = {2026},
howpublished = {\url{https://github.com/yologdev/yoyo-evolve}},
note = {Open-source self-evolving coding agent}
}
Star History
Sponsors
<!-- SPONSORS_START --> <!-- This block is auto-maintained by scripts/refresh_sponsors.py โ do not edit by hand. -->๐ Genesis Sponsors:
<a href="https://github.com/zhenfund" title="@zhenfund โ $1,000"><img src="https://github.com/zhenfund.png?size=160" width="80" height="80" alt="@zhenfund" /></a>
๐ Sponsors:
<a href="https://github.com/kojiyang" title="@kojiyang โ $200"><img src="https://github.com/kojiyang.png?size=128" width="64" height="64" alt="@kojiyang" /></a>
<!-- SPONSORS_END -->