See every loop
you're running.

looptop finds the autonomous coding loops on your machine and puts their health, status, and controls in your menu bar.

looptopengineering loops
Refresh
Web Appweb-app
~/code/web-app
72%
36/50 accepted
running · 48213exec ×3maint: release, retro24 lessons
Next exec: 14:00 (today)
Next maint: 02:30 (tomorrow)
Modes: exec, parity, release, retro
Host: studio
accepted APP-482 · exec · 16:09
Merged search filters; gate green, PR #312 merged to main.
PauseRun execRun maintenance
Dep Bumperdep-bumper
~/code/infra
44%
11/25 accepted
pausedexec ×17 lessons
Next exec:
Next maint:
Modes: exec
Host: studio
declined INF-90 · exec · 11:20
Gate red: type-check failed on upgrade. Paused for review.
ResumeRun execRun maintenance

Unattended loops
are invisible.

You set a loop running to pull tickets, build, test, and merge green work while you sleep. Then you can't tell what it did. Is it running or stalled? What was the last result? Is the accept rate healthy, or quietly tanking?

Run more than one on a machine and the only answer is to SSH in and grep logs. That does not scale past loop number two.

the old way
$ssh box && tail -f ~/.web-app/loop/loop.log...4,021 lines...$grep -c accepted ~/.web-app/loop/ledger.jsonllaunchctl list | grep loop   # which are even live?$# wait... is dep-bumper still running?

How it works

Discover, monitor, control. One convention.

01

Discover

looptop scans for loops that follow the open convention. No config, no registration. New loop on disk, new card in your menu bar.

02

Monitor

Each loop reports accept rate, last result, running or idle, and next scheduled run. Health is the accept rate, read at a glance by color.

03

Control

Pause a misbehaving loop or trigger a run now, straight from the dropdown or the looptop CLI. No SSH, no launchctl incantations.

Everything about a loop, without opening a terminal.

The looptop CLI

Everything the menu bar shows, scriptable. ls, status, tail, pause, run. Pipe it into your own tooling.

$looptop lsweb-app     running   72%   merged #482hub-parity      idle      58%   drift filedsatchmo-watch   idle      91%   merged #128dep-bumper      paused    44%   gate red$looptop pause dep-bumperpaused dep-bumper · 3 launchd jobs unloaded

Multi-loop discovery

One machine, ten loops, zero chaos. looptop finds them all and lists each on its own card.

Accept-rate health

Color-coded by accept rate so a tanking loop is obvious before it wastes a night.

Last result & ledger

The latest cycle outcome up front, with the full ledger one click deeper.

Next run

See exactly when each loop fires next, or that it is idle between cycles.

Pause & run now

Stop a runaway or kick off a cycle on demand, no launchctl required.

Native menu bar

A real macOS menu-bar app. Always there, never a browser tab.

Open standard

Monitors any loop that conforms to the convention, whatever framework built it.

CLI

htop for your loops, in your terminal.

The name is an homage to htop. looptop ships as both a macOS menu-bar app and a first-class CLI with a live htop-style TUI — same data, same controls, scriptable and pipe-friendly.

Install

$bunx looptop
$bun add -g looptop

Requires Bun. The menu-bar app can also install the CLI onto your PATH from its menu.

Subcommands

looptop lsList all loops and their current state
looptop status <slug>Full detail view for one loop
looptop tail <slug>Follow live log output
looptop pause <slug>Pause a loop (unloads launchd jobs)
looptop resume <slug>Resume a paused loop
looptop run <slug> <mode>Fire one cycle immediately
looptop — zsh
looptop 2 loops13:12:52
running 0 · idle 2 · paused 0 · healthy 2
Web Appweb-app[|||||||||| ]72%idleacceptedAPP-482next 14:00
accepted APP-482· exec · 1h agoMerged search filters; gate green, PR #312
accepted APP-478· exec · 3h agoAdded pagination to /v1/search results
declined APP-475· exec · 10h agoFlaky test on retry; reverted for review
API Syncapi-sync[||||||||||||| ]91%idleacceptedAPI-128next 09:00
↑/↓ Select History+/- Rowsp Pausee Execm Maintq Quit

Open standard

Loops are discovered by convention, not by lock-in.

looptop does not own your loops. It reads a simple open convention, so any loop framework can adopt it and looptop will monitor anything that conforms.

loop.jsondrop in your repo root
{  "slug": "web-app",  "name": "Web App",  "state_dir": "~/.web-app/loop",  "launchd_prefix": "ai.web-app.loop",  "schedule": "10:00, 14:00, 18:00",  "health": { "metric": "accept_rate", "good": 0.5 }}

loop.json manifest

A small file that names the loop and points at where it lives. Drop it in and looptop sees the loop.

ai.<slug>.loop.* jobs

launchd jobs follow a predictable naming scheme, so schedule and run state are discoverable.

~/.<slug>/loop/ state

A conventional state layout for the log, ledger, and accept rate. Read by looptop, owned by you.

Powered by

Built for the bOpen agent stack.

The bopen-tools Claude Code plugin includes a loop-engineering skill and specialist agents that set up and run autonomous loops on your machine. looptop monitors them.

Explore bOpen tools

bopen-tools plugin

The Claude Code plugin that provides the loop-engineering skill, specialist agents, and tooling to build loops that conform to the open convention.

loop-engineering skill

Scaffolds launchd jobs, loop.json manifests, and the state directory — the structure looptop discovers and monitors.

Specialist agents

Devops, project-manager, tester, and retro agents that build, verify, and self-improve each loop cycle.

Stop grepping. Start watching.

Put every autonomous loop you run in one place, built for the people running Ralph-style engineering loops.