hasanyilmaz/operon
GitHub: hasanyilmaz/operon
Operon 是一款 Obsidian 任务管理插件,将分散的内联任务和文件任务统一到同一结构化体系中,同时保持 Markdown 原生格式。
Stars: 121 | Forks: 9
# Operon
Operon 是一款 **为 Obsidian 中的人类与 agent 设计的任务管理插件**。它将任务保留在 **Markdown** 中的同时,赋予其结构化元数据、持久身份、可重用视图、规划面板、重复执行以及时间追踪功能。
## Operon 解决了什么问题?
Obsidian 让工作更贴近笔记,但随着仓库的增长,任务可能会分散在日记、项目笔记、清单、文件、日历和看板中。Operon 将这些碎片汇聚到 **同一个任务系统** 中,而无需将其从 Markdown 中剥离出来。
其中的关键在于统一 Obsidian 两种自然的任务形态:笔记内的 **轻量级内联任务** 以及值得拥有独立笔记的 **较大的基于文件的任务**。Operon 在相同的工作流、过滤器、日历、看板和任务编辑器下对两者进行索引和管理。
它帮助你在任务自然所属的地方捕获它们,之后只需通过一套工具即可查找、编辑、过滤、调度、置顶、追踪,或在工作流中移动它们。
## Operon 适合谁?
Operon 适合希望将任务管理留在自己的仓库中,而不是使用独立应用的 Obsidian 用户。如果你的工作已经涉及日记、项目笔记、会议记录、长期关注领域、周期性职责或 agent 辅助工作流,它将特别有用。
它专为那些需要 **比纯复选框更多功能**,但仍希望任务保持可读、可编辑、可链接的 Markdown 格式的人而设计。

## 核心功能
### 持久任务身份与索引
每个 Operon 任务都会获得一个 `operonId`,并从其在仓库中的源位置进行索引。这使得 **同一个任务** 在笔记、过滤器、日历、看板、置顶任务栏、重复执行和时间追踪中出现时,**保持可识别性**。
这样做的结果是,一个任务记录可以在多个视图中流转,而不会变成重复的工作。
### 统一的内联任务与文件任务
Operon 将轻量级的内联复选框任务和较大的基于文件的任务纳入同一系统。内联任务可以表现得像微型文件一样,拥有身份、元数据、历史记录和上下文;较大的工作可以成为拥有独立笔记的文件任务。
这两种任务形态都保持作为同一索引、任务编辑器、过滤器、调度、看板和日历视图的一部分。
在任何时候,内联任务都可以转换为文件任务,或者文件任务也可以转换回内联任务。Operon 在这些格式转换期间会保留 **规范任务信息**,因此任务可以改变形态而不丢失其核心身份或结构化字段。

关键不在于永远选择一种任务格式;而在于让任务成长为它所需的形态。
### 任务创建方法论
从工作出现的地方将笔记转化为可执行的工作:命令面板、当前光标行、任务创建器、内联任务标签、内联任务命令、文件任务、选定的笔记片段、现有笔记、日历事件,或看板/日历上下文。
在这些入口点中,Operon 支持 **超过二十种内联和文件任务创建或转换的变体**。
快速捕获保持快速,而更丰富的创建流程可以在工作需要更多结构时,添加元数据、父任务、子任务、模板、日期、重复执行或专属文件。
#### 创建新的 Operon 任务
- 通过命令面板中的 `Create New Operon Task` 打开主任务创建器。
- 通过 Operon 的 ribbon 图标打开它。
- 选择新任务应成为内联任务还是文件任务。
- 当任务在写入前需要结构化字段时使用它。
- 添加诸如描述、笔记、图标、颜色、优先级、状态、父任务、调度、截止日期、重复执行、置顶状态、指派人或上下文等字段。
- 将内联任务写入配置的默认目标、日记目标、内联父任务下方,或文件任务父上下文中。
- 在配置的文件任务位置创建文件任务,或在启用时遵循父级/源文件夹的行为。
- 在创建过程中附加现有的子任务、依赖链接和置顶状态。
- 如果内联或文件创建无法完成,使用相同的草稿重新打开创建器。

