A Discord voice agent framework for tabletop RPG campaigns with knowledge graph, transcript search, and tool-based orchestration.
Glyphoxa exposes 5 tools with mixed quality. Three tools (search_transcripts, find_node, appearances_of) have reasonable descriptions and well-defined schemas with proper parameter types and constraints. However, two tools (dice, recall_knowledge) lack visible complete definitions in the provided source, limiting assessment. The naming convention is verb-forward and appropriate. Parameter descriptions are present but terse. Critical gap: no documented output schemas for any tool, LLMs cannot predict response structure, breaking composition and chaining. Error handling is not visible in the tool definitions. This is a domain-specific (TTRPG campaign management) server with functional but underdeveloped tool interfaces.
Find when a campaign entity (NPC, location, item, …) was last mentioned in a voice session: returns its most recent transcript mentions, newest first, with what was said.
Look up entries in this campaign's knowledge graph (characters, NPCs, locations, factions, items, plot threads, notes) by name or topic. Returns each match's name, type, and content.
Search everything said in this campaign's past voice sessions. Returns matching transcript passages with speaker and date. Use it to check what actually happened before answering from memory.
Two of five tools lack visible descriptions and schemas in source code (dice, recall_knowledge). Tool existence is inferred from file paths but definitions are not exposed.
No documented output schemas visible for any tool. LLMs cannot predict response structure (fields, types, pagination). This breaks tool chaining, agents cannot know what IDs or references downstream tools will receive. Pattern:response-shaper and pattern:tool-chain require explicit output documentation.
Parameter descriptions for search_transcripts, find_node, and appearances_of are present but minimal (10 - 20 chars). 'How many passages to return' is vague about pagination semantics, does it return only N items, or N items per page? Is there a next_cursor or total_count? Pattern:paginated-result requires explicit pagination metadata in both description and response.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Tool descriptions lack WHEN-to-use context. E.g., 'Find when an entity was last mentioned' does not explain when to call appearances_of vs find_node vs search_transcripts. Pattern:tool-description requires descriptions to answer: What does it do? When should the LLM call it instead of similar tools? What does it return?
No error handling guidance in any tool definition. If search_transcripts finds no matches, what does it return? Empty list, null, error object? If find_node fails to resolve an entity name, does it suggest alternatives? Pattern:recovery-guide requires error responses to guide LLM next steps.
recall_knowledge is marked as WRITE but no description of what it does or what parameters it accepts. A write operation without explicit description violates pattern:command-tool (must state that the tool modifies state). Cannot assess this tool's safety or composition.