Personal Claude assistant for WhatsApp/Telegram/Discord with container-based agent runner, knowledge graph integration (LeanRAG), voice interviews, and multi-channel support
Single tool 'query_knowledge' has a well-structured description (180+ chars) explaining purpose, when to use it, and difficulty levels. Input schema is present with three parameters (question, difficulty, top_k), all with types and descriptions. However, the output schema is completely undocumented, the tool returns a dict with 'difficulty', 'seed_entities', 'entities', 'relations' fields, but this structure is never formally declared. The _format_context function shows the expected output shape, but LLMs cannot see implementation details. No error handling guidance, no recovery paths, no validation constraints on difficulty enum values. Parameter descriptions lack format/constraint details (e.g., top_k range, question length limits). Tool is read-only (safe), but lacks idempotent/readonly annotations. Overall: good naming and description, but missing critical output schema documentation and error handling.
Query the CS6650 course knowledge graph for structured, grounded information. Returns concepts, relationships, and source course materials relevant to the question. Use this BEFORE answering any course content question to ground your response in Professor Coady's actual materials rather than general knowledge. difficulty levels: - 'auto': system chooses based on query specificity (recommended) - 'entity': fine-grained concept lookup (e.g., 'What does a Paxos proposer do?') - 'cluster': concept group context (e.g., 'Compare consensus protocols') - 'theme': broad thematic analysis (e.g., 'Fault tolerance vs scalability tradeoffs')
Output schema completely undocumented. Tool returns dict with 'seed_entities', 'entities', 'relations', 'difficulty' fields, but LLMs cannot see this structure. _format_context() reveals the shape, but it is implementation code, not a formal schema declaration.
No error handling guidance. Tool description does not explain what happens on invalid difficulty, empty results, or knowledge graph unavailability. LLMs have no recovery path.
Parameter 'top_k' lacks numeric constraints. Description says 'Number of top results to return' with default=10, but no min/max bounds. LLMs could pass 0, 1000000, or negative values.
Difficulty enum values ('auto', 'entity', 'cluster', 'theme') are documented in the description but not formally declared as an enum constraint in the schema. Schema shows type=string with no enum field.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
No tool annotations (readOnlyHint, idempotentHint). Tool is read-only and safe to retry, but LLMs cannot infer this from the definition.