news 2026/9/12 13:33:07

Karakeep 如何用列表和智能列表把书签组织成动态视图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Karakeep 如何用列表和智能列表把书签组织成动态视图

Karakeep 如何用列表和智能列表把书签组织成动态视图

【免费下载链接】hoarderA self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search项目地址: https://gitcode.com/GitHub_Trending/ho/hoarder

Karakeep 中的列表(Lists)是书签组织的核心层:每条保存的内容都可以同时放在多个列表里,按项目、主题或读者分组而不需要复制书签。列表分两种——手动列表(manual,手动往里加书签)和智能列表(smart,由一条保存的搜索查询驱动、自动更新)。这篇文章的目标是:在你的 Karakeep 实例中创建这两种列表,用查询语言设计一个"动态视图"(比如只显示未归档的 AI 标签书签),并通过 CLI 与 API 验证列表内容是否符合预期。

前提是你已经有一个可访问的 Karakeep 实例。命令行操作部分还需要一个 API key:从 Karakeep 的设置页获取,文档见 Command Line Tool (CLI)。

先弄清两种列表的分工

根据 Lists 文档:

  • 手动列表:手工维护的精选集合,适合项目、阅读队列或手挑的合集。可以是private(只有你自己可见)或public(分享一个只读链接),也可以协作——通过邮件邀请别人以 viewer(只浏览)或 editor(可以加入自己的书签)身份参与;即使列表共享,你个人的状态(收藏/归档)仍然属于你自己。
  • 智能列表:由一条保存的搜索查询(saved search query)驱动、自动更新的列表,文档给出的例子是#ai -archived。适合做动态视图,例如 "Youtube links added last week" 或 "All reddit links from r/selfhosted" 这类会随新书签自动变化的集合。

Tags 文档 的建议是:标签(tags)用于宽泛发现,列表用于干净的手挑整理;标签会跟着书签出现在任何地方,而智能列表正好用#<tag>查询把标签筛选固化成一个视图。

用查询语言设计动态视图

智能列表的query使用 Karakeep 的搜索查询语言。基本语法规则:

  • 空格分隔多个条件,表示隐式 AND;
  • and/or写显式布尔逻辑;
  • -!前缀取反,例如-is:archived!is:archived
  • 用括号()分组条件(注意:分组本身不能被取反)。

与"动态视图"最相关的一组限定符(qualifier)如下(完整表格见上述文档):

