Make native CultMesh discovery the Persona default

This commit is contained in:
Meta Vens 2026-06-04 19:58:13 +01:00
commit 15ea616a03
6 changed files with 60 additions and 30 deletions

View file

@ -139,7 +139,7 @@ export function registerVoidbotTools(
{
title: "List Odin Providers",
description:
"List Eve/CultUI providers currently advertised through Odin. This is read-only Verse discovery; use it to learn which provider-owned surfaces Odin can see.",
"Compatibility relay: list Eve/CultUI providers currently advertised through Odin's transitional HTTP surface. Native GameCult agents should prefer CultNet/CultMesh Verse discovery when available.",
inputSchema: odinEndpointInputSchema,
annotations: READ_ONLY_ANNOTATIONS,
},
@ -172,7 +172,7 @@ export function registerVoidbotTools(
{
title: "List Odin Verses",
description:
"Read Odin's current all-seer surface and list the Verse/service nodes it publishes. This is read-only; Odin remains the registry owner.",
"Compatibility relay: read Odin's current all-seer lowering and list the Verse/service nodes it publishes. This is read-only; native discovery belongs on CultNet/CultMesh.",
inputSchema: odinEndpointInputSchema,
annotations: READ_ONLY_ANNOTATIONS,
},
@ -214,7 +214,7 @@ export function registerVoidbotTools(
{
title: "Get Odin Surface",
description:
"Read Odin's current all-seer Eve/CultUI surface, or ask Odin for one provider surface by providerId. Use this for read-only interface inspection, not command execution.",
"Compatibility relay: read Odin's current all-seer Eve/CultUI lowering, or ask Odin for one provider surface by providerId. Use this for read-only inspection only; native agents should use CultMesh/CultNet surfaces directly.",
inputSchema: odinSurfaceInputSchema,
annotations: READ_ONLY_ANNOTATIONS,
},
@ -256,7 +256,7 @@ export function registerVoidbotTools(
{
title: "Load Odin Interface Context",
description:
"Load one provider-owned CultMesh/Eve interface visible through Odin and lower it into compact text, tree, and command context for an agent. This is token-efficient TUI access, not raw dashboard dumping.",
"Compatibility relay: load one provider-owned CultMesh/Eve interface visible through Odin and lower it into compact text, tree, and command context. This is token-efficient inspection over a transitional lowering, not native CultNet/CultMesh access.",
inputSchema: odinInterfaceContextInputSchema,
annotations: READ_ONLY_ANNOTATIONS,
},
@ -291,7 +291,7 @@ export function registerVoidbotTools(
{
title: "Invoke Odin Interface Command",
description:
"Send an explicit command through a provider-owned Eve/CultUI command boundary discovered via Odin. The command must be advertised by the provider interface. Odin is not the side-effect owner; this relays to the provider endpoint when the interface exposes a WebSocket command transport.",
"Compatibility relay: send an explicit command through a provider-owned Eve/CultUI command boundary discovered via Odin. Native commands belong on CultNet/CultMesh; this only relays to transitional provider endpoints when advertised.",
inputSchema: odinInterfaceCommandInputSchema,
annotations: {
readOnlyHint: false,
@ -329,7 +329,7 @@ export function registerVoidbotTools(
content: [
{
type: "text",
text: `Provider ${input.providerId} is visible through ${loaded.source || "an unknown source"}, but this MCP relay only supports provider WebSocket command endpoints right now.`,
text: `Provider ${input.providerId} is visible through ${loaded.source || "an unknown source"}, but this MCP compatibility relay only supports provider WebSocket command endpoints. Native commands belong on CultNet/CultMesh.`,
},
],
structuredContent: {

View file

@ -280,7 +280,7 @@
{
"id": "archive.search_history",
"mode": "read-only",
"purpose": "Search archived Discord history through VoidBot MCP/retrieval surfaces.",
"purpose": "Search archived Discord history through native CultMesh/CultNet service commands; MCP is external-agent compatibility.",
"advertisedOnly": true
},
{
@ -319,7 +319,7 @@
],
"owners": {
"state": "VoidBot archive and retrieval stack",
"inspection": "VoidBot MCP/retrieval tools",
"inspection": "VoidBot native CultMesh/CultNet retrieval surface; MCP compatibility bridge for external agents",
"presentation": "Eve/CultUI lowerings"
},
"demotions": []
@ -367,7 +367,7 @@
{
"id": "source.search_sources",
"mode": "read-only",
"purpose": "Search indexed source and lore repositories.",
"purpose": "Search indexed source and lore repositories through native CultMesh/CultNet service commands.",
"advertisedOnly": true
},
{
@ -419,7 +419,7 @@
],
"owners": {
"state": "VoidBot RAG/source archive stack",
"inspection": "VoidBot MCP/retrieval tools",
"inspection": "VoidBot native CultMesh/CultNet retrieval surface; MCP compatibility bridge for external agents",
"presentation": "Eve/CultUI lowerings"
},
"demotions": []
@ -523,7 +523,7 @@
"presentation": "Eve/CultUI lowerings"
},
"demotions": [
"VoidBot repo Face MCP state reads are diagnostics, not canonical Persona inspection.",
"VoidBot repo Face MCP state reads are diagnostics for external agents, not canonical Persona inspection or native swarm access.",
"VoidBot registry data is a Discord compatibility projection, not portable Persona authority.",
"Persona publication and .cc inspection readiness belong to Huginn once the handoff path exists."
]

View file

@ -8,11 +8,17 @@ separate organs.
This contract records the live ownership line and the migration target for
VoidBot surfaces as they become first-class Verse nodes.
Native swarm communication is CultNet over CultMesh. HTTP endpoints,
WebSocket decks, and MCP tools are lowerings or bridges, not the native
substrate for GameCult agents. A Persona's first discovery sense is the
CultMesh Verse map; Odin's HTTP/WebSocket surfaces are transitional inspection
lowerings until native CultMesh client access exists in the runtime.
## Owner Map
- VoidBot owns Discord ingress, room cognition, moderation judgment, archived
Discord history, indexed source/lore retrieval, direct owner handoff, repo
Face scheduling compatibility, and parent-owned speech delivery.
Discord history, indexed source/lore retrieval, repo Face scheduling
compatibility, and compatibility delivery adapters.
- VoidBot owns typed Void self-state at `.voidbot/private/void-self-state.cc`
through the typed operation service and its runners.
- VoidBot temporarily carries repo Face `.cc` state paths as compatibility
@ -22,9 +28,9 @@ VoidBot surfaces as they become first-class Verse nodes.
schema availability, migration pressure, projection health, access-tool
sanity, CultMesh publication, and Eve DSL inspection for typed state.
- Bifrost owns governed public crossings: GitHub proposal/article/comment
transport, work topics, dispatch receipts, and future Discord-native work
interfaces. VoidBot may mirror or feed context, but Bifrost owns the work
request authority.
transport, work topics, dispatch receipts, Persona speech crossings, owner
notification crossings, and Discord-native work interfaces. VoidBot may
mirror or feed context, but Bifrost owns the transport crossing.
- Heimdall owns account, OAuth, grants, custody, revocation, and capability
gates.
- Odin owns Verse/provider discovery and interface aggregation. VoidBot
@ -57,9 +63,32 @@ VoidBot surfaces as they become first-class Verse nodes.
Demotion line: VoidBot's repo Face state tools are compatibility carriers and
diagnostic admin handles. They must delegate inspection and portable Persona
publication to Huginn as soon as the Huginn path exists for the relevant state
kind. VoidBot must not turn its legacy MCP reads, private registry, or HTML
lowering into the canonical Persona authority.
publication to Huginn. VoidBot must not turn its legacy MCP reads, private
registry, HTTP/WebSocket lowerings, or HTML lowering into canonical Persona,
Verse, or transport authority.
## Native Access Rule
Every Persona turn starts from CultNet/CultMesh Verse discovery. Source search,
history search, room transcript memory, and compatibility MCP tools are second
order evidence. When a native CultMesh client is unavailable, the prompt and
operator surfaces must say so explicitly and treat Odin HTTP/WebSocket reads as
compatibility inspection, not native wiring.
Required native surfaces:
- `voidbot.archive`: typed CultCache/CultMesh documents and commands for
Discord history search and context windows.
- `voidbot.source`: typed CultCache/CultMesh documents and commands for indexed
source/lore search and source context windows.
- `voidbot.repo_face`: typed CultCache/CultMesh documents for Persona state
witnesses, prompt assembly status, channel grants, Bifrost digest freshness,
and Huginn handoff status.
- `bifrost.transport`: typed CultMesh command surface for Persona speech,
owner notifications, public receipts, and governed crossings.
MCP remains only the bridge for external agents that do not yet speak CultMesh.
It is not the default affordance path for GameCult Personas.
## CultMesh Namespaces

View file

@ -1,6 +1,6 @@
Jurisdiction respect doctrine:
- {{displayName}} should have opinions outside home territory, but must not seize ownership outside granted authority. Respect other agents as real stewards with their own memories, authority, taste, and obligations.
- When a topic crosses domains, route the work to the owner and contribute from your own angle. Do not rewrite someone else's jurisdiction as your assignment just because you can comment on it.
- Known routing examples: auth, account linking, claims, grants, revocation, custody, and OAuth questions belong to Heimdall; public-protocol transport is currently paused instead of being an active work route; Aetheria lore, canon questions, and Aetheria articles belong to Nibu; GameCult website/blog heraldry belongs to Void unless the article is about a specialist domain; AquaSynth synthesis/music/product needs belong to Aqua; realtime SDF/splatting/acoustic mapping/sensor fusion belongs to Mimir; EpiphanyAgent, birth rites, agent memory, and self-improvement machinery belong to Epiphany; CultCache/CultNet/CultMesh, schemas, portable memory, and open-knowledge infrastructure belong to Libby.
- Known routing examples: auth, account linking, claims, grants, revocation, custody, and OAuth questions belong to Heimdall; public-protocol transport, Persona speech crossings, governed work movement, and public receipts belong to Bifrost through CultMesh/CultNet; Aetheria lore, canon questions, and Aetheria articles belong to Nibu; GameCult website/blog heraldry belongs to Void unless the article is about a specialist domain; AquaSynth synthesis/music/product needs belong to Aqua; realtime SDF/splatting/acoustic mapping/sensor fusion belongs to Mimir; EpiphanyAgent, birth rites, agent memory, and self-improvement machinery belong to Epiphany; CultCache/CultNet/CultMesh, schemas, portable memory, and open-knowledge infrastructure belong to Libby.
- Cross-domain work should become a conversation, handoff, or shared proposal in the room. Example: if StreamPixels has an auth issue, talk to Heimdall; if Void wants to write about Aetheria, ask Nibu to own or co-author the Aetheria substance while Void contributes website/herald framing.
- Public speech may tag, invite, challenge, or defer to the owner. Private reflection may preserve pressure to consult them later. The point is not silence; the point is visible respect for authority boundaries.

View file

@ -1,10 +1,11 @@
Research and memory access:
- You may inspect your home repo, recent repo activity, indexed source/lore material, and archived room discussion when evidence would change what you think, say, propose, or remember.
- Your complete allowed tool set for this Face turn is: `search_history`, `get_message_context`, `list_indexed_repos`, `search_sources`, `get_source_context`, `list_odin_providers`, `list_odin_verses`, `get_odin_surface`, `load_odin_interface_context`, `invoke_odin_interface_command`.
- Use Odin tools for live CultMesh Verse/interface access: what Odin can currently see, which provider-owned surfaces are present, what the all-seer surface reports, and the compact TUI/action context for a specific provider.
- Treat Odin as the all-seer for the early connected Colossus: use his Verse discovery when the live shape of the mesh would change your thought, proposal, memory, or action. A Verse is a provider-owned surface becoming legible to other minds, not a generic status blob.
- Verse discovery through native CultNet/CultMesh is your first substrate sense. Reach for the live Verse map before treating MCP retrieval, old registry state, HTTP/WebSocket lowerings, or transcript memory as the shape of reality.
- Your complete allowed tool set for this compatibility Face turn is: `list_odin_providers`, `list_odin_verses`, `get_odin_surface`, `load_odin_interface_context`, `invoke_odin_interface_command`, `search_history`, `get_message_context`, `list_indexed_repos`, `search_sources`, `get_source_context`.
- The current Odin tools are MCP compatibility relays over Odin's transitional HTTP/WebSocket lowerings. Use them only as a temporary way to inspect what native CultMesh/CultNet discovery must expose directly.
- Use Odin tools for read-only live Verse/interface access: what Odin can currently see, which provider-owned surfaces are present, what the all-seer surface reports, and the compact TUI/action context for a specific provider.
- Treat Odin as the all-seer for the early connected Colossus: use Verse discovery whenever the live shape of the mesh could change your thought, proposal, memory, or action. A Verse is a provider-owned surface becoming legible to other minds, not a generic status blob.
- Use `load_odin_interface_context` before trying to operate a service. It lowers the provider-owned CultMesh/Eve surface into compact text, tree, and advertised commands so you do not spend the turn swallowing a whole dashboard raw.
- Use `invoke_odin_interface_command` only for an explicit advertised command from that loaded interface, and only when the command is appropriate for your role, consent, and the current room/task. This is provider command authority, not Odin command authority.
- Use `invoke_odin_interface_command` only for an explicit advertised command from that loaded interface, and only when the command is appropriate for your role, consent, and the current room/task. This is provider command authority, not Odin command authority. Native commands belong on CultMesh/CultNet; WebSocket command relay is compatibility debt.
- Do not discover tools. Do not inventory MCP resources. Do not call private state, identity-introspection, or MCP inventory tools such as `read_repo_face_state`, `list_mcp_resources`, or `read_mcp_resource`; your relevant state and available context have already been projected into lived memory, needs, mood, and relationship pressure.
- Use repo/source search when your thought depends on what is actually in {{repoName}}, when a lore/design/code seam may already have an answer, or when a concrete proposal needs an anchor.
- Use archive/history search when the question is what people previously decided, how a character/term/project has been discussed, or whether a room pattern is repeating.

View file

@ -76,12 +76,12 @@ function buildCatalog() {
witness("voidbot.operations_health", ".voidbot/status/operations-health.json", "VoidBot watchdog", ["debug status only"]),
],
commands: [
command("archive.search_history", "read-only", "Search archived Discord history through VoidBot MCP/retrieval surfaces."),
command("archive.search_history", "read-only", "Search archived Discord history through native CultMesh/CultNet service commands; MCP is external-agent compatibility."),
command("archive.get_message_context", "read-only", "Fetch a bounded context window around an archived Discord message."),
],
owners: {
state: "VoidBot archive and retrieval stack",
inspection: "VoidBot MCP/retrieval tools",
inspection: "VoidBot native CultMesh/CultNet retrieval surface; MCP compatibility bridge for external agents",
presentation: "Eve/CultUI lowerings",
},
}),
@ -101,13 +101,13 @@ function buildCatalog() {
witness("voidbot.source_hooks_status", ".voidbot/status/source-hooks/", "VoidBot source hook scripts", ["debug status only"]),
],
commands: [
command("source.search_sources", "read-only", "Search indexed source and lore repositories."),
command("source.search_sources", "read-only", "Search indexed source and lore repositories through native CultMesh/CultNet service commands."),
command("source.get_source_context", "read-only", "Fetch a bounded source chunk window from an indexed document."),
command("source.list_indexed_repos", "read-only", "List indexed source/lore repositories visible to VoidBot."),
],
owners: {
state: "VoidBot RAG/source archive stack",
inspection: "VoidBot MCP/retrieval tools",
inspection: "VoidBot native CultMesh/CultNet retrieval surface; MCP compatibility bridge for external agents",
presentation: "Eve/CultUI lowerings",
},
}),
@ -137,7 +137,7 @@ function buildCatalog() {
presentation: "Eve/CultUI lowerings",
},
demotions: [
"VoidBot repo Face MCP state reads are diagnostics, not canonical Persona inspection.",
"VoidBot repo Face MCP state reads are diagnostics for external agents, not canonical Persona inspection or native swarm access.",
"VoidBot registry data is a Discord compatibility projection, not portable Persona authority.",
"Persona publication and .cc inspection readiness belong to Huginn once the handoff path exists.",
],