跳到主要内容

标签与自定义字段:用你自己的维度组织任务

· 阅读需 8 分钟
Creator of UnDercontrol

大多数工具会替你决定任务「长什么样」:几个固定的下拉框、一套写死的字段、一种别人设计好的分类法。可现实里,每个人、每个团队、每种工作流想追踪的维度都不一样 —— 有人要「优先级」,有人要「客户」「预估工时」「所属部门」,有人只想随手贴个标签晚点再筛。

UnDercontrol 不强加结构。它给你三层可自由组合的工具:自由标签带类型的自定义字段、以及任意键值对。三者都能被查询语法直接筛选,让你按自己的维度切分同一批任务,而不是迁就工具的分类法。

这背后是 UnDercontrol 的一个核心理念:任务不只是待办,它是承载信息的统一容器。同一个 Markdown 编辑器贯穿任务、备注、账目、账户等所有文本界面 —— 而标签和自定义字段,就是让你在这个容器上叠加「你自己的结构」的方式。

同一批任务,按标签 / 自定义字段 / 键值对三种维度自由切分

一、自由标签:最轻的组织方式

标签就是你随手贴的自由文本 —— 没有预定义词表,想写什么写什么(workurgent客户-acmebug 都行)。

  • 有输入建议:输入时会从你以前用过的标签里给出补全建议(按最近使用排序),既自由又不会拼错、不会一个概念冒出十种写法。
  • 批量打标签:在任务搜索页可以对一批任务批量增删标签,不用一个个点开。
  • 不只挂在任务上:标签也能贴到资源(上传的文件)上,帮你把文件和任务用同一套词表串起来。

标签本身就是可查询的数组字段:

tags CONTAINS 'work'                   -- 含 work 标签
tags IN ('work', 'personal') -- 含 work 或 personal
tags CONTAINS_ALL ('work', 'urgent') -- 同时含 work 和 urgent

典型场景:临时来了一批相关任务,先统一贴个 q3-launch 标签,之后不管在哪个看板都能用 tags CONTAINS 'q3-launch' 一键聚合;等这波做完,标签留着当归档线索,或批量删掉。

任务详情的标签输入框,展开的历史标签补全建议

二、自定义字段:带类型的结构化维度

标签解决「贴个词」的问题,但当你要追踪的是有类型、有取值范围的东西 —— 优先级是数字、部门是几个固定选项、负责人是某个成员 —— 就该上自定义字段。

自定义字段 页(/custom-fields,也能从任务详情的属性区、看板菜单或命令面板进入)里定义一个字段,你可以选它的类型:

  • 文本(Text) —— 自由文本值
  • 数字(Number) —— 数值,支持大小比较
  • 单选(Select) —— 你预先列好的一组固定选项
  • 复选框(Checkbox) —— 是 / 否的布尔值
  • 用户(User) —— 从工作区成员里选一个人

定义时还能设「是否必填」。定义好之后,字段会出现在任务详情里,直接内联填写,值就存在这个任务上。

自定义字段页与「新建字段」抽屉中的 5 种类型:文本 / 数字 / 单选 / 复选 / 用户

按标签限定字段的适用范围

这是一个很关键的设计:自定义字段不必对所有任务生效。新建字段时可以选作用范围

  • 全部任务 —— 每个任务都显示这个字段
  • 仅限带某些标签的任务 —— 只有打了指定标签的任务才会出现这个字段

于是「标签」和「自定义字段」自然咬合:任务详情页只会显示跟当前任务标签匹配的字段,不相关的字段不会来打扰你。给任务贴上 bug 标签,「复现步骤」「严重级别」这些字段才冒出来;贴上 sales,「客户」「金额」才出现。

打了 bug 标签的任务,属性区自动显示 Severity、Reviewer 等 bug 专属字段

典型场景:团队同时跑「工程 bug」和「销售跟进」两类任务。给 bug 相关字段设作用范围 = bug 标签,给销售字段设 = sales 标签。同一个看板里,两类任务各自只显示自己那套字段,互不干扰 —— 不用为此拆成两个系统。

三、任意键值对:留给临时和结构外的信息

不是所有元数据都值得先去定义一个字段。任务详情里还有一块额外元数据区域,让你直接往任务上加任意的键值对(比如 jira: PROJ-123source: 客户邮件),无需事先在设置里声明。

这层是「自由标签」和「正式自定义字段」之间的缓冲:先随手记下,用多了、成了固定维度,再把它提升成一个带类型的自定义字段。

任务上的自由键值对:jira、external_id、source,无需事先定义

典型场景:从外部系统同步进来的任务带了一堆零散字段(工单号、来源链接、外部 ID),先原样塞进键值对保留下来;哪个字段后来发现要经常按它筛选,再正式建一个自定义字段。

四、把它们查出来:cf. 前缀与看板列

自定义字段能力真正的杠杆,在于它们和内置字段一样可查询。在查询里用 cf. 前缀引用你的自定义字段:

cf.priority > 5                          -- 优先级大于 5
cf.priority IN (1, 2, 3) -- 优先级是 1、2 或 3
cf.department = 'engineering' -- 工程部门
cf.priority IS NULL -- 还没设优先级的任务
cf.priority > 5 AND status = 'todo' -- 高优先级的待办
cf.priority > 5 ORDER BY updated_at DESC -- 高优先级按更新时间排

自定义字段能和内置字段(statustagsdeadline 等)在同一条查询里自由组合。而在 UnDercontrol 里,看板的每一列本质上就是一条保存下来的查询 —— 所以你可以直接建一列叫「高优先级待办」,条件是 cf.priority > 5 AND status = 'todo',任务只要满足条件就自动落进这一列,不用手动拖。任务搜索页也能把自定义字段作为列显示出来。

看板列条件构建器:Tags has #bug AND Custom: Severity = critical,生成查询 tags CONTAINS 'bug' AND cf.severity = 'critical'

典型场景:给团队搭一个「按客户看」的看板,每列一个客户,列条件用 cf.client = '...';新任务只要填了客户字段就自动归位。同一批任务,换个查询就是「按优先级看」「按部门看」—— 视图随维度切换,数据只有一份。

小结

UnDercontrol 不替你决定任务该有哪些维度,而是给你三层能力,按需从轻到重叠加:

  • 自由标签 —— 零成本、随手贴、可批量、有补全
  • 自定义字段 —— 带类型(文本/数字/单选/复选/用户)、可必填、可按标签限定作用范围
  • 任意键值对 —— 留给临时和结构外的信息,随时可提升为正式字段

而这三层的共同底座,是一套统一的查询语法:tags CONTAINS_ALL(...)cf.priority > 5、和内置字段自由组合,再把查询固化成看板列。同一批任务,你想怎么切就怎么切 —— 结构是你的,不是工具的。

这一切都建立在 UnDercontrol「任务不只是待办」的理念之上:一个统一的信息容器,一套贯穿所有文本界面的编辑器,加上让你自定义维度的标签与字段。你可以搭配 Claude Code、Codex、OpenCode 或任何基于终端的 Agent 来读写这些结构化数据 —— 但组织方式的主导权,始终在你手里。

一份数据,多种切法:同一批任务按标签 / cf.priority / cf.client 切成不同看板视图