#### 创建或编辑内联任务
- 从命令面板运行 `Create or edit inline task`。
- 在空行上运行该命令以创建新的 Operon 内联任务。
- 在纯文本或列表项上运行它,将该行转换为内联任务。
- 在 **普通的 Markdown 复选框** 上运行它,将现有的清单项升级为 Operon 内联任务,而无需重写该行。
- 在现有的 Operon 内联任务上运行它以打开任务编辑器。
- 选中文本片段并运行该命令,从所选内容创建一个内联任务。
- 在文件任务或其他父上下文内创建时,继承有用的父级字段。
- 当编辑器上下文允许时,将新的内联任务放置在当前光标位置。
- 当当前笔记无法接收任务时,回退到配置的内联任务目标或日记目标。
- 当任务属于你正在编写的笔记时,使用此路径。
```
Empty line:
- [ ] Review release checklist {{operonId:: ...}}
Plain text line:
Review release checklist
↓
- [ ] Review release checklist {{operonId:: ...}}
Normal Markdown checkbox:
- [ ] Review release checklist
↓
- [ ] Review release checklist {{operonId:: ...}}
Selected text:
release checklist
↓
- [ ] release checklist {{operonId:: ...}}
```
#### 创建文件任务
- 从命令面板运行 `Create file task`。
- 创建一个作为独立 Markdown 文件的新任务。
- 当工作需要预备好的结构时,选择文件任务模板。
- 使用配置的文件任务文件夹或目标规则。
- 如果光标位于可转换的内联任务上,将该内联任务提升为文件任务。
- 如果选中了单个非任务行或片段,从该文本种子创建文件任务,并将源替换为 **指向新文件的 wikilink**。
- 如果源位于父文件任务内,在启用时应用链接的自动父级行为。
- 对于项目、研究、内容片段、交付物或任何需要自身主体的任务,使用此路径。
```
Before:
Draft migration guide
Created file task:
Draft migration guide.md
Source note after conversion:
[[Draft migration guide]]
```
#### 编辑或转换为文件任务
- 从命令面板运行 `Edit or convert to file task`。
- 当当前激活的笔记已经是 Operon 文件任务时,打开该文件任务进行编辑。
- 当当前笔记已有 Operon 任务 frontmatter 时,打开任务编辑器。
- 当笔记变得具有可执行性时,将普通的 Markdown 笔记转换为 Operon 文件任务。
- 在应用所选文件任务模板的同时,保留现有的受管 frontmatter、tags 和笔记主体。
- 当工作需要分节、参考、决策或内联子任务时,将其提升为文件任务。
#### 将文件任务转换为内联任务
- 从命令面板运行 `Convert file task to inline task`。
- 将 Operon 文件任务转换单个内联任务表现形式。
- 保留 **规范任务信息**,如描述、复选框状态、tags 和规范字段。
- 当目标可用时,将内联任务插入到当前光标所在的空行。
- 否则,将其插入到配置的内联任务目标文件或日记目标中。
- 转换后将源文件移至 Obsidian 回收站。
- 当任务不再需要其专属笔记时,使用此路径。
```
File task:
---
operonId: task-123
status: Project.InProgress
priority: A
dateDue: 2026-05-31
datetimeCreated: 2026-05-18T10:15:00
datetimeModified: 2026-05-19T14:30:00
---
# Draft migration 指南
After conversion:
- [ ] Draft migration guide {{operonId:: task-123}} {{status:: Project.InProgress}} {{priority:: A}} {{dateDue:: 2026-05-31}} {{datetimeCreated:: 2026-05-18T10:15:00}} {{datetimeModified:: 2026-05-19T14:30:00}}
```
#### 将 Tasks emoji 行转换为内联任务
- 从命令面板运行 `Convert Tasks emoji line to inline task`。
- 将兼容的 Obsidian Tasks 风格 emoji 行转换为 Operon 内联任务。
- 将支持的 Tasks 日期(如 due、scheduled、start、completed、cancelled 和 created 日期)映射到 Operon 字段。
- 尽可能将前导时间范围转换为定时调度字段。
- 将不支持的 Tasks 语法保留为笔记,而不是静默丢弃它。
- 在已经包含 Tasks 风格任务行的仓库中采用 Operon 时,使用此功能。
- 保持转换专注于 Operon 能够理解和管理的任务元数据。
```
Before:
- [ ] 09:00-10:30 Review release plan #release ⏳ 2026-05-20 📅 2026-05-22 🛫 2026-05-19 ➕ 2026-05-18
After:
- [ ] Review release plan #release {{operonId:: ...}} {{dateScheduled:: 2026-05-20}} {{datetimeStart:: 2026-05-20T09:00:00}} {{datetimeEnd:: 2026-05-20T10:30:00}} {{estimate:: 5400}} {{dateDue:: 2026-05-22}} {{dateStarted:: 2026-05-19}} {{datetimeCreated:: 2026-05-18T00:00:01}}
```
#### 将所选内容转换为 Operon 任务
- 选中 Markdown 列表项后,从命令面板运行 `Convert Selection to Operon Tasks`。
- 将选中的复选框行、Tasks emoji 行、无序列表项和有序列表项转换为 Operon 内联任务。
- 保留缩进,并仅从选中的列表层级推断父子链接。
- 对转换后的顶级项应用正常的内联任务继承,包括启用时的文件任务自动父级行为。
- 存在 Tasks 优先级 emoji 时使用它们;不存在时,保留 Operon 的默认优先级,而不是继承父级优先级。
- 跳过段落、空标记、代码块和不支持的任务行,而不是转换它们。
- 在将清单或大纲迁移到 Operon 而不转换周围正文时,使用此功能。
```
Before:
- [ ] Prepare launch
- [ ] Review notes 📅 2026-05-22
- Draft announcement
After:
- [ ] Prepare launch {{operonId:: ...}}
- [ ] Review notes {{operonId:: ...}} {{parentTask:: ...}} {{dateDue:: 2026-05-22}}
- [ ] Draft announcement {{operonId:: ...}} {{parentTask:: ...}}
```
#### 将内联任务移动到此处
- 从命令面板运行 `Move an inline task here`。
- 选择现有的内联任务并将其移动到当前编辑器位置。
- 当任务周围的上下文发生变化时使用此功能。
- 在仓库内重新定位任务行的同时保留任务身份。
#### 从日历或看板创建
- 选择一个现有任务并将其放入选定的日历时段或看板单元格中。
- 从日历时段操作中创建内联或文件任务。
- 从看板单元格操作中创建内联或文件任务。
- 根据面板暗示的目标日期、时间范围、状态、泳道、流水线或上下文,为新任务填充初始信息。
- 直接从定时的日历选择中创建追踪时间会话。
- 当日记被配置为 Operon 任务时,使用日记父级种子生成。
- 当新放置或创建的任务与当前激活的日历或看板过滤器不匹配时,显示任务编辑器。
- 当计划工作不仅要安排现有任务,还要创建新任务时,使用此功能。

