Skip to content

feat: add session thread management#98510

Merged
steipete merged 5 commits into
mainfrom
codex/thread-management
Jul 4, 2026
Merged

feat: add session thread management#98510
steipete merged 5 commits into
mainfrom
codex/thread-management

Conversation

@steipete

@steipete steipete commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Related: #54397
Closes #88568

AI-assisted: yes. Implementation and redesign were reviewed with the repository's structured autoreview workflow.

What Problem This Solves

OpenClaw sessions are durable conversation threads, but their management controls were fragmented: frequent sessions disappear into recency ordering, stale sessions stay in every active list unless deleted, and renaming was disconnected from the Chat surfaces. The first iteration of this PR added the controls but rendered three always-visible bordered buttons on every picker row, which crushed session labels and made the picker read as a toolbar instead of a list.

Why This Change Was Made

Pin, archive/restore, and rename land on the existing session model instead of a second topic store: sessions.list separates active and archived sessions, sessions.patch owns management mutations, and live sessions.changed events keep every subscribed UI coherent. Archived chat sessions become read-only, lifecycle fencing keeps concurrent runs/compaction from resurrecting archived state, and the SDK plus Swift protocol expose the same contracts.

The management UI is redesigned to be minimal, following the pattern of modern thread lists (e.g. the Codex app):

  • Rows are single text lines: label left, relative timestamp right.
  • Rename/archive/pin actions stay invisible until the row is hovered or focused (:focus-within keeps them keyboard-reachable); the pin action doubles as the accent pinned badge, so it stays visible for pinned rows.
  • Sessions with an active run show a spinner in the trailing slot instead of the timestamp — a working indicator visible in both the sidebar recents and the chat picker.
  • The sidebar recents float pinned sessions above recency (shared comparator with the picker and Sessions view) and gain the same archive/pin actions through the unified archive fallback, so archiving the current session from any surface switches Chat back to the agent main session.
  • One shared archive policy (canArchiveSessionRow) protects agent main sessions, live runs, and global/unknown scopes across the sidebar, picker, and Sessions table.
  • Full session detail (surface, model, absolute timestamp) moved into the row tooltip; on touch devices, the picker keeps actions visible since there is no hover.

User Impact

Users can now:

  • rename, pin/unpin, and archive sessions directly from the Chat session picker and the sidebar recents list;
  • see pinned sessions above newer unpinned sessions in every session list, marked by an accent pin badge;
  • see at a glance which sessions are actively running (spinner working indicator);
  • switch the Sessions page into an archived-only view and restore sessions without losing transcripts;
  • inspect archived sessions through sessions_list.

Agent main sessions and sessions with active runs cannot be archived. Archiving clears the pin, archived chat sessions are read-only, and archiving the selected session from any surface returns the UI to that agent's main session.

Before / After

Chat session picker — before (always-visible bordered buttons, truncated labels) vs after (minimal rows, hover-revealed actions, pinned badge, run spinner):

Before: chat session picker with three always-visible bordered buttons per row

After: minimal picker rows with hover-revealed actions, pinned badge, and run spinner

Sidebar recents — pinned badge on Release planning, run spinner on Data migration, hover-revealed archive/pin on Research notes:

After: sidebar recents with pinned badge, run spinner, and hover-revealed actions

