showcase/shell-docs/src/content/reference/hooks/useThreads.mdx
<OpsPlatformCTA variant="card" title="useThreads needs a CopilotKit Intelligence project" body="Create a cloud-hosted project or connect a self-hosted deployment to start syncing threads." ctaLabel="Create a free account" surface="docs_reference_use_threads" />
useThreads is a React hook for managing conversation threads in CopilotKit Intelligence. It fetches the thread list for a given agent, keeps it synchronized in realtime via WebSocket, and exposes mutation methods for renaming, archiving, and deleting threads.
Threads are sorted by most recently updated first. The hook supports cursor-based pagination when a limit is provided.
useThreads only activates when the connected runtime advertises compatible REST thread endpoints. Managed CopilotKit Intelligence provides those endpoints for durable thread metadata and realtime updates. Self-managed runner persistence, such as AgentRunner, SqliteAgentRunner, or a custom runner, can still persist and replay chat history, but it does not automatically provide the managed useThreads list/mutation/realtime contract.
import { useThreads } from "@copilotkit/react-core/v2";
function useThreads(input: UseThreadsInput): UseThreadsResult
import { useThreads } from "@copilotkit/react-core/v2"; // [!code highlight]
function ThreadList() {
const {
threads,
isLoading,
renameThread,
archiveThread,
deleteThread,
} = useThreads({ agentId: "my-agent" }); // [!code highlight]
if (isLoading) return <div>Loading threads...</div>;
return (
<ul>
{threads.map((thread) => (
<li key={thread.id}>
<span>{thread.name ?? "Untitled"}</span>
<button onClick={() => renameThread(thread.id, "New name")}>
Rename
</button>
<button onClick={() => archiveThread(thread.id)}>Archive</button>
<button onClick={() => deleteThread(thread.id)}>Delete</button>
</li>
))}
</ul>
);
}
/threads request is made and error explains that thread endpoints are unavailable.error state updates with the most recent error from any operation.threads array stays sorted by updatedAt descending (most recent first).generateThreadNames on the runtime.