#### 从外部日历事件创建
- 从只读的外部日历事件创建 Operon 任务。
- 选择新任务应是内联任务还是文件任务。
- 使用事件标题和选定的事件时间为新任务填充初始信息。
- 在创建你可以管理的本地任务记录时,将外部事件保留为只读日历上下文。
- 当外部承诺需要在仓库内变得具有可执行性时,使用此功能。

#### 从 TrackTime 和 FlowTime 创建
- 当定时或专注会话揭示了一项新工作时,从 TrackTime 和 FlowTime 面板快速创建内联任务。
- 保持轻量级的捕获方式,以便可以对任务进行命名、保存和返回,而不会中断计时或专注流程。


**创建是工作流的一部分**,而不是一个单独的收集仪式。
### 子任务、父任务和关系
将较大的工作分解为子任务,连接相关任务,定义依赖关系,并在不离开 Markdown 的情况下保持父子结构可见。
当从父任务创建子任务时,Operon 可以使用继承的规范上下文为其填充初始信息:`parentTask`、`status`、`priority`、`taskIcon` 和 `taskColor`。这些值是起始上下文,而不是锁定;它们可以在子任务创建后更改。
`parentTask` 字段将子任务链接回父任务。优先级、图标和颜色可以跟随父任务,而状态从相关工作流的初始状态开始。
父任务可以反映后代任务的进度、估算和追踪时长,因此较大的工作在变化时仍能保持可读性。

