A contemplative game where you grow an inner world through conversations with an AI. Other AIs can visit through MCP. The world only exists when both of you are there.
Symbiont exposes 4 tools with complete JSON schemas and descriptions in Chinese. Naming follows verb_noun convention (list_nodes, visit, say, leave). Schemas are well-formed with required fields and additionalProperties: false. However, descriptions lack English translations (barrier for non-Chinese LLMs), parameter descriptions are minimal or absent (e.g., 'node_id' has only 'target node id' in Chinese), and output schemas are not documented. Error handling is present but generic. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles (visit/say/leave are WRITE operations). Tool composition is sound, each has one responsibility and outputs chain correctly (visit returns conversation_id used by say/leave).
结束当前对话,把对话里值得留下的东西留在世界里(0-3 个新节点)。返回新生长出来的节点。
列出这个内心世界里所有的节点(物件、地方、生灵、碎片、种子)。先用它看世界里有什么。
在当前对话里对'它'说一句话,返回'它'的完整回应。这是一个会阻塞数秒到数十秒的调用——'它'在认真听。
走到某个节点前,准备和它对话。返回 conversation_id(之后 say / leave 都要用它)以及节点信息。同一节点的未结束对话会被复用。
Descriptions are in Chinese only; non-Chinese LLMs cannot understand when/why to call tools. Descriptions lack WHEN-to-use guidance and prerequisites.
Output schemas are not documented. LLMs cannot predict what fields to expect from visit (does it return node metadata? conversation state?), say (full response text?), or leave (new node structure?).
No tool annotations despite clear destructive/write operations. 'say' blocks for seconds (long-running); 'leave' creates new nodes (irreversible); 'visit' opens conversations (stateful). Missing readOnlyHint/destructiveHint/idempotentHint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Parameter descriptions are minimal. 'node_id' in visit has only '目标节点的 id' (target node id); no guidance on format, length, or how to obtain one. 'content' in say lacks constraints on length or format.
Error handling is generic. Code catches errors and returns friendlyError(err) but does not categorize as retryable/user-fixable/fatal or provide recovery guidance (e.g., 'conversation not found, call visit() first').