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 β€” Tasks
🧡🐻 on
  • πŸ™‹
    can you check why the refresh token 401s after…Refresh-token 401

    next: choose the cookie domain

    footer
  • 🚨
    fix the flaky test in the checkout suite plsCheckout suite flake

    next: restore the sandbox credential

    structured_error
  • ➑️
    New chatSearch index migration

    next: create the implementation plan

    luna
  • ➑️
    refactor the settings screen to use the new form…Settings form refactor

    next: extract the field components

    luna
  • ⏳
    New chatPayments webhook retry
    runtime
  • πŸ€–
    nightly dependency bumpNightly dependency bump
    automation
  • ❔
    New chatLog pipeline spike
    interruption
  • βœ…
    update the README with the new install stepsREADME install steps
    footer
tokens this heartbeat0

Before

Eight threads, no idea which one needs you.

Codex names a task after whatever you typed first, or not at all. Status lives in your head.

1/6

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 its own prefix

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.

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