层级结构为大型工作赋予了形态,而无需将其强行剥离出笔记系统。
### 任务编辑器
使用结构化控件创建和编辑任务,针对规范字段(如状态、优先级、日期、tags、上下文、指派人、父任务、依赖关系、重复执行、置顶和时间追踪)进行操作。
编辑器右侧提供了对任务数据的类表单控制。文件主体面板使 Markdown 源文件保持贴近,因此文件任务和内联任务仍然可以在它们所属的笔记上下文中进行编辑。
文件任务在打开时默认显示文件主体。内联任务在需要时也可以显示其源文件主体,从而使得检查周围的笔记、编辑 Markdown 并在任务编辑器内使用熟悉的 Obsidian 编辑行为成为可能。
主体更改将在 **任务编辑器关闭时自动保存**。你也可以使用保存按钮显式保存,较长的编辑会话受可配置的最多 60 秒自动保存防抖保护。

该编辑器是通向 Markdown 的结构化门户,而不是它的替代品。
### 任务查找器
找到你记住的内容,而不是你存放它的位置。任务查找器从一个专注的命令面板中跨内联任务和文件任务进行搜索。
使用记住的单词、任务格式切换以及用于逾期、今天或最近修改工作的快速模式。当你知道项目但不知道文件时,项目任务和项目树范围会在搜索开始前缩小搜索范围。
任务查找器使用专门构建的排名模型,而不是纯文本过滤。它可以匹配任务名称、ID、父级和后代任务名称、笔记、状态、优先级、tags、上下文、指派人、日期和相关任务链接,然后对结果进行排名,以便精确匹配和前缀匹配保持在顶部附近。
任务查找器可以包含或排除内联任务、文件任务、已完成任务和已取消任务。它还可以记住最后选定的范围,使用点快捷键切换范围,并在结果行中显示可自定义的紧凑标签。

从任务查找器中选择任务会在任务编辑器中打开该任务。
它是当你记起工作但不记得包含它的笔记时的快速恢复面板。
### 过滤器
将任务规则转化为 **可重用的工作范围**。一个过滤器可以将字段、运算符、值、匹配逻辑、分组、排序、分组和子分组组合成一个保存的视图。
过滤器可以处理任务文本、复选框状态、tags、置顶状态、项目树、文件夹树、日期、数字、列表和规范任务字段。这使得它们对于小型的个人切片和大型运营视图都非常有用。
保存的过滤器可以在过滤器视图中重复使用,通过 `operon` 代码块嵌入到笔记中,在侧面板中打开,或者附加到日历和看板预设中。你也可以在已经过滤的范围内进行搜索,以进一步缩小大型任务集的范围。

过滤器不仅仅是一次性查询;它是仓库中一个命名的切片,可以跨越各种 Operon 面板使用。
### 自定义流水线、状态、优先级和颜色
使用你自己的流水线、状态、优先级、图标、颜色规则和显示偏好来建模不同的工作流。
一个任务字段在 YAML、过滤器、日历、看板和任务编辑器中具有相同的含义,因为系统对它进行一次映射,然后在所有地方重用。独立的流水线让不同的工作类型遵循不同的状态路径,同时仍然共享同一个任务模型。

当相同的规则跨越每个面板应用时,自定义效果最佳。
### 键映射
键映射使 Operon 的内部任务模型与你在 YAML 和 UI 中看到的属性名称保持一致。每个任务字段都有一个稳定的规范键,而可见的属性名称可以为你的仓库进行调整。
这很重要,因为同一个字段可能会出现在文件任务 frontmatter、内联任务元数据、过滤器、任务编辑器、日历、看板、紧凑标签和任务卡片中。一个映射的字段在这些面板中保持其含义,而不是变成一组看起来相似但互不相连的属性集合。
键映射还可以定义字段类型、自定义键、图标,以及某个属性是否从渲染的文件任务元数据视图中隐藏,同时仍保留在 YAML 中。
#### 内联任务语法
Operon 内联任务保持为可读的普通 Markdown 复选框。结构化字段以 `{{key:: value}}` 容器的形式存储在任务文本之后,而 Obsidian tags 则作为常规 `#tags` 保留在这些容器之外。
```
- [ ] Draft release notes #release {{operonId:: abc1234}} {{status:: Project.InProgress}} {{priority:: A}} {{dateDue:: 2026-05-31}}
```
这种语法允许一条紧凑的行携带身份、工作流、日期、优先级和其他任务元数据,而无需将笔记变成一个独立的数据库文件。

