openclaw - 💡(How to fix) Fix [Feature]: Topic/Session Management UI [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#54397Fetched 2026-04-08 01:28:09
View on GitHub
Comments
0
Participants
1
Timeline
2
Reactions
0
Participants
Timeline (top)
labeled ×1subscribed ×1

Add Topic Management UI (similar to Cherry Studio conversation threads)

Root Cause

Add Topic Management UI (similar to Cherry Studio conversation threads)

RAW_BUFFERClick to expand / collapse

Summary

Add Topic Management UI (similar to Cherry Studio conversation threads)

Problem to solve

Currently OpenClaw supports multiple sessions at the backend level, but lacks a user-friendly UI for managing conversation topics:

  • No topic list in TUI or Web UI
  • Sessions only have IDs, no readable names
  • No way to switch between topics within UI
  • No topic archiving or restoration

Proposed solution

Add a Topic Management System similar to Cherry Studio:

UI Features:

  1. Topic list sidebar in Web UI
  2. Topic list/switcher in TUI (keyboard shortcut)
  3. Each topic shows: name, last updated, message count
  4. Create/rename/delete topics from UI

Backend:

  1. Support session naming/description
  2. Add topic metadata (created_at, updated_at, tags)
  3. Topic search functionality
  4. Topic export/import

Alternatives considered

No response

Impact

TUI

openclaw tui --session <name> # Already works
openclaw session list # New: list all sessions with names
openclaw session create <name> # New: create named session
openclaw session rename <old> <new> # New: rename session
openclaw session delete <name> # New: delete session
``

Use Case

As a user with multiple ongoing projects, I want to:

  1. Keep conversations organized by project/topic
  2. Switch between topics without losing context
  3. Resume previous conversations easily
  4. Keep token usage low by having isolated contexts per topic

Comparison

| Feature | Cherry Studio | OpenClaw (Current) |
|---------|---------------|----- -----------|
| Topic List UI | ✅ | ❌ |
| Topic Naming | ✅ | ❌ (ID only) |
| Topic Switching | ✅ | ⚠️ (CLI only) |
| Topic Search | ✅ | ❌ |

Evidence/examples

No response

Additional information

No response

extent analysis

Fix Plan

To implement the Topic Management System, follow these steps:

  • Backend Changes:
    • Add a topics table to store topic metadata (name, description, created_at, updated_at, tags)
    • Update the sessions table to include a foreign key referencing the topics table
    • Implement API endpoints for:
      • Creating a new topic: POST /topics with a JSON body containing name and description
      • Renaming a topic: PATCH /topics/:id with a JSON body containing new_name
      • Deleting a topic: DELETE /topics/:id
      • Listing all topics: GET /topics
      • Searching topics: GET /topics/search with a query parameter q
  • Frontend Changes:
    • Add a topic list sidebar to the Web UI, displaying topic names, last updated, and message count
    • Implement a topic switcher in the TUI, allowing users to switch between topics using a keyboard shortcut
    • Update the TUI to display topic names instead of IDs
  • Example Code:
    # Backend example using Flask and SQLAlchemy
    from flask import Flask, request, jsonify
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///topics.db"
    db = SQLAlchemy(app)
    
    class Topic(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(100), nullable=False)
        description = db.Column(db.String(200), nullable=False)
        created_at = db.Column(db.DateTime, nullable=False, default=db.func.current_timestamp())
        updated_at = db.Column(db.DateTime, nullable=False, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())
    
    @app.route("/topics", methods=["POST"])
    def create_topic():
        data = request.get_json()
        topic = Topic(name=data["name"], description=data["description"])
        db.session.add(topic)
        db.session.commit()
        return jsonify({"id": topic.id, "name": topic.name})
    
    @app.route("/topics/<int:topic_id>", methods=["PATCH"])
    def rename_topic(topic_id):
        topic = Topic.query.get(topic_id)
        if topic:
            topic.name = request.get_json()["new_name"]
            db.session.commit()
            return jsonify({"id": topic.id, "name": topic.name})
        return jsonify({"error": "Topic not found"}), 404

Verification

To verify the fix, test the following scenarios:

  • Create a new topic using the Web UI or TUI
  • Rename a topic using the Web UI or TUI
  • Delete a topic using the Web UI or TUI
  • Switch between topics using the TUI keyboard shortcut
  • Search for topics using the Web UI or T

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Feature]: Topic/Session Management UI [1 participants]