Behavioral genome for AI agents with drift detection and profile negotiation
Helios MCP demonstrates solid definition quality with well-structured tools, comprehensive parameter descriptions, and proper use of TypedDict output schemas. All 7 tools are explicitly defined in server.py with descriptions, input schemas via Pydantic Field, and tool annotations. However, several gaps prevent a higher score: (1) output schemas are declared as TypedDict but not validated at runtime or exposed in the MCP tool registration; (2) some parameter descriptions contain examples that could mislead LLMs (e.g. 'e.g. developer', 'e.g. claude-opus-5'); (3) error handling returns generic sanitized messages without recovery guidance; (4) the merge_strategy enum in import_profile is documented as text but not formally constrained in the schema.
Export a persona's behavioral profile as text, JSON, or YAML for use elsewhere
Get the behavioral context for a persona as system prompt text
Get the drift report for a persona: endorsed drift, fingerprint diagnostics and the id of the pending proposal, if any. Call when negotiation_recommended is true.
Import a personality file (CLAUDE.md, soul.md, etc.) into a Helios behavioral profile
List available persona names in the Helios directory
Accept or reject a proposal from get_drift_report. Accepted changes update the persona's user profile and are git-committed; rejections are recorded and pause proposals on those dimensions.
Output schemas declared as TypedDict but not exposed in MCP tool registration. LLMs cannot see the response structure to plan downstream chaining.
Parameter descriptions include example values ('e.g. developer', 'e.g. claude-opus-5') which LLMs tend to reuse literally. Should use enums or format constraints instead.
import_profile merge_strategy parameter documented as enum ('replace', 'merge', 'append') in description but not formally constrained in Pydantic schema, accepts any string.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 70 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Record the agent turns in a conversation for a persona and report whether a profile update is recommended
export_profile format parameter documented as enum ('text', 'json', 'yaml') but not formally constrained, LLM could pass invalid formats.
Error responses use sanitize_error_message() which likely strips context. No recovery guidance returned (e.g. 'Try list_personas() first' when persona_name not found).
observe_interaction and negotiate_update lack dry-run or confirmation step for write operations. Agent could accidentally commit unwanted profile changes.
negotiate_update decision parameter documented as 'accept' or 'reject' but not formally constrained as enum, LLM could pass other values.