一个任务字段在任何地方都具有相同的含义,因为它被一次映射。
### 日历规划
使用日历预设规划已调度、截止、重复和时间块任务。预设可以使用 **时间网格** 进行日样式的定时规划,或使用 **多周** 在几周内进行更广泛的规划,并且当你想同时查看不同的视图时,多个日历页可以并排保持打开状态。
根据视图的不同,任务可以显示为全天事项、截止事项、时间块、已完成工作或预计的重复出现事件。只读的外部 ICS 日历可以与 Operon 任务并排放在日历中作为上下文。
**任务池** 将日历侧边栏变成规划收件箱。它可以显示 **逾期**、**未调度** 或 **所有/打开** 的任务,并且可以将任务从池中拖放到日历上,将其调度为全天或定时工作。
当屏幕空间紧张时,日历导航可以在 **侧边栏** 和 **工具栏** 模式之间切换。这使得规划控件触手可及,而不会强迫每个工作区使用相同的布局。


日历为意图在时间中找到了位置,而无需剥离任务元数据。
### 看板
将任务元数据转化为可视化的工作流面板。列来自流水线状态,而泳道可以按优先级、tags、上下文、指派人、截止日期或调度日期组织卡片。
卡片仍然是 **相同的 Operon 任务记录**。在列或泳道之间拖动卡片会更新底层的任务元数据,因此看板、过滤器、日历和任务编辑器保持一致。
保存的看板预设让不同的工作流保留各自独立的流水线、过滤器、泳道、颜色源、外观、折叠部分和排序规则。
看板搜索使用与任务查找器相同的任务搜索引擎。当你输入或切换搜索范围时,看板会原地缩小范围,以便匹配的卡片在同一面板上保持可见。


看板为相同的本地任务记录赋予了工作流形态,而无需将它们转化为独立的看板数据库。
### 置顶任务栏
从任务行置顶下一步操作,并保持专注的工作集可见。当你想让当前活跃的任务近在手边,而又不想打开另一个完整视图时,请使用置顶栏。
仓库可以容纳一切;而该栏只容纳当前重要的内容。

置顶任务让专注力在整个仓库中变得可携带。
### 上下文菜单和任务操作
Operon 将常见的任务操作保持在你已经使用的任务面板附近。上下文菜单可以出现在置顶任务、过滤行、看板卡片、日历事项、任务池条目、FlowTime 任务和时间历史记录行上。
可见的操作根据上下文而变化。只有在当前面板合理的情况下,任务才会提供诸如 **打开编辑器**、**跳转到源**、**标记为完成**、**启动计时器**、**置顶或取消置顶**、**更改状态**、**取消任务**、**取消调度** 或 **跳过此次发生** 等操作。
上下文菜单设置允许你选择哪些全局启用的操作可以出现在每个受支持的面板上。

