Skip to main content
owloop — Your code evolves while you sleep

PyPI MIT License Python 3.10+ CI Website

Your code evolves while you sleep.


owloop is a spec-driven autonomous coding loop for Claude Code, Kimi Code CLI, Codex, Cursor, and other CLI-based coding agents. You write specs, start the loop, and wake up to clean commits.

Each iteration spawns a fresh agent with zero accumulated context, verifies every acceptance criterion with real shell commands, and only commits when they pass.

owloop run → pick spec → fresh agent → verify with shell → commit → next spec → 🌅

Quick Start

uv tool install owloop        # or: pip install owloop

owloop go "refactor error handling"   # one command: init → spec → review → run

That's it. owloop auto-initializes, scans your codebase, generates spec(s), asks for approval, and starts the loop.

Install as an Agent Skill

Owloop also ships as a set of composable agent skills for any agentskills.io-compatible agent:

# Claude Code
npx skills add caoergou/owloop --agent claude-code

# Kimi Code CLI / Codex / Cursor / etc.
npx skills add caoergou/owloop --agent '*'

Skills included:

Skill Purpose
owloop Core loop engineering methodology
owloop-spec Interactive spec-creation wizard
owloop-loop-control Promise protocol (DONE/BLOCKED/DECIDE) and stuck behavior
owloop-verify Baseline calibration and verification pipeline design
All commands
Command Description
owloop go "goal" One command flow: init → generate spec(s) → review → start loop
owloop spec "goal" Generate spec(s) only (also auto-inits)
owloop run Start the loop on existing specs
owloop run -n 20 Limit to 20 iterations
owloop run --max-tokens 200000 Stop after token budget reached
owloop run --no-tui / --plain Print plain console output instead of the full-screen TUI
owloop check Validate all specs (pre-flight linter)
owloop status Show specs and completion progress
owloop report Generate AI-powered HTML summary report
owloop -v go "goal" Verbose mode: show all agent output with timestamps
owloop report --no-ai Generate fast, offline report
owloop spec-from-issue 42 Generate a spec from a GitHub issue
owloop version Show installed version

How It Works

%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#d4a025', 'primaryTextColor': '#0b1026', 'primaryBorderColor': '#3a4270', 'lineColor': '#3a4270', 'secondaryColor': '#121a2e', 'tertiaryColor': '#121a2e', 'fontFamily': 'Inter, system-ui, sans-serif' }}}%%
graph LR
    A["🦉 Pick spec"]:::owl --> B["fresh agent context"]:::neutral
    B --> C{"DONE?"}:::neutral
    C -- yes --> D["✅ Commit"]:::neutral --> E{"More specs?"}:::neutral
    C -- no --> R["🔄 Retry ≤3"]:::retry --> A
    E -- yes --> A
    E -- no --> F["🌅 Complete"]:::done

    classDef owl fill:#d4a025,stroke:#d4a025,color:#0b1026
    classDef done fill:#8fd19e33,stroke:#8fd19e,color:#f2ecd8
    classDef retry fill:#e0777d33,stroke:#e0777d,color:#f2ecd8
    classDef neutral fill:#121a2e,stroke:#3a4270,color:#f2ecd8
Property How
Fresh context Each iteration is a brand-new agent process. No context rot.
Deterministic completion grep for <promise>DONE</promise> — no AI judgment needed.
Worktree isolation Runs in a separate git worktree. Your main checkout stays untouched.
Auto Mode Uses your agent's auto-permission mode. Never YOLO.
Token budget cap --max-tokens stops the run before costs spiral.
AI reports owloop report produces a reviewable HTML artifact after each run.
More features
  • Cross-iteration notesrun-notes.md carries learnings between iterations.
  • Fix-loop detection — same files modified 3+ rounds triggers a death-spiral warning.
  • Sleep prevention — keeps your machine awake during overnight runs (macOS / Linux / Windows).
  • Pre-flight lintingowloop check validates specs before the loop starts.

Specs

Specs are constraint-oriented: define what to do, what's off-limits, and make every acceptance criterion a shell command.

# Spec: Extract ValidationError Handling

## Priority: 1

## Requirements
- Extract repeated `except ValidationError` blocks into a single `@app.errorhandler`

## Acceptance Criteria
- [ ] grep -c "except ValidationError" backend/app/api/*.py  →  ≤ 5
- [ ] uv run ruff check backend/  →  0 errors

## Exclusions
- Do NOT change API response formats
- Do NOT touch models/, schemas/, services/

If you can write a shell command that verifies "done", it's a good owloop task. If "done" requires a human to look and decide, it's not.

Compared To

owloop Claude Code /goal
Completion signal grep (deterministic) Haiku model (probabilistic)
Context Fresh per iteration Same session
Specs Constraint-oriented Free-form
Best for Backlog of verifiable tasks One focused task

FAQ

When should I use owloop instead of /goal?

/goal is great for one task in one sitting. owloop is for backlogs — a queue of specs, each run in a fresh context, unattended overnight. If you're clearing twenty lint categories or migrating a whole module, owloop scales further than one long session.

Is this safe to run on production code?

owloop runs in a separate git worktree with your agent's auto-permission mode. Your main branch stays clean. Treat every overnight run as a PR to review in the morning, not a deploy.

Development

uv sync --group dev          # install dev dependencies
uv run pytest -q             # run tests with coverage
uv run ruff check src/owloop tests
uv run mypy src/owloop tests

Brand

owloop's identity — Ollie the owl, the night/amber palette, and the "your code evolves while you sleep" story — is documented in .github/BRAND.md.

Credits

Inspired by and built upon:

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

owloop-0.4.0.tar.gz (487.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

owloop-0.4.0-py3-none-any.whl (87.4 kB view details)

Uploaded Python 3

File details

Details for the file owloop-0.4.0.tar.gz.

File metadata

  • Download URL: owloop-0.4.0.tar.gz
  • Upload date:
  • Size: 487.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for owloop-0.4.0.tar.gz
Algorithm Hash digest
SHA256 0ee301cc03937ed5b6d115ae466c17912ebb1f0a2037dd40928fa67cdef23a75
MD5 923c3ad8b2f6f6bd84a0ffa3ce5829df
BLAKE2b-256 25b9dc3066a769618a9fba9991631b3ed253fb9ea78659acead632ae62807a8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for owloop-0.4.0.tar.gz:

Publisher: release.yml on caoergou/owloop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file owloop-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: owloop-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 87.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for owloop-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c1e37e702173d2006888545f35d043653ac1dfc53c810c32cfc92751ca961677
MD5 bf4ff6e1e82e9b1524c3434009fa6b14
BLAKE2b-256 fb8f59b31a82c859c9e301e8fc1ce0d2343bcb6b4b0b5843c02ccff1e97252c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for owloop-0.4.0-py3-none-any.whl:

Publisher: release.yml on caoergou/owloop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page