
civitai 仓库 ClickUp 自动化技能实战CLI 任务管理、批量建任务与事件监控参考手册【免费下载链接】civitaiA repository of models, textual inversions, and more项目地址: https://gitcode.com/GitHub_Trending/ci/civitai导读本文围绕 civitai 仓库中.claude/skills/clickup技能包展开系统讲解其核心参考文档 reference.md 与 SKILL.md 中定义的 ClickUp 自动化能力任务/评论/文档的查询与操作、Mention 两阶段解析、分页与限流策略、Webhook 实时事件监控、轮询式任务监视器、批量建任务以及五种团队协作工作流。读完本文你将掌握如何让 AI Agent 通过node query.mjs、node watch.mjs、node listen.mjs三个入口与 ClickUp 深度集成实现「写代码时不离开终端、任务状态一变自动唤醒 Agent」的闭环开发模式。一、技能包整体构成ClickUp 技能包位于仓库的 .claude/skills/clickup 目录由三部分组成组成文件作用入口说明SKILL.md技能的前置说明安装依赖、配置账号、全部命令速查深度参考reference.md本文主体输出格式样例、技术要点、测试、监控、批量建任务、团队工作流实现源码query.mjs、listen.mjs、watch.mjs、api/*.mjs、lib/*.mjs、test/smoke-test.mjsCLI 入口与底层 API 封装依赖极轻量package.json 中仅声明了两个运行时依赖remark-parse与unified版本 11.x用于解析 Markdown。API 层则直接使用 Node.js 内置的fetch无需额外 HTTP 库。二、安装与账号配置2.1 安装依赖一次性cd .claude/skills/clickup npm install这一步必须执行。lib/markdown.mjs在启动时通过lib/format.mjs被query.mjs加载——如果未安装依赖每一条命令不只是评论命令都会以ERR_MODULE_NOT_FOUND退出。2.2 配置 accounts.json在技能目录下创建accounts.json写入 API Token在 ClickUp 的 Settings Apps API Token 生成通常以pk_开头{ defaultAccount: bot, accounts: { bot: { apiToken: pk_your_token_here } } }也可以直接用 CLI 添加账号node query.mjs add-account bot --token pk_your_token_here从源码看lib/accounts.mjs 的saveAccountConfig()在写入时会尝试将文件权限收紧为0o600以保护凭证。Team ID、User ID 等字段会在首次使用时自动探测并缓存回accounts.json。从 .env 迁移若存在旧的.env文件migrateFromEnv()会在首次运行时自动将其迁移为accounts.json格式CLICKUP_API_TOKEN→apiToken、CLICKUP_TEAM_ID→teamId等 8 个字段的映射定义在ENV_KEY_MAP中。原.env会被保留确认无误后再手动删除。2.3 默认列表与多账号在账号内设置defaultListId后创建任务时可以省略列表 ID{ defaultAccount: bot, accounts: { bot: { apiToken: pk_..., defaultListId: 901111220963 } } }多账号场景下每个账号只需apiToken必填其余自动探测缓存{ defaultAccount: bot, accounts: { bot: { apiToken: pk_..., teamId: 8459928, userId: 75386805, defaultListId: 901111220963 }, justin: { apiToken: pk_..., teamId: 8459928, userId: 10620972 } } }任何命令都可加--account name指定账号node query.mjs me --account justin node query.mjs my-tasks --account bot账号管理命令accounts列出全部、switch-account name切换默认、add-account name --token pk_...添加、remove-account name移除。api/client.mjs 的initClient(accountId)负责按账号加载凭证并回填到process.env中以兼容仍读取环境变量的旧模块。三、命令总览统一入口为node query.mjs command [options]支持任务、列表、文档、附件四类操作任务命令get查详情、comments列评论--threads内联展开回复、thread查看评论线程、reply在线程内回复、comment发评论支持 Markdown、status改状态/列状态、tasks list_id、me、create、my-tasks、search需--list/--folder/--me/--assignee/--status/--all之一限定范围、find-list、assign、due、priority、subtask、move、link、checklist、delete-comment、watch/unwatch、tag/remove-tag、description、start、schedule、rename、depends/blocks、task-link、update-comment、resolve-comment、archive/unarchive、claim写入 Session ID 自定义字段实现可恢复性。列表命令list、create-list、update-list、delete-list、lists、space-lists。文档命令docs [query]、doc doc_id、create-doc title用--content填充首屏、page doc_id page_id、create-page doc_id title--parent建子页、edit-page。附件命令attach url|id --attach path可重复、fetch-image url下载到本地临时目录--output自定义路径。通用选项--json原始 JSON 输出、--threads/-t、--subtasks、--content/-c短文本、--file/-f长内容推荐、--cleanup成功后删除临时文件、--name/-n、--parent/-p、--space/-s、--assignee/-a、--due/-d、--description、--attach、--output、--account。search有一个值得注意的设计ClickUp v2 API 没有跨任务的原生文本搜索所以search必须带范围参数--list、--folder、--me、--assignee、--status或--all否则直接报错退出而不是默默打爆 API。--all是全工作区扫描会拉取每个任务仅在必要时使用。四、输出格式参考Output Formatreference.md 定义了各命令的稳定输出形状方便 Agent 解析Task DetailsgetTask: Implement user authentication ID: 86a1b2c3d Status: In Progress Priority: High Assignees: John Doe, Jane Smith Watchers: 2 Due: Jan 15, 2024 Start: Jan 10, 2024 Time Estimate: 4h Created: Jan 10, 2024 URL: https://app.clickup.com/t/86a1b2c3d List: Sprint Backlog Folder: Development Space: 20128955 Description: Add OAuth2 authentication with Google and GitHub providers...Task Listtasks/search[to do] Fix login bug ID: 868h2cxat | Priority: high | Assignees: John Doe https://app.clickup.com/t/868h2cxat [in progress] Update API docs ID: 868g7c75u | Priority: None | Assignees: Jane Smith https://app.clickup.com/t/868g7c75u Total: 2 task(s)Commentscomments[2024-01-12 14:30] John Doe: Started working on this. Will push initial commit today. [2024-01-12 16:45] Jane Smith: John looks good! Let me know when ready for review.Doc DetailsdocDoc: API Documentation ID: abc123def Created: Jan 10, 2024, 09:30 AM Updated: Jan 15, 2024, 02:45 PM Creator: John Doe Workspace: 12345678 Pages: Introduction ID: page001 Getting Started ID: page002 API Reference ID: page003 Total: 3 page(s)Page ContentpagePage: Getting Started ID: page002 Created: Jan 10, 2024, 10:00 AM Updated: Jan 14, 2024, 03:30 PM Content: --- # Getting Started Welcome to the API documentation. ## Prerequisites - Node.js 18 - An API key ---这些稳定格式正是 Agent 能自动解析、无需额外get请求即可行动的基础。五、技术要点Technical Notes5.1 Markdown 处理不同功能、不同格式ClickUp 对不同功能使用不同的内容格式必须区分对待功能API 版本内容格式评论 Commentsv2专有 JSON 数组需经markdownToClickUp()转换任务描述 Task descriptionsv2原生 Markdownmarkdown_description字段文档/页面 Docs/Pagesv3原生 Markdown无需转换Docs APIv3直接收发 Markdown零转换成本而任务评论使用的是专有 JSON 数组格式必须依赖 lib/markdown.mjs 的转换工具。底层由remark-parseunified解析 Markdown 语法树后重组为 ClickUp 的富文本结构。5.2 Mention 两阶段解析lib/mentions.mjs 实现了 Mention 的完整流水线阶段一显式用正则/\[([^\]])\]/g提取[identifier]模式通过模糊匹配解析用户阶段二裸提及检测剩余文本中的Name模式/(?!\[)\w/与工作区成员用户名匹配转换将 Markdown 转为 ClickUp 的 JSON 数组格式markdownToClickUp()注入把 mention 属性写进对应文本节点——{text: DisplayName, attributes: {mention: userId}}由injectMentions()将含 DisplayName 的文本项按位置切分、插入 mention 属性。显式[identifier]支持的三种匹配方式部分姓名[justin]→ 模糊匹配 Justin Maier邮箱[janeco.com]→ 按邮箱匹配用户 ID[10620972]→ 直接按数字 ID 匹配裸Name自动检测规则对工作区成员做大小写不敏感匹配支持First Last与First先尝试完整用户名再退化为仅名字detectBareMentions()对每个成员构造两个候选模式并优先保留更长匹配未匹配的裸提及保留为纯文本——不报错、不浪费 API 调用它是「Agent 忘记写方括号」时的安全网错误语义对比显式[identifier]匹配失败会抛错裸提及匹配失败则静默通过。textToCommentArray()串起整个过程先resolveMentions()归一化所有提及再markdownToClickUp()转换最后injectMentions()注入属性。5.3 Doc 页面结构create-doc 与 create-page 的区别通过 API 创建 Doc 时ClickUp 会自动生成一个空的首个页面这带来三个命令的定位差异create-doc创建 Doc 并自动生成第一个页面用--content填充该页create-page为已有 Doc追加额外页面第二页、第三页……edit-page修改已有页面的内容。最佳实践给新 Doc 添加内容时用create-doc Title --content ...直接填充首屏而不要「先建 Doc 再 create-page」——后者会导致第一个页面永远是空的。5.4 分页与限流所有列表类端点都已自动分页拉取全部结果任务列表基于页每页 100 条见api/client.mjs的fetchAllPages()通过last_page判断终止评论基于游标每页 25 条Docs 搜索基于游标返回{ docs, nextCursor }。限流自动处理fetchWithRetry()在遇到 HTTP 429 时最多重试 2 次优先读取X-RateLimit-Reset响应头计算等待时间默认兜底等待 60 秒并对每次请求设置 30 秒超时REQUEST_TIMEOUT_MS 30000。注意分页循环本身是在单次「外层调用」内完成的而限流重试针对的是每次 HTTP 请求。六、测试smoke-test.mjs冒烟测试直接针对 ClickUp 生产 API 验证所有命令# 完整测试套件创建测试资源、校验、清理 node test/smoke-test.mjs # 只读测试安全无写入 node test/smoke-test.mjs --readonly # 详细输出失败时展示细节 node test/smoke-test.mjs --verbose新增功能时必须在 test/smoke-test.mjs 中补充对应测试。七、Webhook 事件监控实时通道Webhook 监控用于订阅 ClickUp 任务、列表或空间的实时事件借助 webhook.site 作为公共中继——无需任何额外基础设施。7.1 配置在accounts.json中加入 webhook.site token{ webhookSiteToken: your-uuid-from-webhook.site, defaultAccount: bot, accounts: { ... } }需要webhooksite/cliwhcli做实时转发npm install -g webhooksite/cli。7.2 命令# 监控单个任务或多个任务 node query.mjs watch-task task_id node query.mjs watch-task id1,id2,id3 node query.mjs watch-task task_id --events taskStatusUpdated,taskCommentPosted # 监控列表或空间 node query.mjs watch-list list_id node query.mjs watch-space space_id # 列出本地注册的活动 watcher node query.mjs watchers # 列出工作区全部 webhook来自 ClickUp API node query.mjs webhooks # 移除指定 watcher node query.mjs unwatch-webhook webhook_id # 移除全部 watcher node query.mjs unwatch-webhook --allapi/webhooks.mjs 的createWebhook()支持按taskId、listId、folderId、spaceId四种作用域订阅未指定作用域则订阅工作区全部事件本地 watcher 注册表持久化在watchers.json。7.3 监听器Listener监听器经 webhook.site 转发接收事件作为后台任务运行# 等待模式默认收到一个事件、打印、退出 node listen.mjs --timeout 600 # 服务器模式持续运行、记录全部事件 node listen.mjs --mode server # 组合选项 node listen.mjs --port 3458 --timeout 300 --mode wait7.4 监听器过滤器过滤器让监听器只在相关变化发生时唤醒 Agent# 仅当任务进入 qa review 状态时投递 node listen.mjs --filter-status qa review # 只投递评论事件忽略状态变化等 node listen.mjs --filter-event taskCommentPosted # 只投递指定任务的事件 node listen.mjs --filter-task 868abc123 # 组合过滤 node listen.mjs --filter-status complete,qa review --filter-event taskStatusUpdated # 多值用逗号分隔 node listen.mjs --filter-status in review,ready for qa过滤行为要点--filter-status针对taskStatusUpdated事件仅当新状态匹配才投递非状态事件不受影响--filter-event只投递指定事件类型逗号分隔多个--filter-task只投递指定任务 ID 的事件逗号分隔多个被过滤的事件仍会写入webhooks.jsonl并推进游标只是不触发投递对 ClickUp 始终返回 200 OK即使被过滤保证 webhook 健康存活。7.5 Agent 工作流# 1. 建立 watcher node query.mjs watch-task 868abc123 --events taskStatusUpdated,taskCommentPosted # 2. 以后台任务启动监听器run_in_backgroundtrue node listen.mjs --timeout 600 # 3. Agent 继续其他工作…… # 4. 事件到达时后台任务带着事件 JSON 退出 # Agent 读取 webhook-latest.json 或解析 stdout # 5. 若预期还有更多事件重启监听器 node listen.mjs --timeout 600 # 6. 完成后清理 node query.mjs unwatch-webhook --all7.6 默认订阅事件命令默认事件watch-tasktaskStatusUpdated, taskCommentPosted, taskUpdated, taskAssigneeUpdated, taskDueDateUpdatedwatch-listtaskCreated, taskStatusUpdated, taskCommentPosted, taskUpdated, taskDeletedwatch-spacetaskCreated, taskStatusUpdated, taskCommentPosted, taskUpdated, taskDeleted, listCreated, listUpdated, listDeleted用--events evt1,evt2,...覆盖默认值。7.7 事件落盘与补漏事件保存到三个文件webhook-latest.json— 最近一次事件美化打印webhooks.jsonl— 全部事件的追加式日志last-seen.txt— 用于追赶的时间戳游标监听器启动时会通过 webhook.site API 检查遗漏事件因此监听器重启间隙产生的事件会自动补齐不会丢。7.8 可用事件类型任务类taskCreated、taskUpdated、taskDeleted、taskPriorityUpdated、taskStatusUpdated、taskAssigneeUpdated、taskDueDateUpdated、taskTagUpdated、taskMoved、taskCommentPosted、taskCommentUpdated、taskTimeEstimateUpdated、taskTimeTrackedUpdated、taskAttachmentUploaded、taskCustomFieldUpdated。列表/文件夹/空间类listCreated、listUpdated、listDeleted、folderCreated、folderUpdated、folderDeleted、spaceCreated、spaceUpdated、spaceDeleted。八、轮询式任务监视器 watch.mjs默认首选watch.mjs 是一个自包含、基于轮询的监视器对单个任务或列表中的全部任务快照基线按间隔轮询 ClickUp API一旦检测到被监控的变化就以退出码 0 结束并打印一份简洁的 JSON 变更摘要。用run_in_backgroundtrue运行时父 Agent 会在其退出时收到任务通知。与 Webhook 方案watch-task/listen.mjs最大的区别是不需要 webhook.site 账号、不需要whcli任何 API Token 可用之处它都能跑。建议把它作为默认方案只有需要亚秒级实时性或工作区级事件流时才走 Webhook 通道。8.1 用法# 监控单个任务ID 或 URL检测状态/评论/负责人变化 node watch.mjs 868kjbyvu node watch.mjs https://app.clickup.com/t/868kjbyvu # 监控列表中全部任务跟踪状态/负责人变化 任务创建/删除 node watch.mjs --list 901111220963 # 仅当任务到达这些状态之一时唤醒 node watch.mjs 868kjbyvu --until-status in progress,complete # 只监听特定变更类型 node watch.mjs 868kjbyvu --on comments node watch.mjs 868kjbyvu --on status,assignee # 调整轮询节奏与寿命并把最新变更镜像到状态文件 node watch.mjs 868kjbyvu --timeout 3600 --interval 45 --state-file ./watch-latest.json # 指定账号 node watch.mjs 868kjbyvu --account justin8.2 全部 FlagsFlag默认值说明taskId\|url—位置参数。要监控的任务ID 或任意任务 URL。--list id\|url—改为监控列表中的全部任务。--timeout sec3600最多监控秒数超时以timeout结果退出。--interval sec45轮询周期最小 10对限流友好。--on typesstatus,comments,assignee逗号分隔的唤醒变更类型。--until-status list—仅当任务到达这些状态之一时唤醒隐含--on status。--account namedefault使用accounts.json中的具名账号。--state-file path—可选。把基线与最新变更 JSON 写入该文件对应 Webhook 方案的webhook-latest.json思路。8.3 能检测到什么status— 任务状态变化{from, to}comments— 出现新评论最新评论 id/计数变化。仅单任务模式列表模式跳过逐任务评论拉取以对 API 保持温和assignee— 负责人增减列表模式额外报告taskCreated/taskDeleted。源码中snapshotTask()把任务规约为用于跨轮询比较的字段集合assignees 按用户 ID 排序后比较、取最新评论作为评论游标保证比较稳定可靠。8.4 退出行为检测到变化→ 打印{event:change, ...}并退出0超时→ 打印{event:timeout, ...}并退出0致命配置错误ID 无效、无认证→ 打印ERROR:并退出1。轮询过程中的 API/网络/限流错误永远不会让循环崩溃——它们记录到 stderr 并指数退避上限 60 秒然后继续轮询。8.5 Agent 工作流# 1. 以后台任务启动 watcherrun_in_backgroundtrue node watch.mjs 868kjbyvu --until-status in review --timeout 3600 # 2. Agent 继续其他工作…… # 3. 任务进入 in review 时后台任务退出 0Agent 收到通知。 # 读取打印的 JSON或 --state-file即可知道变化内容 # {event:change,changes:[{type:status,from:in progress,to:in review}], ...} # 4. 处理完后若预期还有变化重新武装 watcher node watch.mjs 868kjbyvu --until-status complete --timeout 3600变更 JSON 中携带任务 URL、最新快照状态、负责人、评论数与elapsedSecAgent 无需额外get即可行动。九、批量建任务 batch-create项目初始化用一个 JSON 文件即可创建整个项目的任务支持名称、描述、负责人、优先级、子任务、标签、日期与任务间依赖。9.1 用法# 从 JSON 计划创建任务 node query.mjs batch-create --file plan.json # 预览而不创建干跑 node query.mjs batch-create --file plan.json --dry-run # 供程序化使用的 JSON 输出 node query.mjs batch-create --file plan.json --json9.2 JSON 计划 Schema{ listId: 901111220963, tasks: [ { ref: design, name: Design system architecture, description: Create the high-level architecture document, assignee: justin, priority: high, status: to do, dueDate: 7d, startDate: today, tags: [architecture, phase-1], subtasks: [ { name: Draft ERD, assignee: mark }, { name: Review ERD, assignee: dakota } ] }, { ref: implement, name: Implement core modules, assignee: mark, priority: normal, dependsOn: [design], subtasks: [ { name: Build data layer }, { name: Build API endpoints }, { name: Write unit tests } ] }, { ref: qa, name: QA validation, assignee: dakota, dependsOn: [implement], subtasks: [ { name: Integration tests }, { name: Performance testing } ] } ] }9.3 计划字段说明字段类型说明refstring本地引用 ID用于在任务间接线依赖namestring任务标题必填descriptionstringMarkdown 描述assigneestring姓名、邮箱或用户 IDprioritystringurgent, high, normal, low, nonestatusstring状态名必须匹配列表的可用状态dueDatestring绝对日期或相对日期3d, 1w, tomorrowstartDatestring与 dueDate 格式相同tagsstring[]要应用的标签名listIdstring为本任务覆盖默认 listIddependsOnstring[]必须先完成的任务的 refblocksstring[]本任务阻塞的任务的 refsubtasksobject[]{ name, description, assignee, status }数组9.4 依赖如何工作用ref作为本地标识再在dependsOn或blocks中引用{ tasks: [ { ref: a, name: Task A, blocks: [b] }, { ref: b, name: Task B, dependsOn: [a] } ] }blocks与dependsOn创建的是同一种 ClickUp 依赖——按读起来更自然的方式选择即可。执行顺序上lib/batch-create.mjs 会先创建全部任务再在第二轮接线依赖因为依赖双方都需要先存在。十、团队工作流模式Team Workflow Patterns模式 1团队负责人搭建项目负责人把整个项目计划写成 JSON然后一次性批量创建# 1. 编写计划或让 Agent 生成 # 2. 一次创建全部任务 node query.mjs batch-create --file project-plan.json # 3. 在列表上建立 watcher node query.mjs watch-list list_id --events taskStatusUpdated,taskCommentPosted # 4. 启动监听器监控进度 node listen.mjs --timeout 3600 --mode server模式 2工人 Agent 认领并完成任务# 1. 查看分配给我的任务 node query.mjs my-tasks # 2. 认领任务写入会话链接支持后续恢复 node query.mjs claim task_id # 3. 移动为进行中 node query.mjs status task_id in progress # 4. 干活…… # 5. 完成后移入评审并留言 node query.mjs status task_id in review node query.mjs comment task_id Implementation complete. Ready for review.模式 3QA 评审者监听评审状态# 1. 监听列表的状态变化 node query.mjs watch-list list_id --events taskStatusUpdated # 2. 启动只投递 in review 状态的监听器 node listen.mjs --filter-status in review --timeout 3600 # 3. 任务进入评审时Agent 被唤醒、读取事件 # 4. 拉取任务、评审然后批准或打回 node query.mjs get task_id node query.mjs comments task_id # 若批准 node query.mjs status task_id complete node query.mjs comment task_id QA approved. # 若需修改 node query.mjs status task_id in progress node query.mjs comment task_id Needs revision: [details] # 5. 为下一次评审重启监听器 node listen.mjs --filter-status in review --timeout 3600模式 4文档维护者在完成时收到通知# 监控任务完成 node query.mjs watch-list list_id --events taskStatusUpdated node listen.mjs --filter-status complete --timeout 3600 # 收到通知后更新项目文档 node query.mjs get task_id # 读取完成了什么 # 据此更新文档……模式 5阶段闸门Phase Gates对设计 → 实现 → QA → 部署这类顺序阶段项目{ listId: ..., tasks: [ { ref: phase1, name: Phase 1: Design, tags: [phase-gate] }, { ref: phase2, name: Phase 2: Implementation, dependsOn: [phase1], tags: [phase-gate] }, { ref: phase3, name: Phase 3: QA, dependsOn: [phase2], tags: [phase-gate] }, { ref: phase4, name: Phase 4: Deploy, dependsOn: [phase3], tags: [phase-gate] } ] }由「看门人」Agent 监听 phase-gate 任务完成事件触发下一阶段工作。十一、常用 URL 格式速查技能能够识别以下 ClickUp URL 格式任务https://app.clickup.com/t/{task_id}、https://app.clickup.com/{team_id}/v/li/{list_id}?p{task_id}、自定义任务 ID#DEV-123或DEV-123、直接任务 ID86a1b2c3d。列表https://app.clickup.com/{team_id}/v/li/{list_id}、直接列表 ID。空间https://app.clickup.com/{team_id}/v/s/{space_id}、直接空间 ID。文档https://app.clickup.com/{team_id}/v/dc/{doc_id}、https://app.clickup.com/{team_id}/docs/{doc_id}、直接 Doc ID。十二、实用技巧与最佳实践Team ID、User ID 等字段会自动缓存进accounts.json无需手工维护设置defaultListId后创建任务可省略列表 ID日期用自然语言tomorrow、next friday、3d提交信息中包含任务 ID便于全程可追溯需要脚本化或管道化输出时用--jsonDoc 内容输入输出均为 MarkdownDocs API 走 v3 端点基于工作区而非团队所有任务/评论查询自动分页无需手工翻页限流自动重试退避评论线程最佳实践发表评论前先comments task --threads查看既有对话若上下文引用的是某个评论线程用reply comment_id而不是comment task只有全新话题才用顶层comment。经验法则你之前发过评论、且有人在其中回复你的下一条回复应通过reply进入同一线程长内容用文件超过一句话的内容先写入 Markdown 文件再用--file path.md传入避免 shell 转义问题临时内容加--cleanup自动清理。--file适用于create-doc、create-page、edit-page、comment、description、create-list、update-list任务开工即 claimclaim会把当前会话 ID 写入任务的 Session ID 自定义字段要求列表存在名称含 Session 的文本自定义字段Session ID 的解析顺序为$CLAUDE_SESSION_ID→ 60 秒内最近修改的~/.claude/projects/*/*.jsonl这样即使后续换了会话也能原地续接工作。结语从日常任务查询到项目级批量初始化再到实时/轮询双通道事件监控.claude/skills/clickup为 Agent 提供了一套覆盖 ClickUp 全生命周期协作的自动化工具箱。无论是单人快速建任务还是「负责人建计划 → 工人认领执行 → QA 监听评审 → 文档维护跟进 → 阶段闸门推进」的多人多 Agent 流水线本文梳理的命令、过滤规则、JSON Schema 与源码级实现细节都可以直接对照 reference.md 和 SKILL.md 上手实践。【免费下载链接】civitaiA repository of models, textual inversions, and more项目地址: https://gitcode.com/GitHub_Trending/ci/civitai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考