上下文菜单通过将下一个有用的操作带到任务已经可见的地方,从而减少了导航。
### 重复执行
创建重复任务,而无需将它们变成独立的日历系统。Operon 的重复规则可以基于调度、基于完成或基于计数,并具有每日、每周、每月和每年的模式。
重复任务可以使用新的任务身份创建全新的出现实例,同时保留有用的任务上下文。每个实例的完成状态、追踪时间、进度和依赖关系等字段都会被重置,因此每次出现都是独立的真实任务。
#### 文件任务重复执行
对于重复的 **文件任务**,每次新的出现实例都会创建为一个新的 Markdown 文件。如果文件标题不包含日期或周 token,已完成的文件会在其前面加上发生日期进行重命名,从而为下一个任务释放原始标题并避免文件名冲突。
```
Completed file: Weekly Review.md
Renamed to: 2026-05-19 - Weekly Review.md
Next file: Weekly Review.md
```
重复文件任务的主体也会为下一次运行做好准备。普通的 Markdown 复选框被重置为未选中状态,而拥有的 Operon 内联子任务会在新文件任务下使用全新的任务 ID 重新创建。
```
Previous file body:
- [x] Check inbox
- [x] Update weekly metrics {{operonId:: old-child}} {{parentTask:: old-file-task}}
Next file body:
- [ ] Check inbox
- [ ] Update weekly metrics {{operonId:: new-child}} {{parentTask:: new-file-task}}
```
重复文件任务序列还可以在设置中定义 **属性清理规则**。例如,一个重复的自行车骑行文件可以保持相同的结构,同时在下一个生成的文件中清除诸如 `Distance`、`TimeInMotion`、`SpeedAvg`、`SpeedMax`、`HeartRateAvg`、`Banner` 或 `Image` 等测量字段。
```
Distance:
TimeInMotion:
SpeedAvg:
SpeedMax:
HeartRateAvg:
Banner:
Image:
```
#### 内联任务重复执行
重复的 **内联任务** 留在它们已经存在的 Markdown 文件中。当创建新的出现实例时,Operon 会插入一个带有新任务身份的全新复选框行,并将重复任务保留在其原始笔记上下文附近。
#### 日期和周 token
如果内联任务名称或文件任务标题包含单个日期 token 或周 token,Operon 会为下一次出现更新该 token。
```
Review 2026-05-19.md -> Review 2026-05-26.md
Weekly Planning W21.md -> Weekly Planning W22.md
```
预计的出现实例可以显示在日历中,跳过的日期可以从重复控件中进行管理,时间编辑可以应用于单次出现或本次及后续任务。

重复执行让周期性工作与其原始上下文保持联系,而不会让每次出现都感觉像是一项复制粘贴的苦差事。
### 时间追踪
从任务本身追踪工作。Operon 可以启动和停止计时器,存储已完成的追踪会话,并将持续时间字段附加到解释该工作的任务记录中。
TrackTime 记录实际会话。FlowTime 增加了专注的倒计时节奏,而手动会话编辑使得在事后添加、更正或删除追踪范围成为可能。
任务持续时间以秒为单位存储,即使 UI 显示人类友好的标签,这也能保持计算的稳定性。`duration` 存储任务自身的追踪时间。
`totalDuration` 作为父子任务的累积值自动更新。父任务可以显示其后代任务的组合追踪工作量,而无需手动重新计算汇总。
记录的工作量在任务编辑器、紧凑任务标签、日历、看板和时间历史视图中保持可见。
#### 时间会话历史
**时间会话历史** 面板将追踪的会话收集到一个审查面板中。可以打开会话进行快速编辑,在需要时移除,或者通过再次为同一任务启动计时器来重放。

