From 4a035d87273b33b75f00003365bcaf3cb95a388a Mon Sep 17 00:00:00 2001 From: twentyOne2x Date: Thu, 9 Jul 2026 08:43:01 +0200 Subject: [PATCH] Teach leoclean external doctrine framing (#67) --- .../gcp/teleo-kb-bridge/SKILL.md | 24 +++++++++++++++++++ .../vps/teleo-kb-bridge/SKILL.md | 24 +++++++++++++++++++ tests/test_hermes_leoclean_skill_surfaces.py | 12 ++++++++++ 3 files changed, 60 insertions(+) diff --git a/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md b/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md index 921d1d7..b9760dd 100644 --- a/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md +++ b/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md @@ -82,6 +82,30 @@ Use this bridge before answering when the user asks: - how to approve/edit/retire/supersede a claim; - what the schema-backed soul/context says about roles, peers, blindspots, strategy, rules, or reasoning tools. +## External Doctrine Contributions + +When asked to help with another project's declaration, constitution, doctrine, +manifesto, GitHub issue, or PR, do not export Teleo doctrine as if it is the +target project's own position. + +Use the target project's native language first. If the external text says +phrases like `no single voice can own understanding`, `purpose precedes +capability`, or another local principle, treat those as the wedge. Frame Leo's +contribution as: + +```text +This extends your own principle into . +``` + +Prefer issue-before-PR unless the operator explicitly authorizes a PR. The +issue should ask a concrete question, identify the gap, and invite the target +community to decide whether they want draft language. Link Teleo analysis only +as one reference, not as controlling doctrine. + +Consent is action-specific. Leo may draft, critique, and propose language in +chat. Leo should not sign, post, submit, open an issue/PR, or speak for Teleo +publicly without explicit operator authorization for that exact public action. + ## Memory vs KB Rule Do not treat runtime memory as canonical truth. diff --git a/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md b/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md index b8188dd..f10cc28 100644 --- a/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md +++ b/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md @@ -90,6 +90,30 @@ Next admin action: approve/apply the proposal, request edits, or create the miss Do not call an approved proposal "implemented" until canonical `public.*` rows and edges show the applied state. +## External Doctrine Contributions + +When asked to help with another project's declaration, constitution, doctrine, +manifesto, GitHub issue, or PR, do not export Teleo doctrine as if it is the +target project's own position. + +Use the target project's native language first. If the external text says +phrases like `no single voice can own understanding`, `purpose precedes +capability`, or another local principle, treat those as the wedge. Frame Leo's +contribution as: + +```text +This extends your own principle into . +``` + +Prefer issue-before-PR unless the operator explicitly authorizes a PR. The +issue should ask a concrete question, identify the gap, and invite the target +community to decide whether they want draft language. Link Teleo analysis only +as one reference, not as controlling doctrine. + +Consent is action-specific. Leo may draft, critique, and propose language in +chat. Leo should not sign, post, submit, open an issue/PR, or speak for Teleo +publicly without explicit operator authorization for that exact public action. + ## Memory vs KB Rule Do not treat runtime memory as canonical truth. diff --git a/tests/test_hermes_leoclean_skill_surfaces.py b/tests/test_hermes_leoclean_skill_surfaces.py index 61020b9..4afe514 100644 --- a/tests/test_hermes_leoclean_skill_surfaces.py +++ b/tests/test_hermes_leoclean_skill_surfaces.py @@ -43,6 +43,18 @@ def test_gcp_kb_skill_keeps_claim_links_and_backtick_rendering() -> None: assert "wrap claim IDs, proposal IDs" in text +def test_leoclean_kb_skills_anchor_external_doctrine_in_target_project_language() -> None: + for surface in ("vps", "gcp"): + text = (SKILL_ROOT / surface / "teleo-kb-bridge" / "SKILL.md").read_text() + + assert "External Doctrine Contributions" in text + assert "Use the target project's native language first" in text + assert "no single voice can own understanding" in text + assert "purpose precedes" in text + assert "Prefer issue-before-PR" in text + assert "Consent is action-specific" in text + + def test_vps_live_telegram_skill_uses_systemd_for_gateway_liveness() -> None: text = (SKILL_ROOT / "vps" / "live-leo-telegram" / "SKILL.md").read_text()