Codex Desktop: add independent user labels for threads and projects

Open 💬 1 comment Opened Jun 25, 2026 by chenk0527

Feature request

Codex Desktop can become hard to manage when the sidebar contains many projects and many old or paused conversations. I would like a first-class way to mark both:

  • individual threads/sessions
  • projects/workspaces

The important part is that these should be independent labels or colored markers, not just renaming a thread or project. Renaming loses the original title/context and does not work well for triage states such as "deferred", "blocked", "follow up later", or "active".

Desired behavior

  • Let users assign a small text label and optional color to a thread.
  • Let users assign a small text label and optional color to a project/workspace.
  • Keep labels separate from thread names, project names, and git metadata.
  • Preserve labels across thread read/list/resume/fork/rollback flows.
  • Allow clearing labels explicitly.
  • Give clients enough protocol support to render sidebar badges/chips and filter or group later.

Prototype branch

I pushed a prototype branch from my fork:

https://github.com/openai/codex/compare/main...chenk0527:thread-user-labels

I could not open a PR directly because this repository currently limits PR creation to collaborators, but the branch is available for review.

What the branch currently does:

  • adds a UserLabel { text, color } protocol shape
  • exposes userLabel on thread responses
  • extends thread/metadata/update to set or clear a thread label independently from the thread name
  • adds project/metadata/update and project/metadata/list
  • persists thread labels and project labels in SQLite state
  • preserves thread labels during rollout reconciliation
  • regenerates app-server JSON and TypeScript schemas
  • adds coverage for set/read/list/clear behavior

Validation run on the branch

  • just write-app-server-schema
  • just test -p codex-app-server-protocol
  • just test -p codex-thread-store
  • just test -p codex-state
  • cargo build -p codex-cli --bin codex
  • cargo build -p codex-rmcp-client --bin test_stdio_server
  • just test -p codex-app-server project_metadata thread_metadata_update
  • just test -p codex-app-server (917 passed, 1 skipped)
  • just fmt

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