Evidence

  • OPENCLAW_CAPTURE_UI_PROOF=1 node scripts/run-vitest.mjs run --config test/vitest/vitest.ui-e2e.config.ts --configLoader runner ui/src/ui/e2e/session-management.e2e.test.ts — real Chromium GUI flow covering pinned-first sidebar ordering, run spinner in both surfaces, hover/focus reveal (computed-opacity assertions), pinned badge without hover, main-session archive protection, and rename/pin/archive patch round-trips. Screenshots above are captured by this run.
  • node scripts/run-vitest.mjs run ui/src/ui/views/chat.test.ts ui/src/ui/views/sessions.test.ts ui/src/ui/controllers/sessions.test.ts ui/src/ui/app-render.helpers.node.test.ts ui/src/ui/app-chat.test.ts — 440 tests passed.
  • Gateway/session lifecycle suites: pnpm test src/gateway/sessions-patch.test.ts src/gateway/session-utils.test.ts src/gateway/server.sessions.store-rpc.test.ts src/gateway/server.sessions.delete-lifecycle.test.ts src/gateway/server.sessions.list-changed.test.ts src/agents/tools/sessions-list-tool.test.ts.
  • pnpm tsgo:core and pnpm tsgo:test:ui — passed.
  • pnpm build — passed, including the Control UI production bundle; no [INEFFECTIVE_DYNAMIC_IMPORT] warnings.
  • Structured autoreview — clean after addressing findings (see PR comments for the review trail).
  • Fixed in redesign: the active-run tooltip used a non-existent locale key (sessions.sessionDetails.activeRun); both surfaces now use sessionsView.activeRun.
  • Integration with mailbox-era main: gateway agent admission now treats a session as deleted only when both the requested and canonical alias sets miss it — a canonical-only re-read misreported legacy bare-main stores as deleted, while a requested-only read broke exec-approval followups (src/gateway/server-methods/agent.ts); sessions_list mailbox test expectations learned the archived/pinned row fields; cron persist tests keep one consistent store across claim-guarded persist calls; dead lifecycle writes flagged by no-useless-assignment removed.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: web-ui App: web-ui gateway Gateway runtime scripts Repository scripts agents Agent runtime and tooling size: L maintainer Maintainer-authored PR labels Jul 1, 2026
