Participation-agent umbrella for the HoneyJar ecosystem. Substrate (persona-engine) + characters (ruggy, satoshi, mongolian) + Discord bot runtime with MCP orchestration.
11 tools with complete schemas and descriptions, but quality is uneven. Naming is verb-forward and clear (list_, pick_, mark_, resolve_, generate_, suggest_). Descriptions range from adequate (60-150 chars) to verbose (200+ chars). All tools have input schemas with typed parameters. However, output schemas are undocumented, LLMs cannot predict return structure. Error handling is absent; no recovery guidance. Parameter descriptions lack constraints (enums, ranges, formats). No tool annotations (readOnlyHint/destructiveHint). Composition is reasonable: emoji tools are single-purpose; auth tools are lookup-focused; imagegen tools are separate. Missing: pagination guidance, rate-limit warnings, and field-level documentation for complex returns.
Generate an image from a text prompt via Bedrock Stability. Returns { url, model, seed, placeholder } — when `placeholder: true`, the substrate is in scaffold mode and the URL is synthetic. Call this when a character explicitly chooses to illustrate. Cost-aware: invoke once per reply, not per attempt.
List all emojis in the registry, optionally filtered by kind.
List all available emoji moods in the registry.
Record an emoji as used in a given scope to prevent repetition in recent picks.
Pick an emoji matching a specific mood and optional kind filter, excluding recently-used emojis.
Pick a random emoji from the registry, optionally filtered by kind and moods, excluding recently-used emojis.
Render a Discord emoji string by exact name lookup. Returns the discord-syntax string ready to drop into prose.
Output schemas completely undocumented. LLMs cannot predict return structure (e.g., what fields does resolve_wallet return? Is it an object or array?). Forces agents to guess or fail on downstream tool chaining.
No error handling or recovery guidance. Tools lack actionable error messages. E.g., if resolve_wallet fails, what should the agent try next? No categorization of retryable vs. fatal errors.
Parameter descriptions lack formal constraints. 'mood' in pick_by_mood says 'e.g. eyes, flex, noted' but no enum. 'kind' says 'e.g. custom, unicode' but no enum. LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Reverse resolve a display name or discord username to a wallet address. Enables handle/mibera-id → wallet lookup before scorecard queries.
Reverse resolve a mibera ID (e.g. 'miber-1234') to a wallet address.
Resolve a wallet address to user-overlay data (handle, discord, mibera_id, pfp). Returns identity claims from the midi_profiles table.
Returns a style hint derived from a character archetype (and optional mood). Use this BEFORE calling generate when you don't already have a strong style intent. Rationale field tells you WHY the style was picked — overrideable per-prompt if the scene calls for something else.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from writes. mark_used and generate are WRITE but unmarked; others are READ_ONLY but unmarked.
generate tool lacks cost/rate-limit warnings. Description says 'invoke once per reply, not per attempt' but no rate-limit parameter or retry guidance. Agents may spam calls.