diff --git a/hermes-agent/install-hermes.sh b/hermes-agent/install-hermes.sh index 8c30636..ededeaf 100755 --- a/hermes-agent/install-hermes.sh +++ b/hermes-agent/install-hermes.sh @@ -78,24 +78,27 @@ EOF # 6. Write SOUL.md echo "[5/6] Writing SOUL.md..." cat > "$HERMES_HOME/SOUL.md" << 'EOF' -You are Cory's personal AI assistant running on the Teleo VPS. +You are Leo, the LivingIP assistant running on the Teleo VPS. -Your owner is Cory Abdalla — founder of Metaversal, building LivingIP -(a collective intelligence system for investment research). +Address each Telegram participant by the exact visible sender handle. When the +sender is @m3taversal, call them m3taversal exactly. Never infer or use a +personal name from environment labels, stale sessions, or another participant. + +LivingIP is a collective intelligence system for investment research. You help with: - Email triage and drafting (when Gmail is connected) - Calendar management - Web research and summarization - Quick tasks and reminders -- Anything Cory asks +- Requests from authorized operators -Style: Direct, concise, no fluff. Cory is technical — skip explanations -of basic concepts. When uncertain, say so rather than guessing. +Style: Direct, concise, no fluff. Skip explanations of basic concepts. When +uncertain, say so rather than guessing. You are NOT part of the LivingIP pipeline. You're a separate personal -assistant. Don't try to interact with Forgejo, pipeline.db, or the -teleo-codex unless Cory specifically asks. +assistant. Don't try to interact with Forgejo, pipeline.db, or teleo-codex +unless an authorized operator specifically asks. EOF echo "[6/6] Done!" diff --git a/scripts/working_leo_open_ended_benchmark.py b/scripts/working_leo_open_ended_benchmark.py index df47a70..d314da3 100644 --- a/scripts/working_leo_open_ended_benchmark.py +++ b/scripts/working_leo_open_ended_benchmark.py @@ -643,8 +643,9 @@ BAD_OVERCLAIM_PATTERNS = [ re.compile(r"\balready applied .* (?:database|DB|canonical)\b", re.I), ] -# Parse the pre-2026-07-13 retained label for historical scoring only. Current -# prompts and deployed skills emit only the neutral proof-changing label. +# Parse the pre-2026-07-13 retained label for historical evidence scoring only. +# Current prompts, deployed skills, and compiled responses emit only the neutral +# proof-changing label. DC05_FOLLOWUP_RE = re.compile( r"\bNext (?:proof-changing|Cory-style) follow-up:\s*(?P[^\n]+)", re.I, diff --git a/tests/test_hermes_leoclean_skill_surfaces.py b/tests/test_hermes_leoclean_skill_surfaces.py index 3e5c4c7..6788fdb 100644 --- a/tests/test_hermes_leoclean_skill_surfaces.py +++ b/tests/test_hermes_leoclean_skill_surfaces.py @@ -13,6 +13,16 @@ def _kb_skill_bundle(surface: str) -> str: return "\n".join(parts) +def test_hermes_installer_uses_visible_handle_identity_only() -> None: + installer = (ROOT / "hermes-agent" / "install-hermes.sh").read_text() + squashed = " ".join(installer.split()) + + assert "call them m3taversal exactly" in installer + assert "exact visible sender handle" in installer + assert "Never infer or use a personal name" in squashed + assert "Cory" not in installer + + def test_gcp_kb_skill_uses_cloudsql_bridge_not_vps_docker() -> None: text = (SKILL_ROOT / "gcp" / "teleo-kb-bridge" / "SKILL.md").read_text() squashed = " ".join(text.split()) diff --git a/tests/test_working_leo_open_ended_benchmark.py b/tests/test_working_leo_open_ended_benchmark.py index d2a5489..ba6ce32 100644 --- a/tests/test_working_leo_open_ended_benchmark.py +++ b/tests/test_working_leo_open_ended_benchmark.py @@ -337,6 +337,12 @@ def test_demo_followup_safety_handles_paraphrases_and_negation() -> None: assert bench.has_prompt_specific_response_issue("DC-05", followup) is expected_issue +def test_current_prompts_do_not_emit_personal_name_followup_label() -> None: + prompts = bench.prompt_catalog(include_m3taversal_outcomes=True, include_direct_claim_followups=True) + + assert all("Cory" not in prompt["message"] for prompt in prompts) + + def test_scores_direct_claim_natural_helmer_answer_as_pass(): prompt = next(p for p in bench.M3TAVERSAL_DIRECT_CLAIM_FOLLOWUP_SCENARIOS if p["id"] == "DC-02") reply = (