桌面应用【免费下载链接】EcoPaste跨平台的剪贴板管理工具 | Cross-platform clipboard management tool项目地址https://gitcode.com/ayangweb/EcoPaste点击查看免费下载Trellis 是 EcoPaste 仓库中用于组织 AI 开发任务的工作流系统详见 .trellis/workflow.md 与 .trellis/scripts/task.py。任务生命周期涵盖任务的创建、启动、上下文配置、完成、归档、父子任务关系以及生命周期钩子。本文以.cursor/skills/trellis-meta/references/customize-local/change-task-lifecycle.md为核心骨架结合 EcoPaste 仓库内的.trellis/实际配置与 Python 脚本源码讲解如何为项目定制 Trellis 任务生命周期帮助读者掌握 hooks 配置、任务字段扩展与活跃任务指针机制的实现细节。任务生命周期的组成与默认定制目标Trellis 的任务生命周期包括以下阶段创建createtask.py create生成任务目录写入task.json默认statusplanning启动starttask.py start写入活跃任务指针并将status从planning翻转为in_progress上下文配置context通过implement.jsonl/check.jsonl为子代理注入规格与研究上下文完成finishtask.py finish清除活跃任务指针触发after_finishhooks归档archivetask.py archive将status置为completed并把任务目录移动到archive/{YYYY-MM}/触发after_archivehooks父子任务parent/child通过--parent、add-subtask/remove-subtask建立层级关系默认的定制目标集中在三个目录目标用途.trellis/tasks/任务 PRD、设计文档、实施计划、JSONL 上下文与归档目录.trellis/config.yaml项目级 Trellis 配置入口承载生命周期 hooks.trellis/scripts/生命周期行为的脚本实现task.py及各common/模块动手修改前先读这些文件根据原文档在进行任何定制之前应按顺序阅读以下文件以建立完整的心智模型.trellis/workflow.md —— 工作流阶段、路由与[workflow-state:*]面包屑契约.trellis/config.yaml —— 项目级配置入口hooks 在此声明.trellis/scripts/task.py —— 任务管理 CLI 入口create/start/finish/archive等子命令.trellis/scripts/common/task_store.py —— 任务 CRUD 核心实现cmd_create、cmd_archive等.trellis/scripts/common/task_utils.py —— 任务路径解析、查找与 hooks 执行器run_task_hooks当前任务的.trellis/tasks/task/task.json—— 任务元数据可参考仓库中已归档的 task.json常见需求与对应修改点速查表原文档给出了一张需求 → 修改点映射表是生命周期定制最常用的导航工具需求修改点任务创建后自动同步外部系统.trellis/config.yaml中的hooks.after_create任务启动后自动更新状态.trellis/config.yaml中的hooks.after_start任务完成后运行脚本.trellis/config.yaml中的hooks.after_finish归档后清理外部资源.trellis/config.yaml中的hooks.after_archive修改任务默认字段.trellis/scripts/common/task_store.py修改任务解析/搜索逻辑.trellis/scripts/common/task_utils.py修改活跃任务行为.trellis/scripts/common/active_task.py生命周期 hooks配置与执行原理配置示例.trellis/config.yaml支持四个生命周期事件。原文档给出的完整配置示例hooks: after_create: - python3 .trellis/scripts/hooks/my_sync.py create after_start: - python3 .trellis/scripts/hooks/my_sync.py start after_finish: - python3 .trellis/scripts/hooks/my_sync.py finish after_archive: - python3 .trellis/scripts/hooks/my_sync.py archive每个事件的值是字符串列表可以注册多个命令。仓库的 .trellis/config.yaml 中保留了同样的 hooks 配置骨架注释并补充了最简演示形式hooks: after_create: - echo Task created after_start: - echo Task started after_finish: - echo Task finished after_archive: - echo Task archived执行语义TASK_JSON_PATH 与容错环境变量注入每个 hook 命令执行时都会收到TASK_JSON_PATH环境变量指向当前任务的task.json绝对路径。hook 脚本可以读取它来获取任务元数据标题、状态、meta等。工作目录hook 命令在仓库根目录cwdrepo_root下以shellTrue执行。非阻塞容错hook 失败只打印[WARN] Hook failed (...)警告不会阻断主任务操作。这一语义在源码中有直接体现——task_utils.py 的run_task_hooks对每个命令捕获非零退出码与异常仅输出黄色警告日志后继续。源码执行链如下cmd_create/cmd_archive/cmd_start/cmd_finish等命令在完成自身逻辑后调用run_task_hooks(event, task_json_path, repo_root)run_task_hooks从配置模块读取hooks.event命令列表见 config.py 的get_hooks为每条命令构造包含TASK_JSON_PATH的 env用subprocess.run(cmd, shellTrue, cwdrepo_root)执行非零退出码或异常仅产生警告不中断流程。hooks 的触发时机关键差异在 task.py 中可以看到各事件的确切触发点after_create在task.py create完成目录创建、task.json写入、PRD 生成与 JSONL 种子文件写入之后触发见 task_store.pyafter_start在task.py start将status翻转为in_progress之后触发见 task.pyafter_finish在task.py finish清除活跃任务指针之后触发。注意after_finish不等于状态变更——它只是清除 active-task 指针status字段保持不变任务真正完成的通知应使用after_archive见 task.pyafter_archive在task.py archive将status置为completed、目录移动到archive/{YYYY-MM}/之后以归档后的task.json路径触发见 task_store.py。修改任务字段优先使用 meta如果要在项目里新增项目私有的任务字段优先放在task.json的meta字段下避免破坏现有脚本对标准字段的假设。原文档给出了示例meta: { linearIssue: ENG-123, risk: high }仓库源码印证了这一点cmd_create在构建task_data时专门预留了meta: {}空对象见 task_store.py作为项目级扩展的默认挂载点。已归档任务的 task.json 也显示meta: {}是标准字段。只有在确实需要修改标准字段如status、assignee、base_branch时才应改动task_store.py中cmd_create的task_data字典但必须先逐一审查所有读取task.json的本地脚本确认兼容性。修改活跃任务会话级指针而非全局指针设计原则活跃任务是会话级状态存储在.trellis/.runtime/sessions/下不要回退到全局.current-task模型。如果需要修改活跃任务行为编辑以下位置.trellis/scripts/common/active_task.py —— 活跃任务解析与指针读写平台 hooks 或 shell 会话桥接层.trellis/workflow.md 中活跃任务的描述会话身份context key如何解析从源码看active_task.py 的resolve_context_key按以下优先级解析稳定的会话标识TRELLIS_CONTEXT_ID环境变量—— CLI 脚本与子进程的显式覆盖键hook 输入platform_input中的session_id/conversation_id/transcript_path字段支持嵌套在input、properties、event等键下平台原生环境变量—— 例如 Claude Code 的CLAUDE_SESSION_ID、Cursor 的CURSOR_SESSION_ID、OpenCode 的OPENCODE_SESSION_ID等见_ENV_SESSION_KEYSCursor shell ticket 桥接—— Cursor 不向 shell 导出会话 ID因此 hook 会在task.py运行前写入一个短生命周期30 秒 TTL的 ticket.trellis/.runtime/cursor-shell/*.json脚本通过匹配子命令与唯一的 fresh context key 来还原会话身份。task.py create会设置活跃指针best-effort这是原文档重点讲解的行为源码位于cmd_create的末尾见 task_store.py有会话身份时调用 shell 携带TRELLIS_CONTEXT_ID或平台会话环境变量resolve_context_key能识别参见active_task.py的_ENV_SESSION_KEYS则.trellis/.runtime/sessions/context_key.json会被重写指向新任务。此时任务的statusplanning并且[workflow-state:planning]会在下一个UserPromptSubmit时立即生效无会话身份时AI 会话之外的裸 CLI 调用或平台不向 shell 传播身份任务目录照常创建、statusplanning照常写入但活跃指针保持不变。用户回到 AI 会话后可以用task.py start dir手动附加该任务。这一行为使得[workflow-state:planning]在task.py create之后的头脑风暴与 JSONL 策展期间成为活的面包屑。原文档指出R7 之前的行为会让面包屑一直停留在no_task直到task.py start导致规划区块实际上是死文本。其他活跃指针操作task.py startset_active_task写入会话指针并幂等地把status从planning翻转为in_progresstask.py finishclear_active_task删除当前会话的.runtime/sessions/context_key.json文件status保持不变task.py archiveclear_task_from_sessions删除所有仍指向该任务的会话文件再把目录移入归档见 task_store.py。如果 forktask.py新增创建路径原文档给出重要提醒如果 forktask.py增加新的创建路径例如绕过cmd_create的外部导入必须审计新路径是否也调用了set_active_task。缺少该调用创建的任务不会成为活跃任务。完整的状态写入方表格位于.trellis/spec/cli/backend/workflow-state-contract.md仓库中该路径为 .trellis/spec/ 目录实际契约文档需确认存在后引用。修改步骤一套可复现的操作流程原文档给出的标准修改流程用python3 ./.trellis/scripts/task.py current --source确认当前任务阅读当前任务的task.json确认状态与字段配置类需求先编辑 .trellis/config.yaml脚本行为类需求再编辑 .trellis/scripts/如果 AI 流程变了同步更新 .trellis/workflow.md。仓库的 workflow.md 同时提供了生命周期常用命令的权威清单# Task lifecycle python3 ./.trellis/scripts/task.py create title [--slug name] [--parent dir] python3 ./.trellis/scripts/task.py start name # set active task (session-scoped when available) python3 ./.trellis/scripts/task.py current --source # show active task and source python3 ./.trellis/scripts/task.py finish # clear active task (triggers after_finish hooks) python3 ./.trellis/scripts/task.py archive name # move to archive/{year-month}/ python3 ./.trellis/scripts/task.py list [--mine] [--status s] python3 ./.trellis/scripts/task.py list-archiveDo Not生命周期定制的红线原文档明确的禁止事项不要直接编辑.trellis/.runtime/sessions/去修复业务状态——会话指针是运行时产物直接改会造成状态与磁盘不一致不要把项目私有字段硬编码进脚本——优先使用meta字段承载项目级扩展数据不要默认让用户 fork Trellis CLI——绝大多数定制都能在.trellis/内部完成fork 上游只应在确认无法通过本地定制实现时考虑。总结EcoPaste 仓库内的 Trellis 任务生命周期由.trellis/config.yamlhooks 声明、.trellis/scripts/task.pyCLI 入口、.trellis/scripts/common/task_store.pyCRUD 与活跃指针设置、.trellis/scripts/common/task_utils.pyhooks 执行器与.trellis/scripts/common/active_task.py会话级指针协同实现。定制时遵循配置优先、meta 扩展、会话级活跃指针、hook 非阻塞四条原则即可在不触碰上游 CLI 的前提下将任务生命周期与项目的外部系统、自定义字段和 AI 工作流深度整合。赞分享桌面应用【免费下载链接】EcoPaste跨平台的剪贴板管理工具 | Cross-platform clipboard management tool项目地址https://gitcode.com/ayangweb/EcoPaste点击查看免费下载相关推荐深入定制 Trellis 本地任务生命周期hooks、task.json 字段与活动任务指针的完整改造指南深入定制 Trellis 本地任务生命周期hooks、task.json 字段与活动任务指针的完整改造指南 导读 本文面向需要深度定制 Trellis 本地任桌面应用Trellis 任务生命周期定制指南从创建到归档的 Hook 机制与活动任务原理Trellis 任务生命周期定制指南从创建到归档的 Hook 机制与活动任务原理 Trellis 的本地任务系统把任务生命周期拆分为创建create、启动桌面应用Trigger.dev任务取消机制灵活控制任务生命周期的终极指南Trigger.dev任务取消机制灵活控制任务生命周期的终极指南 在构建可靠的后台任务系统时 任务取消机制 是确保资源有效管理和用户体验的关键功能。TrigAI Agent后端任务调度开发工具可观测性AI 应用上一篇SweetAlert 使用指南优雅替代JavaScript原生弹窗下一篇Qlib量化研究平台详细工作流程解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考