时间追踪将工作量转化为任务历史,而不是将其作为独立的计时器日志留下。
## 状态
Operon 由 Hasan Yılmaz 维护,并已准备好自 1.0.0 版本起公开发布。
Operon 从一开始就在维护者的实际 Obsidian 仓库中开发,目前仍在那里被积极使用;当前的工作仓库包含 **约 3,000 个已索引的 Operon 任务**。这是真实世界使用的证据,而非正式的基准测试。
## 兼容性与要求
Operon 需要 Obsidian `1.7.2` 或更高版本,且未标记为仅限桌面端,因此它可以安装在桌面端和移动端 Obsidian 上。一些工作流在更大的屏幕上自然更舒适,并且置顶栏可以在手机上禁用。
Operon 的内联任务元数据语法是 Operon 特有的。兼容性风险更可能来自重叠的面板:另一个任务插件可能也会渲染复选框行、重写 Markdown 任务、管理重复执行,或者添加自己的任务规划视图。如果你使用另一个任务管理插件,请先在一小部分笔记上测试组合,并避免让多个插件管理相同的任务面板。
安装使用 Obsidian 正常的 Community Plugins 流程。普通用户不需要单独的 beta 安装程序或手动安装路径。
## 核心集成
Operon 不需要安装其他社区插件。
某些工作流使用 Obsidian 核心插件行为:
- **Daily Notes**:由基于日记的内联任务创建、日记导航和相关的基于日期的工作流使用。如果你不使用 Daily Notes,可以将内联任务定向到固定的目标文件。
- **Page Preview**:由 Obsidian 的 `hover-link` 预览行为用于任务标题和 wikil 预览。如果禁用了 Page Preview,这些悬停预览可能不会出现,但任务数据和任务操作仍然有效。
Operon 捆绑了用于编辑器集成的 **CodeMirror** 模块和用于解析只读外部日历源的 **ical.js**。
## 数据与网络行为
Operon 将其规范的插件数据存储在 Obsidian 的插件配置区域 `.obsidian/plugins/operon/` 下。面向用户的设置和配置位于 `data.json` 中,按稳定域分为核心设置、分类、视图、界面偏好、自动化和集成。非设置数据保持独立:`state/` 存储用户状态,如置顶任务、激活的追踪器和重复序列;`runtime/` 存储任务索引;`cache/` 存储解析后的外部日历缓存数据。
较旧的 Operon 版本使用仓库根目录下的 `.operon/` 文件夹。当前版本不再从该遗留文件夹读取、写入或清理它。如果过时的 `.operon/` 文件夹保留在仓库中或从同步中重新出现,Operon 将忽略它并继续使用规范的插件配置区域。
对于 Obsidian Sync 用户,Operon 的规范设置包遵循 Obsidian 的插件数据位置。如果你同步插件设置,`data.json` 中的 Operon 设置可以与其余的 Obsidian 配置同步。运行时索引和缓存文件保留为本地插件数据,并可以在需要时从仓库内容重建。
### 仓库和剪贴板访问
Operon 是一个本地优先的 Markdown 任务管理器。为了构建其任务索引并保持任务视图准确,它使用 Obsidian 的 Vault API 来处理活跃仓库内的文件。
- **仓库枚举**:Operon 列出仓库中的 Markdown 文件以查找内联任务、文件任务、任务模板、日记目标、过滤器和选择器建议。这使得 Operon 可以访问仓库文件路径,但这仅用于 Obsidian 内的本地索引和导航。
- **仓库读/写**:Operon 读取任务文件以解析任务元数据,并且仅当你通过 Operon 创建、编辑、移动、转换、调度、完成或以其他方式更新任务时才进行写入。
- **剪贴板访问**:Operon 仅在用户发起的复制操作时写入系统剪贴板,例如复制 `operonId`、复制外部任务链接或复制可嵌入的过滤器块。Operon 也只有在明确的用户操作后才会读取系统剪贴板,例如使用位置选择器剪贴板按钮导入从 Maps 插件复制的坐标。剪贴板文本在本地解析,并且仅当它包含有效的 `lat, lng` 坐标时才使用。
- **外部日历源**:如果你配置了外部 ICS 日历 URL,Operon 会获取这些只读日历源,并将解析后的缓存本地存储在插件缓存文件夹下。
Operon 不监控剪贴板更改,不包含遥测、分析、追踪像素或后台使用情况报告。任务数据保留在你的仓库中,Operon 插件数据保留在 Obsidian 的插件配置存储中。
## 许可证
Operon 根据 GNU 通用公共许可证第 3 版或更高版本(`GPL-3.0-or-later`)获得许可。完整许可证文本请参见 [LICENSE](LICENSE)。
此许可证允许使用、研究、修改、重新分发和商业分发,但分发的修改版本和衍生作品必须保留相同的 GPL 自由,并根据兼容 GPL 的条款提供相应的源代码。
## 品牌
Operon 名称、徽标、图标、插件 ID 和官方发布身份均由维护者保留。修改版本和分支必须使用明显不同的品牌,并且不得暗示它们是官方 Operon 版本或受到 Operon 维护者的认可。请参见 [TRADEMARK.md](TRADEMARK.md)。
## 贡献
接受在相同 `GPL-3.0-or-later` 许可证下的贡献。请参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:Markdown, Obsidian, Tetragon, 任务管理, 效率工具, 看板, 笔记插件, 自动化攻击, 防御加固