限定符含义文档示例
is:archived已归档书签-is:archived
is:inlist/is:tagged在一个或多个列表 / 带标签的书签is:inlist
is:link,is:text,is:media按书签类型过滤is:link
url:<value>URL 子串匹配url:example.com
title:<value>标题子串匹配title:example
#<tag>/tag:<tag>按标签匹配#important
list:<name>在指定列表中的书签list:reading
after:<date>/before:<date>创建日期在某个日期(YYYY-MM-DD)之后/之前after:2023-01-01
age:<time-range>按创建时间距今多久,单位d/w/m/y</>表示最大/最小年龄age:<1dage:>2w
feed:<name>从某个 RSS feed 导入的书签feed:Hackernews
source:<value>按来源过滤(apiwebclimobileextensionsinglefilerssimportsource:rss

不属于限定符的文本会被当作全文搜索。文档中给出的示例查询(可直接照抄到智能列表的query里):

# 2023 年收藏的、带 "important" 标签的书签 is:fav after:2023-01-01 before:2023-12-31 #important # 已归档、且在 "reading" 列表或带 "work" 标签的书签 is:archived and (list:reading or #work) # 没有标签、也没有放进任何列表的书签 -is:tagged or -is:inlist # 未收藏且未归档的书签 -is:fav -is:archived

准备条件:安装 CLI 并配置 API key

npm install -g @karakeep/cli

也可以不改本机环境,用 Docker 方式体验:

docker run --rm ghcr.io/karakeep-app/karakeep-cli:release --help

从 Karakeep 设置页拿到 API key 后,先验证连接是否正常:

karakeep --api-key <key> --server-addr <addr> whoami

其中<key>换成你的 API key,<addr>换成你的服务器地址。文档示例(仅为格式参考,不是你的实际输出):

{ id: 'j29gnbzxxd01q74j2lu88tnb', name: 'Test User', email: 'test@gmail.com' }

不想每次传--api-key/--server-addr的话,把配置存到$XDG_CONFIG_HOME/karakeep/config.json(未设置XDG_CONFIG_HOME时为~/.config/karakeep/config.json):

{ "serverAddr": "https://try.karakeep.app", "apiKey": "mysupersecretkey" }

优先级规则是:命令行选项 > 环境变量(KARAKEEP_API_KEYKARAKEEP_SERVER_ADDR)> 配置文件。不提供服务器地址时,CLI 默认连接https://cloud.karakeep.app。也可以用karakeep auth init交互式创建或更新这个文件。

创建一个智能列表

lists create子命令定义在 CLI 源码 apps/cli/src/commands/lists.ts 中(官方 CLI 文档的命令帮助里只列出了list/delete/add-bookmark/remove-bookmark,如果你的版本帮助里看不到create,先跑karakeep lists --help确认)。参数说明:

  • --name <name>:列表名,必填;
  • --icon <icon>:列表图标,必填,取一个 emoji;
  • --type <type>manualsmart,默认manual
  • --query <query>:智能列表的搜索查询,smart 列表必填;
  • --description <description>:描述;
  • --parent-id <id>:父列表 id,用于把列表组织成树。

按上一步设计的查询创建一个智能列表:

karakeep lists create --name "AI Inbox" --icon "🤖" --type smart --query "#ai -archived"

创建成功时 CLI 会打印新列表的对象;失败时打印Failed to create list。同一入口也可以建手动列表——--type省略即为manual,且此时不能--query

如果你走 API 而不是 CLI,对应的是POST /lists(文档:Create a new list)。请求体要求nameicontypemanualsmart,smart 列表必须带query、manual 列表不能带query——违反这一点会返回 400(文档原文给出的 400 情形就是 "smart list missing query, or manual list with a query")。成功返回 201 和列表对象,其中包含idtypequery等字段;401 表示 Bearer token 缺失、无效或过期。

把书签加入或移出手动列表

手动列表靠显式增删维护。CLI 对应子命令:

# 把指定书签加入列表 karakeep lists add-bookmark --list <listId> --bookmark <bookmarkId> # 从列表移除书签 karakeep lists remove-bookmark --list <listId> --bookmark <bookmarkId>

<listId><bookmarkId>分别替换为你列表和书签的 id。成功时打印Successfully added bookmark ... to list with id ...之类的确认信息,失败时打印对应错误。智能列表不需要(也不靠)手动增删——它的内容由查询实时算出。

验证列表与动态视图

验证分三层:

  1. 列表清单与计数
karakeep lists list

不带--json时,CLI 以树形表格列出所有列表,列为IdNameDescriptionBookmarks(书签数),并顺带打印各列表的书签统计;加--json则输出原始 JSON。新建的智能列表应出现在表中,且Bookmarks数量就是当前匹配查询的书签数。

  1. 列表详情
karakeep lists get <id>

输出包含TypeQuery(智能列表的查询)、ParentPublicRole等字段,用它确认列表类型和查询内容与你的设计一致。

  1. 列表内书签(智能列表的核心验证点):调用GET /lists/{listId}/bookmarks(文档:Get bookmarks in a list)。该接口文档明确说明:"For smart lists, bookmarks are computed from the list's query."返回 200,含bookmarks数组和nextCursor(无更多结果时为 null,可用作翻页游标)。可选查询参数:sortOrder(按创建时间asc/desc,默认desc)、limit(每页条数)、cursor(上一页返回的游标)、includeContent(设为 true 时返回完整正文内容,false 时响应更轻)。返回 401 是认证问题,404 表示列表不存在。

动态视图的验证方式:新保存的书签如果满足列表查询,会出现在该智能列表中;不符合的不会。这正是 smart 列表相对手动列表的差异——视图随书签库自动演化,而不是靠手工维护。

限制与边界

  • 查询里括号分组可以嵌套,但分组不能被取反(查询语言文档明确说明 groups can't be negated)。
  • name上限 100 字符,description上限 500 字符(POST /lists的请求 schema)。
  • public 只读分享与 email 协作(viewer/editor)是文档在手动列表条目下描述的属性;智能列表条目没有说明这两点,不要假设它们同样可用。
  • CLI 认证三件套(API key、服务器地址、配置文件的 JSON 格式)必须与 Command Line Tool (CLI) 一致,whoami是判断配置是否正确的第一道检查。

想进一步自动化(例如新书签满足条件时自动归档或进列表),文档给出的下一步是规则引擎与 API/Webhooks:用 if-this-then-that 风格规则基于元数据或内容自动打标、收藏或把书签路由进列表。

【免费下载链接】hoarderA self-hostable bookmark-everything app (links, notes and images) with AI-based automatic tagging and full text search项目地址: https://gitcode.com/GitHub_Trending/ho/hoarder

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 13:27:35

Global Coding Standards

Global Coding Standards 【免费下载链接】Roo-Code Roo Code gives you a whole dev team of AI agents in your code editor. 项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code Always use TypeScript for new projectsWrite unit tests for all new funct…

作者头像 李华
网站建设 2026/9/12 13:25:45

结构光三维重建中的相机-投影仪联合标定与相位编码方法

简介&#xff1a;这是一套面向计算机视觉方向学习者的完整工程资源&#xff0c;聚焦相机标定、投影仪标定与三维重建全流程&#xff0c;适合高校学生作为毕设、课程设计或项目初期参考&#xff0c;也适合有Python基础的入门者进阶实践。代码经作者测试通过&#xff0c;在答辩中…

作者头像 李华
网站建设 2026/9/12 13:24:41

有铅与无铅焊料怎么选?从材料原理到工艺缺陷的完整指南

1. 有铅与无铅&#xff1a;电子制造绕不开的岔路口在电子制造这条线上摸爬滚打十几年&#xff0c;最常被问到的技术选型问题之一&#xff0c;就是有铅焊料和无铅焊料到底怎么选。这问题看着基础&#xff0c;实际上一旦深挖&#xff0c;牵扯出来的是合金配方、焊接工艺、可靠性验…

作者头像 李华
网站建设 2026/9/12 13:23:21

AI编程Agent平台盘点:从IDE补全到自主开发的范式迁移

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 13:21:20

深圳驰宇微320240液晶模块选型与工业适配指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华