ThreadBear

Wrangle your threads.

Disorganized threads in Codex are unbearable. ThreadBear keeps every task classified, usefully titled, and safely archived — and spends zero model tokens on a heartbeat where nothing changed.

curl -fsSL https://threadbear.dev/install.sh | sh

macOS · installs to ~/.local/bin · no sudo · checksum-verified

a single Go binarya LaunchAgent, not a Codex automationno daemon of its own

Watch it work

Codex🧵🐻 on

acme-api

  • can you check why the refresh token 401s after the cook…🙋 Refresh-token 401 — choose the cookie domain
  • New chat⏳ Payments webhook retry
  • fix the flaky test in the checkout suite pls🚨 Checkout suite flake — restore the sandbox credential

acme-web

  • New chat➡️ Search index migration — create the implementation plan
  • refactor the settings screen to use the new form lib➡️ Settings form refactor — extract the field components
  • update the README with the new install steps✅ README install steps

infra

  • nightly dependency bump🤖 Nightly dependency bump
  • New chat❔ Log pipeline spike
$threadbear status
8 tasks · nothing classified yet0 tokens
1/6

Before

Eight threads, none of them saying anything.

Codex names a thread after whatever you typed first, or not at all. Which one is blocked? Which one is waiting on you? You open them to find out.

Built to be boring where it counts.

A task manager that watches your agent all day is a task manager that can quietly cost more than the agent. ThreadBear is designed so the common case is free and the expensive case is bounded.

Deterministic first, model last

Most of what you want to know is already in local state: whether a turn is running, whether it failed with a structured error, whether it is a registered automation, whether it was interrupted, and whether the agent left a status footer on its last message. ThreadBear reads that from a read-only local index and decides without a model call. Every classification records how it was reached — runtime, structured_error, automation, interruption, footer, luna, or unknown — so the provenance of every answer is auditable rather than implied.

An unchanged heartbeat costs nothing

The heartbeat runs from a macOS LaunchAgent rather than a Codex automation, precisely so an idle cycle can exit against local state without spending a token. The prototype that preceded ThreadBear did the opposite: it ran its classifier as a long-lived Codex task, accumulated more than five million input tokens, and replayed roughly 92,000–138,000 of them on turns that had nothing new to report. Deleting that cost model is the reason ThreadBear exists.

When judgment is required, it is one bounded call

Threads that survive the deterministic cascade are packed into the fewest calls that fit the model's advertised context and sent to gpt-5.6-luna at medium effort in a fresh, non-persisted session — no tools, no environment, no approvals, no history. Nothing accumulates, so nothing gets replayed on the next call. Medium is the default because the benchmark showed it carried a lower false-complete risk than low effort; both the model and the effort are configuration values, so a model deprecation is an edit rather than a release.

It only ever touches the title

A managed title is one canonical status emoji, a durable subject you can recognize, and the current next action when there is one. A subject you edited yourself survives. Prefixes never compound, and a stale next action is removed rather than stacked on top of the last one.

Nothing else moves. ThreadBear does not reorder your sidebar, invent projects, pin threads, edit Codex's global state, or drive the UI — there is no supported, reliable control surface for any of that, so it does not pretend otherwise. Your list stays in the order and the projects you left it in; only what each row says changes. Completed threads retire on their own after they have been complete and idle for 14 days, and nothing that is running, blocked, or waiting on you is ever archived.

Seven states, one glance

Every classified, unarchived task carries exactly one of these.

running
a turn is actively working
needs input
waiting on you to answer or approve
blocked
a structured turn error stopped it
next steps
idle, with one concrete thing to do
automation
a healthy scheduled task, idle by design
complete
finished, and eligible to archive
unknown
interrupted or cancelled without a disposition

Give your sidebar a hug.

One command. It explains everything it is about to do, then asks once before it touches a thing.

curl -fsSL https://threadbear.dev/install.sh | sh

macOS · installs to ~/.local/bin · no sudo · checksum-verified

Prefer to read it first?View the install script·Source on GitHub