@steipete
steipete marked this pull request as draft July 1, 2026 08:50

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 56ef85cb06

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1140 to +1141
if (showArchived) {
params.archived = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep chat refreshes on active sessions

When the operator has toggled the Sessions page to the archived-only view, createChatSessionsLoadOverrides(state) used by Chat controls still carries sessionsShowArchived: true into loadSessions via refreshSessionOptions. With this new params.archived = true branch, changing the chat model/thinking/fast mode refreshes the global session list with only archived rows, dropping the active chat session metadata from state.sessionsResult and breaking current-session controls/sidebar state until another active reload happens. Force chat refreshes to request active sessions instead of inheriting the Sessions-page archived filter.

Useful? React with 👍 / 👎.

Comment on lines +1098 to +1100
@click=${(event: MouseEvent) => {
event.stopPropagation();
props.onPatch(row.key, { archived: row.archived !== true });

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Switch away after archiving the selected session

Archiving from the Sessions table now just calls onPatch, and the app-level handler delegates directly to patchSession without the fallback logic used by the chat session picker. If this row is the current chat session, the row disappears from active listings but state.sessionKey still points at the archived thread, so returning to Chat can continue a hidden archived session instead of switching back to the agent main session as the new docs promise.

Useful? React with 👍 / 👎.

@clawsweeper

clawsweeper Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed July 4, 2026, 2:29 PM ET / 18:29 UTC.

Summary
The PR adds Gateway and Control UI session rename, pin, archive/restore, archived/read-only chat behavior, generated SDK/Swift protocol fields, and Codex app-server compaction lifecycle handling.

Reproducibility: yes. by source inspection: call sessions.patch with archived or pinned for a missing key; applySessionEntryPatchProjection supplies no existingEntry, projectSessionsPatchEntry synthesizes a SessionEntry, and the management branch writes it. I did not run tests because review is read-only.

Review metrics: 1 noteworthy metric.

  • Session protocol surface: 1 list filter added, 2 patch fields added. The archived list filter plus archived/pinned patch mutations change Gateway API and generated client contracts that existing integrations may depend on.

Stored data model
Persistent data-model change detected: persistent cache schema: ui/src/ui/app-render.helpers.node.test.ts, serialized state: packages/gateway-protocol/src/schema/sessions.ts, serialized state: src/agents/auth-profiles/session-override.test.ts, serialized state: src/agents/auth-profiles/session-override.ts, serialized state: src/agents/command/session-store.runtime.ts, serialized state: src/agents/command/session-store.test.ts, and 20 more. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Reject missing-row archive/restore and pin/unpin patches and add focused regression tests.

Mantis proof suggestion
A short browser proof would materially help maintainers verify the Control UI picker/sidebar pin, archive, rename, and read-only archived-chat behavior after the remaining fix. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify Control UI session picker and sidebar pin/archive/rename behavior, including archived chat read-only fallback.

Risk before merge

  • [P1] Stale archive/restore or pin/unpin calls can recreate deleted or missing sessions until the management-patch guard is added.
  • [P1] The new Gateway session list/patch fields and generated client updates change a public protocol surface and need explicit maintainer acceptance before merge.
  • [P1] The Codex compaction bridge touches thread binding, interrupt, remote thread detachment, retirement, and auth/session lifecycle behavior that green UI tests alone do not settle.

Maintainer options:

  1. Fix stale-row management first (recommended)
    Add a missing-entry guard for archived and pinned management mutations, preserve existing non-management patch behavior, and add focused regression tests before merge.
  2. Accept the broad session protocol surface
    Maintainers can explicitly accept the new list/patch protocol and generated client contract once the stale-row blocker is repaired.
  3. Pause if the surface is too broad
    If maintainers do not want this much Gateway, UI, generated-client, and Codex lifecycle work in one PR, split or close in favor of narrower follow-up PRs.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Fix this PR so sessions.patch rejects archived and pinned management mutations when the target session entry is missing, preserves existing non-management patch behavior, and adds focused tests in src/gateway/sessions-patch.test.ts for archive/restore and pin/unpin on missing rows.

Next step before merge

  • [P2] A narrow repair can reject missing-row management mutations without deciding the larger product/API direction.

Security
Cleared: The diff touches security-sensitive Codex and Gateway session lifecycle paths, but this review found no concrete credential, authorization, sandbox, or supply-chain defect beyond the merge-risk items already called out.

Review findings

  • [P2] Reject missing-session management patches — src/gateway/sessions-patch.ts:372-390
Review details

Best possible solution:

Reject missing-row archive/restore and pin/unpin mutations while preserving existing non-management patch adoption, then have maintainers explicitly accept the broad Gateway protocol, generated-client, UI, and Codex lifecycle surface.

Do we have a high-confidence way to reproduce the issue?

Yes by source inspection: call sessions.patch with archived or pinned for a missing key; applySessionEntryPatchProjection supplies no existingEntry, projectSessionsPatchEntry synthesizes a SessionEntry, and the management branch writes it. I did not run tests because review is read-only.

Is this the best way to solve the issue?

No. The feature direction is plausible and mostly in the right owner boundary, but the current patch is not the best merge shape until missing row-management mutations fail closed.

Full review comments:

  • [P2] Reject missing-session management patches — src/gateway/sessions-patch.ts:372-390
    Still unfixed from the prior review: when archive/restore or pin/unpin reaches sessions.patch after the target row was deleted or was never present, projectSessionsPatchEntry has already synthesized a fresh SessionEntry. These branches then write that row, so a deleted session can reappear as an empty active, archived, or pinned thread; reject archived/pinned management patches when existingEntry is absent and add regression coverage.
    Confidence: 0.91

Overall correctness: patch is incorrect
Overall confidence: 0.9

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 6da5db21a633.

Label changes

Label justifications:

  • P2: The PR is a normal-priority feature with a concrete session-state blocker and broad but bounded merge risk.
  • merge-risk: 🚨 compatibility: The PR adds Gateway session API fields and generated SDK/Swift protocol changes that existing clients and upgrades may depend on.
  • merge-risk: 🚨 session-state: The PR changes persisted session archive/pin lifecycle and currently allows stale management calls to resurrect missing sessions.
  • merge-risk: 🚨 security-boundary: The Codex compaction integration touches interrupt, thread binding, remote detachment, and auth/session lifecycle boundaries that need maintainer acceptance.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): The PR body includes after-change screenshots and Chromium GUI E2E evidence for the visible Control UI session-management behavior, and the downloaded PNGs were inspectable.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-change screenshots and Chromium GUI E2E evidence for the visible Control UI session-management behavior, and the downloaded PNGs were inspectable.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. The PR body includes after-change screenshots and Chromium GUI E2E evidence for the visible Control UI session-management behavior, and the downloaded PNGs were inspectable.
Evidence reviewed

Acceptance criteria:

  • [P1] node scripts/run-vitest.mjs src/gateway/sessions-patch.test.ts.
  • [P1] node scripts/run-vitest.mjs src/gateway/server.sessions.store-rpc.test.ts src/gateway/server.sessions.list-changed.test.ts.

What I checked:

  • Live PR state: this PR is open, non-draft, mergeable, and carries maintainer/proof/merge-risk labels at head 0953b75. (0953b7530dfa)
  • Missing-row projection creates a new entry: When no existing session entry is supplied, projectSessionsPatchEntry builds a fresh SessionEntry with a new sessionId before applying the patch. (src/gateway/sessions-patch.ts:171, 0953b7530dfa)
  • Archive and pin mutations lack the missing-entry guard: The archived and pinned branches mutate the synthesized entry without first requiring params.existingEntry, so stale archive/restore or pin/unpin calls can write a resurrected row. (src/gateway/sessions-patch.ts:372, 0953b7530dfa)
  • Store projection persists the synthesized row: applySessionEntryPatchProjection passes existingEntry only when the store contains the target key, then writes the projected entry back when the projection succeeds. (src/config/sessions/store.ts:1137, 0953b7530dfa)
  • Current PR test encodes missing-row pin success: The pin test calls runPatch with an empty default store and currently expects the pin mutation to create a row instead of rejecting a missing management target. (src/gateway/sessions-patch.test.ts:238, 0953b7530dfa)
  • Gateway API surface expands: The PR adds session list/patch protocol fields for archived filtering and pinned/archive management, which makes this a compatibility-sensitive generated client change. (packages/gateway-protocol/src/schema/sessions.ts:188, 0953b7530dfa)

Likely related people:

  • @steipete: Authored the PR branch and has recent current-main work in Control UI and Codex app-server integration areas that this feature touches. (role: feature owner and recent adjacent contributor; confidence: high; commits: 0953b7530dfa, d5698038d71c, ec72de41; files: ui/src/ui/controllers/sessions.ts, ui/src/ui/controllers/chat.ts, src/gateway/sessions-patch.ts)
  • @vincentkoc: Recent current-main history and blame cover the session patch/store paths involved in the missing-row projection behavior. (role: recent area contributor; confidence: medium; commits: db7286187f16, e085fa1a3ffd; files: src/gateway/sessions-patch.ts, src/gateway/server-methods/sessions.ts, src/config/sessions/store.ts)
  • @Takhoffman: Recent session gateway history includes adjacent work in the same broad session management surface, but the direct ownership trail is less central than the other candidates. (role: adjacent session gateway contributor; confidence: low; files: src/gateway/sessions-patch.ts, src/gateway/server-methods/sessions.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (5 earlier review cycles)
  • reviewed 2026-07-04T06:48:13.490Z sha 4882d7e :: needs changes before merge. :: [P2] Reject missing-row management patches
  • reviewed 2026-07-04T10:12:51.371Z sha 40d0b0f :: needs changes before merge. :: [P2] Reject missing-row management patches
  • reviewed 2026-07-04T16:46:25.881Z sha 40d0b0f :: needs changes before merge. :: [P2] Reject missing-session management patches
  • reviewed 2026-07-04T17:10:16.073Z sha c53ebb7 :: needs changes before merge. :: [P2] Reject missing-session management patches
  • reviewed 2026-07-04T17:17:04.808Z sha c53ebb7 :: needs changes before merge. :: [P2] Reject missing-session management patches

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels Jul 1, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jul 2, 2026
@steipete
steipete force-pushed the codex/thread-management branch from 56ef85c to a73046d Compare July 4, 2026 03:38
@steipete
steipete marked this pull request as ready for review July 4, 2026 03:38
@steipete
steipete requested a review from a team as a code owner July 4, 2026 03:38
@openclaw-barnacle openclaw-barnacle Bot added channel: voice-call Channel integration: voice-call app: ios App: ios app: macos App: macos labels Jul 4, 2026
@github-actions github-actions Bot added the dependencies-changed PR changes dependency-related files label Jul 4, 2026
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Dependency graph guard cleared

This PR no longer has blocked dependency graph changes. A future dependency graph change requires a fresh /allow-dependencies-change comment after the guard blocks that new head SHA.

  • Current SHA: 3da41b0eb43aa50053b347f4e36fe77932debd36

@steipete steipete closed this Jul 4, 2026
@steipete steipete reopened this Jul 4, 2026
@steipete
steipete force-pushed the codex/thread-management branch from 40d0b0f to c53ebb7 Compare July 4, 2026 17:00
@openclaw-barnacle openclaw-barnacle Bot removed channel: discord Channel integration: discord channel: imessage Channel integration: imessage channel: line Channel integration: line channel: matrix Channel integration: matrix channel: mattermost Channel integration: mattermost channel: msteams Channel integration: msteams channel: nostr Channel integration: nostr labels Jul 4, 2026
steipete added 5 commits July 4, 2026 11:30
Squash of codex/thread-management (025aefc3ad1) onto origin/main:
pin/archive/rename sessions via sessions.patch, archived-aware
sessions.list, lifecycle fencing, read-only archived chat, SDK +
Swift protocol support, Control UI session management.
Chat picker and sidebar recents share session-row primitives: single-line
rows, relative timestamps, rename/archive/pin revealed on hover or focus,
accent pin badge for pinned rows, and an active-run spinner in the trail
slot. Sidebar floats pinned sessions above recency via the shared
comparator and gains archive/pin actions through the unified sessions-view
patch fallback. Archive eligibility is one shared policy
(canArchiveSessionRow); the sidebar/picker active-run tooltip now uses the
real sessionsView.activeRun locale key.
Integration fixes after rebasing onto current main: sessions_list mailbox
test expectations learn the archived/pinned row fields and archived:false
list param; gateway agent admission treats a session as deleted only when
both the requested and canonical alias sets miss it (legacy bare-main
stores and exec-approval followups read under different spellings); cron
persist tests keep a consistent store across claim-guarded persist calls;
the ACP abort hook test asserts abort propagation instead of signal
identity; drop dead lifecycle writes flagged by no-useless-assignment and
fix the promise-executor return in the codex compact test.
Sidebar session rows are wrapper divs with an inner link now: update the
navigation browser tests and chat-flow Playwright selectors. Seed a real
per-test session store for the auto-fallback admission guard instead of
depending on leftover host files at /tmp/sessions.json. Teach the
test-projects routing fixture about the suites that newly import the
shared temp-dir helper. Document the Codex thread-format contract for
archivedAt/pinnedAt (flag derived from server-stamped timestamp, epoch ms
here vs Codex epoch seconds) at the type and in the session docs.
The auto-fallback suite now imports the shared temp-dir helper for its
seeded session store, so the top-level helper routing fixture must list
it in the auto-reply plan.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3da41b0eb4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

if (!result.compacted) {
const details = result.result?.details;
if (details?.pending === true || details?.signal === "thread/compact/start") {
if (details?.pending === true) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve legacy pending compaction responses

When a newer CLI talks to an older Gateway/Codex runtime that still returns the previous accepted-async shape (ok:true, compacted:false, result.details.signal:"thread/compact/start" without pending), this now falls through to the no-op message. That makes openclaw sessions compact report “No compaction needed” even though native Codex compaction was started; keep recognizing the old signal marker alongside the new terminal response shape.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling app: ios App: ios app: macos App: macos app: web-ui App: web-ui channel: voice-call Channel integration: voice-call cli CLI command changes commands Command implementations docs Improvements or additions to documentation extensions: codex gateway Gateway runtime maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. plugin: file-transfer proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. scripts Repository scripts size: XL status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: support pinning / starring sessions for quick access

1 participant