Live2D desktop pet with MCP-based agent orchestration, tool registry, and multi-modal capabilities including Obsidian integration, code execution, and task delegation
Cyrene Agent provides 11 tools with generally complete schemas and descriptions. Obsidian tools (1-6) have detailed, context-aware descriptions in Chinese with clear usage guidance. However, several critical gaps reduce overall quality: (1) Tool names lack consistent verb-noun structure (e.g., 'obsidian_open_note' vs 'open_obsidian_note'); (2) Some descriptions exceed 1024 chars, wasting tokens; (3) Built-in tools (7-11) have minimal descriptions lacking WHEN/WHY guidance; (4) No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels; (5) Error handling descriptions are absent, tools don't guide LLM recovery. Obsidian tools average 250-400 chars (good), but orchestrator tools average 80-120 chars (too brief). Schemas are present and typed for all tools, but output schemas are undocumented.
在执行过程中需要用户提供偏好、澄清歧义、选择方向或补充自由文本时调用。这是排他工具:一轮里出现 ask_user 时,其他工具调用不执行。 一次可问 1-3 个问题;支持单选、多选和自由填写。每题都必须回答,用户也可以自由填写"停止"等明确意图。不要用最终回复向用户提问;需要用户回答后继续当前任务时,应调用此工具。 向用户征求**偏好/确认**时用本工具;不要用于出题测试用户的学习掌握程度(那是 pop_quiz 的职责:pop_quiz 是你考用户,ask_user 是你问用户)。
进入计划模式:与用户讨论方案并产出可审批的实施计划。 何时必须用: - 用户明确要求进入计划模式 / 说"做个计划"/"先别动手"/"我们先讨论"等意图时,必须调用本工具,不要自行判断"任务太简单"而跳过。 何时优先考虑: - 涉及代码/文件改动,且非单次工具调用即可完成的任务。 何时不用: - 单纯问答(直接回答);单步小任务(一次工具调用即可完成且无副作用);用户只要一段文字内容(直接写)。 进入后:只能读取信息与讨论方案,修改类工具全部禁用;讨论收敛后用 write_plan 提交计划,用户批准后才会开始执行。
在 Obsidian Vault 中创建或修改笔记内容。支持以下操作: - create:创建新笔记(目标已存在时拒绝,永不覆盖已有文件) - replace_file:完整替换文件内容(必须先读,带 expectedContentHash) - append:在文件末尾追加内容(必须先读,带 expectedContentHash) - replace_section:替换某个标题章节下的内容(必须先读,带 expectedContentHash) - append_to_section:追加到某个标题章节末尾(必须先读,带 expectedContentHash) 写契约(必须遵守): 1. create 永不覆盖:目标文件已存在时会被拒绝,此时应改为先读取再编辑。 2. 修改已有文件必须携带 expectedContentHash:先用 obsidian_read_file 读取全文拿到 contentHash,再在本次编辑中提供。缺失会被直接拒绝;不匹配说明文件已被外部修改,必须重新读取。 参数:operation(操作类型)、path(笔记路径)、content(内容)、expectedContentHash(修改已有文件时必填)、headingPath(replace_section/append_to_section 时需要)、includeChildren(replace_section 时)
列出 Obsidian Vault 中的 Markdown 笔记文件。 何时用: - 想浏览 Vault 中有什么笔记 - 查找特定目录下的所有笔记 - 确认某个笔记是否存在 参数:relativeDir(可选,目录相对路径),recursive(可选,是否递归,默认 true)
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. obsidian_edit is WRITE, obsidian_list_files is READ_ONLY, these should be declared in tool metadata for agent safety.
Orchestrator tools (update_todo, task, ask_user, enter_plan_mode, write_plan) have minimal descriptions (50-70 chars). Lack WHEN/WHY guidance. 'update_todo' description is 60 chars but should explain when to use vs direct action; 'enter_plan_mode' is 55 chars with no recovery guidance.
No error handling guidance in any tool description. Tools don't tell LLM what to do on failure (retry, ask user, abort). E.g., obsidian_edit says '拒绝' (rejected) but doesn't guide recovery. Missing pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
通过 obsidian:// 协议在 Obsidian 应用中打开指定笔记。 何时用: - 用户说「帮我打开 xxx 笔记」 - 需要让用户在 Obsidian 中查看或编辑笔记 - 教学完成后打开相关笔记供用户阅读 参数:path(笔记路径)、headingPath(可选,定位到具体章节)
读取 Obsidian Vault 中某个 Markdown 笔记的完整内容,返回全文及文件标题列表。 何时用: - 需要查看笔记的完整内容 - 了解笔记的整体结构 - 为后续的章节编辑操作获取 contentHash 非必须时优先用 obsidian_read_section 精准读取章节,避免返回过长内容。
按标题路径精准读取 Obsidian 笔记中的某个章节内容。 何时用: - 用户明确提到某个笔记的特定章节 - 只需要某个知识点,不需要读整篇 - 笔记很长但只需要部分内容 参数:path(笔记路径),headingPath(标题路径数组,如 ['Transformer', 'Self-Attention', 'QKV']),includeChildren(可选,是否包含子章节,默认 false)
在 Obsidian Vault 中搜索笔记:匹配文件名、标题和正文内容。 何时用: - 用户问「笔记里有关于 xxx 的内容吗」 - 不确定某个知识在哪篇笔记里 - 需要找到特定主题相关所有笔记 参数:query(必填,搜索关键词),relativeDir(可选,限制目录),limit(可选,默认 20)
委托一个需要独立上下文、多步执行的前台子任务。 何时用:多个互不依赖的调查方向可以并行;较大目录或多个模块的独立审查;有明确交付物的专项任务。 何时不用:一句话能回答的;只需一次工具调用的。 父任务会等待结果;description 只用于向用户显示委托标签,prompt 是子任务完整指令。可传 task_id 继续同一子任务。子任务不能询问用户或再次委托。
更新可变工作笔记(Todo)。传入完整的新 TodoItem 数组(整表替换)。 何时使用:预计任务需要至少 2 个 execution step(执行步骤)或 tool round(工具推进轮次)时,优先建立并持续更新清单;不按 LLM 调用次数计算。 不要用于简单问答、纯闲聊或单次工具即可完成的任务。Todo 是可随事实和改变方向而重写的工作笔记,不是后续行动的强约束,也不是外部操作已经成功的证明。 规则: - id 必须唯一 - 同一时刻最多一个 in_progress - 状态转移:pending → in_progress → completed/cancelled;pending 也可直接 completed/cancelled(一轮内可批量收尾多条,无需逐条经过 in_progress) - 不要把已 completed/cancelled 的任务改回 pending Runtime 会校验并修正违规,修正后的实际列表会回告给你。
把完整实施计划写入计划文件(仅计划模式可用)。 内容为 Markdown:目标、背景、任务清单(checkbox 列表,每项可独立验证)、风险与回退。 整份计划经 content 参数传入,Runtime 落盘并提交用户审批;需要修改时再次调用整份覆盖。 写入后本轮继续正常收尾,用户会在你回复结束后看到审批卡片。
Output schemas undocumented. Tools return structured data (e.g., obsidian_search returns file list with metadata, obsidian_read_file returns contentHash) but no schema is visible in definitions. LLM cannot plan downstream calls without knowing return structure.
Inconsistent naming convention. Obsidian tools use 'obsidian_' prefix (good), but orchestrator tools lack clear verb-noun structure. 'enter_plan_mode' and 'write_plan' are clear, but 'task' and 'update_todo' are ambiguous, 'task' could mean create, get, or list. Should be 'delegate_task' and 'update_todo_list'.