[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71V8EK5HG1TY1JSJA9ZG6RA":3,"skill-same:01M71V8EK5HG1TY1JSJA9ZG6RA":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M71V8EK5HG1TY1JSJA9ZG6RA","thread-list",null,"Guide for multi-thread management in assistant-ui. Use when implementing thread lists, switching threads, or managing conversation history.","AkaraChen\u002Fangel-engine","AkaraChen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F85140972?v=4","01M6E197RY34TPAFK03227R387","01M71V2QPZM89DQ8R1AB7021P4",19,"MIT","https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fthread-list\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"list","thread","thread list","assistant","ui","history","management","guide","use","conversation","switching","multi","threads","implementing","for","when","2026-11-10 13:02:02",false,"---\nname: thread-list\ndescription: Guide for multi-thread management in assistant-ui. Use when implementing thread lists, switching threads, or managing conversation history.\nversion: 0.0.1\nlicense: MIT\n---\n\n# assistant-ui Thread List\n\n**Always consult [assistant-ui.com\u002Fllms.txt](https:\u002F\u002Fassistant-ui.com\u002Fllms.txt) for latest API.**\n\nManage multiple chat threads with built-in or custom UI.\n\n## References\n\n- [.\u002Freferences\u002Fmanagement.md](.\u002Freferences\u002Fmanagement.md) -- Thread CRUD operations\n- [.\u002Freferences\u002Fcustom-ui.md](.\u002Freferences\u002Fcustom-ui.md) -- Custom thread list UI\n\n## Quick Start\n\nThread list is available with `useChatRuntime` + cloud:\n\n```tsx\nimport { AssistantCloud } from \"assistant-cloud\";\nimport { useChatRuntime, AssistantChatTransport } from \"@assistant-ui\u002Freact-ai-sdk\";\nimport { AssistantRuntimeProvider } from \"@assistant-ui\u002Freact\";\nimport { ThreadList } from \"@\u002Fcomponents\u002Fassistant-ui\u002Fthread-list\";\nimport { Thread } from \"@\u002Fcomponents\u002Fassistant-ui\u002Fthread\";\n\nconst cloud = new AssistantCloud({\n  baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL,\n  authToken: async () => getAuthToken(),\n});\n\nfunction Chat() {\n  const runtime = useChatRuntime({\n    transport: new AssistantChatTransport({ api: \"\u002Fapi\u002Fchat\" }),\n    cloud,\n  });\n\n  return (\n    \u003CAssistantRuntimeProvider runtime={runtime}>\n      \u003Cdiv className=\"flex h-screen\">\n        \u003CThreadList className=\"w-64 border-r\" \u002F>\n        \u003CThread className=\"flex-1\" \u002F>\n      \u003C\u002Fdiv>\n    \u003C\u002FAssistantRuntimeProvider>\n  );\n}\n```\n\n## Thread Operations\n\n```tsx\nimport { useAui, useAuiState } from \"@assistant-ui\u002Freact\";\n\nconst api = useAui();\nconst { threadIds, mainThreadId } = useAuiState((s) => ({\n  threadIds: s.threads.threadIds,\n  mainThreadId: s.threads.mainThreadId,\n}));\n\n\u002F\u002F Switch to thread\napi.threads().switchToThread(threadId);\n\n\u002F\u002F Create new thread\napi.threads().switchToNewThread();\n\n\u002F\u002F Thread item operations\nconst item = api.threads().item({ id: threadId });\nawait item.rename(\"New Title\");\nawait item.archive();\nawait item.delete();\n```\n\n## Custom Thread List\n\n```tsx\nimport { ThreadListPrimitive, ThreadListItemPrimitive } from \"@assistant-ui\u002Freact\";\n\nfunction CustomThreadList() {\n  return (\n    \u003CThreadListPrimitive.Root className=\"w-64\">\n      \u003CThreadListPrimitive.New className=\"w-full p-2 bg-blue-500 text-white\">\n        + New Chat\n      \u003C\u002FThreadListPrimitive.New>\n\n      \u003CThreadListPrimitive.Items>\n        \u003CThreadListItemPrimitive.Root className=\"flex p-2 hover:bg-gray-100\">\n          \u003CThreadListItemPrimitive.Trigger className=\"flex-1\">\n            \u003CThreadListItemPrimitive.Title \u002F>\n          \u003C\u002FThreadListItemPrimitive.Trigger>\n          \u003CThreadListItemPrimitive.Archive>Archive\u003C\u002FThreadListItemPrimitive.Archive>\n          \u003CThreadListItemPrimitive.Delete>Delete\u003C\u002FThreadListItemPrimitive.Delete>\n        \u003C\u002FThreadListItemPrimitive.Root>\n      \u003C\u002FThreadListPrimitive.Items>\n    \u003C\u002FThreadListPrimitive.Root>\n  );\n}\n```\n\n## Without Cloud (Local)\n\n```tsx\nimport {\n  unstable_useRemoteThreadListRuntime as useRemoteThreadListRuntime,\n  unstable_InMemoryThreadListAdapter as InMemoryThreadListAdapter,\n} from \"@assistant-ui\u002Freact\";\n\nconst runtime = useRemoteThreadListRuntime({\n  adapter: new InMemoryThreadListAdapter(),\n  runtimeHook: () => useLocalRuntime({ model: myModel }),\n});\n```\n\n## Common Gotchas\n\n**ThreadList not showing**\n- Pass `cloud` to runtime\n- Check authentication\n\n**Threads not persisting**\n- Verify cloud connection\n- Check network requests\n","# assistant-ui Thread List\n\n**Always consult [assistant-ui.com\u002Fllms.txt](https:\u002F\u002Fassistant-ui.com\u002Fllms.txt) for latest API.**\n\nManage multiple chat threads with built-in or custom UI.\n\n## References\n\n- [.\u002Freferences\u002Fmanagement.md](.\u002Freferences\u002Fmanagement.md) -- Thread CRUD operations\n- [.\u002Freferences\u002Fcustom-ui.md](.\u002Freferences\u002Fcustom-ui.md) -- Custom thread list UI\n\n## Quick Start\n\nThread list is available with `useChatRuntime` + cloud:\n\n```tsx\nimport { AssistantCloud } from \"assistant-cloud\";\nimport { useChatRuntime, AssistantChatTransport } from \"@assistant-ui\u002Freact-ai-sdk\";\nimport { AssistantRuntimeProvider } from \"@assistant-ui\u002Freact\";\nimport { ThreadList } from \"@\u002Fcomponents\u002Fassistant-ui\u002Fthread-list\";\nimport { Thread } from \"@\u002Fcomponents\u002Fassistant-ui\u002Fthread\";\n\nconst cloud = new AssistantCloud({\n  baseUrl: process.env.NEXT_PUBLIC_ASSISTANT_BASE_URL,\n  authToken: async () => getAuthToken(),\n});\n\nfunction Chat() {\n  const runtime = useChatRuntime({\n    transport: new AssistantChatTransport({ api: \"\u002Fapi\u002Fchat\" }),\n    cloud,\n  });\n\n  return (\n    \u003CAssistantRuntimeProvider runtime={runtime}>\n      \u003Cdiv className=\"flex h-screen\">\n        \u003CThreadList className=\"w-64 border-r\" \u002F>\n        \u003CThread className=\"flex-1\" \u002F>\n      \u003C\u002Fdiv>\n    \u003C\u002FAssistantRuntimeProvider>\n  );\n}\n```\n\n## Thread Operations\n\n```tsx\nimport { useAui, useAuiState } from \"@assistant-ui\u002Freact\";\n\nconst api = useAui();\nconst { threadIds, mainThreadId } = useAuiState((s) => ({\n  threadIds: s.threads.threadIds,\n  mainThreadId: s.threads.mainThreadId,\n}));\n\n\u002F\u002F Switch to thread\napi.threads().switchToThread(threadId);\n\n\u002F\u002F Create new thread\napi.threads().switchToNewThread();\n\n\u002F\u002F Thread item operations\nconst item = api.threads().item({ id: threadId });\nawait item.rename(\"New Title\");\nawait item.archive();\nawait item.delete();\n```\n\n## Custom Thread List\n\n```tsx\nimport { ThreadListPrimitive, ThreadListItemPrimitive } from \"@assistant-ui\u002Freact\";\n\nfunction CustomThreadList() {\n  return (\n    \u003CThreadListPrimitive.Root className=\"w-64\">\n      \u003CThreadListPrimitive.New className=\"w-full p-2 bg-blue-500 text-white\">\n        + New Chat\n      \u003C\u002FThreadListPrimitive.New>\n\n      \u003CThreadListPrimitive.Items>\n        \u003CThreadListItemPrimitive.Root className=\"flex p-2 hover:bg-gray-100\">\n          \u003CThreadListItemPrimitive.Trigger className=\"flex-1\">\n            \u003CThreadListItemPrimitive.Title \u002F>\n          \u003C\u002FThreadListItemPrimitive.Trigger>\n          \u003CThreadListItemPrimitive.Archive>Archive\u003C\u002FThreadListItemPrimitive.Archive>\n          \u003CThreadListItemPrimitive.Delete>Delete\u003C\u002FThreadListItemPrimitive.Delete>\n        \u003C\u002FThreadListItemPrimitive.Root>\n      \u003C\u002FThreadListPrimitive.Items>\n    \u003C\u002FThreadListPrimitive.Root>\n  );\n}\n```\n\n## Without Cloud (Local)\n\n```tsx\nimport {\n  unstable_useRemoteThreadListRuntime as useRemoteThreadListRuntime,\n  unstable_InMemoryThreadListAdapter as InMemoryThreadListAdapter,\n} from \"@assistant-ui\u002Freact\";\n\nconst runtime = useRemoteThreadListRuntime({\n  adapter: new InMemoryThreadListAdapter(),\n  runtimeHook: () => useLocalRuntime({ model: myModel }),\n});\n```\n\n## Common Gotchas\n\n**ThreadList not showing**\n- Pass `cloud` to runtime\n- Check authentication\n\n**Threads not persisting**\n- Verify cloud connection\n- Check network requests\n",{"name":5,"license":14,"version":39,"description":7},"0.0.1","master","48a57981043dbb2c534a27f410715a205f50bcfb",".claude\u002Fskills\u002Fthread-list",2,"https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine","https:\u002F\u002Fangel-engine.vercel.app\u002F","https:\u002F\u002Fgithub.com\u002FAkaraChen","https:\u002F\u002Fakr.moe","button painter, string concatenator, log alchemist.\r\n\r\nNo slop, no lag.","2026-09-09 08:58:26",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add AkaraChen\u002Fangel-engine --skill thread-list",{"tool":56,"command":57},"bunx","bunx skills add AkaraChen\u002Fangel-engine --skill thread-list",{"tool":59,"command":60},"pnpm","pnpm dlx skills add AkaraChen\u002Fangel-engine --skill thread-list","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fthread-list\u002FSKILL.md",true,[64,70],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Fcustom-ui.md","REFERENCE","参考文档",11340,"https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fthread-list\u002Freferences\u002Fcustom-ui.md",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fmanagement.md",5861,"https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fthread-list\u002Freferences\u002Fmanagement.md",[75,87,109,122,138,151],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":34},"01M71V8NX6JM9719CJM1R07JNF","update","Update assistant-ui and AI SDK to latest versions. Detects current versions, identifies breaking changes, and executes migrations.","https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fupdate\u002FSKILL.md",[],[77,82,83,84,85,22,86,21],"changes","latest","migrations","ai sdk","sdk",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":98,"publishedAt":34},"01M71V8GA53EWDYMKDCE95JN9M","tools","Guide for tool registration and tool UI in assistant-ui. Use when implementing LLM tools, tool call rendering, or human-in-the-loop patterns.","https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftools\u002FSKILL.md",[93],{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[99,100,101,22,21,31,33,32,102,103,104,105,106,107,108,26,25],"Tools","loop","human-in-the-loop","tool","rendering","human","llm tools","call","patterns","registration",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":34},"01M71V8CQ30TTQP2KHPYCGCR3R","streaming","Guide for assistant-stream package and streaming protocols. Use when implementing streaming backends, custom protocols, or debugging stream issues.","https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fstreaming\u002FSKILL.md",[],[111,31,33,116,117,32,21,26,25,118,119,120,121],"custom","stream","protocols","package","issues","debugging",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":34},"01M71V86CFGGT33XS5FCVAYPVG","setup","Setup and configure assistant-ui in a project. Use when installing packages, configuring runtimes, setting up chat UI, or troubleshooting setup issues.","https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fsetup\u002FSKILL.md",[],[124,33,22,129,130,131,132,133,26,134,135,136,120,137,21],"chat ui","runtimes","project","chat","up","troubleshooting","configure","setting","packages",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":34},"01M71V84DGS3SN4VJ829MHNBB8","runtime","Guide for assistant-ui runtime system and state management. Use when working with runtimes, accessing state, or managing thread\u002Fmessage data.","https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fruntime\u002FSKILL.md",[],[140,26,25,24,145,146,22,147,148,21,149,33,19,32,150,130],"system","data","state","state management","message","with",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":34},"01M71V82YXWTCQS0M06D2HK4C4","primitives","Guide for assistant-ui UI primitives - ThreadPrimitive, ComposerPrimitive, MessagePrimitive. Use when customizing chat UI components.","https:\u002F\u002Fgithub.com\u002FAkaraChen\u002Fangel-engine\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fprimitives\u002FSKILL.md",[],[153,33,32,129,158,132,26,25,22,159,21],"ui components","components"]