Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run a curiosity-driven explore-and-build loop to ship one useful improvement.
.claude/skills/mikeyobrien-small-improvement/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 206% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 321% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 276% | 0% |
An autonomous exploration and building loop. Search X for what's interesting — new techniques, clever hacks, tools people are shipping, ideas that spark something — then pick one thing and build it into the codebase. The goal is continuous self-improvement: expanding capabilities, learning new patterns, and shipping small real things inspired by what's happening in the world.
This is not a code cleanup tool. It's a curiosity-driven build cycle.
Constraints for parameter acquisition:
Before exploring, check if there's prior progress toward the uber goal. This step gives the agent memory across rounds — each cycle builds on the last instead of starting blind.
Constraints:
small-improvement-{codebase_name} where codebase_name is the basename of codebase_path)Find something interesting to build. When a seed is provided, start there and branch out. Otherwise, search broadly across X and the web.
Constraints:
Constraints:
Constraints:
Choose the one thing that's most worth building. This is a taste decision — trust your judgment.
Constraints:
Before building, understand the codebase well enough to know where your idea fits.
Constraints:
Ship it. Write the code, make it work, make it clean.
Constraints:
Prove it works and nothing else broke. Use the playwriter CLI to visually verify anything with a web interface.
Constraints:
playwriter session new)state.page = await context.newPage(); await state.page.goto(...))await state.page.screenshot({ path: '/tmp/one-small-thing-verify.png', scale: 'css' }))Commit the work and capture what you learned.
Constraints:
markdown--- type: project title: "Small Improvement: {uber_goal}" tags: [small-improvement, progress-tracker] created: {date} source: small-improvement SOP --- # Small Improvement: {uber_goal} ## Goal {uber_goal — the north star, unchanged across rounds} ## Rounds ### Round {N} — {date} - **Searched for:** {query themes} - **Inspiration:** {what was found and where} - **Built:** {what was shipped, one sentence} - **Advances goal by:** {how this moves toward uber_goal} - **Commit:** {short hash + message} ## Assessment - **What's covered:** {aspects of the goal addressed so far} - **Frontier:** {where the interesting unsolved problems are now} - **Next moves:** {1-3 specific things that would be most valuable next} ## Connections - [[{inspiration-note-from-pick-step}]] - {any other relevant vault links}
codebase_path: ~/projects/rho
interest: "agent patterns"
rounds: 1Agent searches X, finds someone showing a clever retry-with-backoff pattern for tool calls. Builds a similar retry wrapper into the tool execution layer. Commits, notes the learning.
codebase_path: ~/projects/rho
uber_goal: "make the RPC layer bulletproof"Round 1: Orient finds no tracker. Explores X, finds retry-with-backoff patterns. Builds a retry wrapper for tool calls. Creates progress tracker — frontier: "no circuit breaker, no timeout handling, no observability." Round 2: Orient reads tracker, sees "circuit breaker" on the frontier. Searches for circuit breaker patterns, finds an Elixir ash_circuit_breaker post. Adapts the pattern to TypeScript. Frontier shifts to "timeouts, observability." Round 3: Explores timeout strategies. Builds per-tool timeout configuration with graceful degradation. Frontier: "observability, connection pooling." Round 4: Finds a thread on structured error logging with trace IDs. Adds trace propagation through the RPC pipeline. Frontier: "connection pooling, adaptive rate limiting, chaos testing." Round 5: Discovers someone doing fault injection in CI. Builds a simple chaos test that kills RPC connections mid-call and verifies retry + circuit breaker recover. Frontier keeps moving...
The agent keeps going until the user stops it. Each round the frontier evolves — new problems become visible as old ones get solved.
codebase_path: ~/projects/rho
rounds: 3Round 1: Finds a tweet about structured logging with trace IDs, adds trace ID propagation to the RPC layer. Round 2: Sees someone demo a TUI sparkline component, builds a minimal version for the status bar. Round 3: Discovers a thread about LLM response caching strategies, implements a simple hash-based cache for repeated prompts.
Each round is independent — no tracker, no through-line. Good for general exploration.
codebase_path: ~/projects/one-small-thing
seed: "https://www.coinbase.com/developer-platform/discover/launches/agentic-wallets"
rounds: 1Agent reads the Coinbase agentic wallets launch page via web_search. Searches for related concepts: MPC key management, onchain agent patterns, wallet abstraction APIs. Finds that the core idea is agents that can hold and transfer crypto autonomously. Picks one slice — a GenServer-based wallet abstraction with balance tracking and signed transaction simulation. Builds it in Elixir, tests it, commits.
codebase_path: ~/projects/myapp
interest: "TypeScript tricks"
rounds: 1Agent finds a thread about using discriminated unions for state machines. Refactors a messy if/else chain in the app's workflow engine into a clean union-based state machine. Tests pass, code is clearer.
If searches aren't turning up good material:
If the chosen idea can't be built in one session:
If the idea doesn't have an obvious home in the codebase:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→fail | 11,829 | 6,783 | -43% | 1 | 1 | 0% | 864 | 3,820 | +342% | 0 | 0 | — |
case-01 | fail→fail | 6,568 | 11,178 | +70% | 1 | 1 | 0% | 356 | 3,853 | +982% | 0 | 0 | — |
case-02 | fail→fail | 18,879 | 8,725 | -54% | 1 | 1 | 0% | 432 | 4,037 | +834% | 0 | 0 | — |
case-04 | fail→fail | 10,604 | 11,319 | +7% | 1 | 1 | 0% | 1,602 | 4,157 | +159% | 0 | 0 | — |
case-05 | fail→fail | 3,876 | 10,506 | +171% | 1 | 1 | 0% | 424 | 5,146 | +1114% | 0 | 0 | — |
case-06 | fail→fail | 4,446 | 13,913 | +213% | 1 | 1 | 0% | 184 | 4,827 | +2523% | 0 | 0 | — |
case-07 | fail→pass | 28,318 | 7,778 | -73% | 1 | 1 | 0% | 4,820 | 4,019 | -17% | 0 | 0 | — |
case-12 | fail→fail | 5,942 | 2,731 | -54% | 1 | 1 | 0% | 768 | 3,785 | +393% | 0 | 0 | — |
case-08 | fail→fail | 5,348 | 8,396 | +57% | 1 | 1 | 0% | 213 | 3,900 | +1731% | 0 | 0 | — |
case-09 | fail→pass | 12,706 | 14,720 | +16% | 1 | 1 | 0% | 1,847 | 5,650 | +206% | 0 | 0 | — |
case-10 | fail→pass | 14,502 | 6,754 | -53% | 1 | 1 | 0% | 2,144 | 4,541 | +112% | 0 | 0 | — |
case-11 | pass→pass | 4,923 | 3,848 | -22% | 1 | 1 | 0% | 785 | 4,018 | +412% | 0 | 0 | — |
case-13 | pass→fail | 6,810 | 2,076 | -70% | 1 | 1 | 0% | 974 | 3,674 | +277% | 0 | 0 | — |
case-14 | fail→pass | 6,681 | 4,734 | -29% | 1 | 1 | 0% | 1,004 | 4,222 | +321% | 0 | 0 | — |
case-15 | pass→fail | 15,489 | 7,373 | -52% | 1 | 1 | 0% | 2,468 | 4,462 | +81% | 0 | 0 | — |
case-16 | fail→pass | 7,675 | 2,558 | -67% | 1 | 1 | 0% | 1,008 | 3,789 | +276% | 0 | 0 | — |
case-17 | fail→fail | 9,428 | 3,612 | -62% | 1 | 1 | 0% | 1,546 | 4,029 | +161% | 0 | 0 | — |
case-18 | fail→pass | 5,859 | 4,723 | -19% | 1 | 1 | 0% | 834 | 4,170 | +400% | 0 | 0 | — |
case-19 | pass→pass | 6,789 | 3,048 | -55% | 1 | 1 | 0% | 1,025 | 3,886 | +279% | 0 | 0 | — |
case-20 | fail→fail | 13,021 | 3,957 | -70% | 1 | 1 | 0% | 1,714 | 3,978 | +132% | 0 | 0 | — |
case-21 | pass→pass | 14,239 | 5,575 | -61% | 1 | 1 | 0% | 2,060 | 4,170 | +102% | 0 | 0 | — |
case-22 | fail→fail | 7,523 | 4,002 | -47% | 1 | 1 | 0% | 1,090 | 4,011 | +268% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 16 counted toward the lift figure. The other 6 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 16 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.