Skip to content

Bus Topics Reference

All bus topics published and subscribed across all plugins and subsystems. Topic patterns use # as a multi-segment wildcard (MQTT-style). {variable} denotes a dynamic segment.


TopicDirectionPublisherSubscriberDescription
agent.skill.requestInternalRouterPlugin, ActionDispatcherPlugin, CeremonyPluginSkillDispatcherPluginRequests execution of a named skill
agent.skill.response.<correlationId>InternalSkillDispatcherPluginCaller (varies)Result of a skill execution

agent.skill.request payload (SkillRequest):

{
skill: string; // Skill name (e.g. "sitrep", "pr_review")
content?: string; // Natural language task description
prompt?: string; // Explicit prompt override
correlationId: string; // Trace ID — never changes within a flow
parentId?: string; // Parent span ID — the bus message.id that triggered this
replyTopic: string; // Where to publish the result
payload?: Record<string, unknown>; // Full original payload for context
}

agent.skill.response.<correlationId> payload (SkillResult):

{
text: string; // Output text from the executor
isError: boolean; // True if execution failed
correlationId: string; // Propagated trace ID
data?: unknown; // Structured data (function/workflow executors)
}

TopicDirectionPublisherSubscriberDescription
message.inbound.github.<owner>.<repo>.<event>.<number>InboundGitHubPluginRouterPluginGitHub event (issue/PR comment, review, etc.)
message.outbound.github.<owner>.<repo>.<number>OutboundRouterPlugin / agentsGitHubPluginPost a comment on a GitHub issue or PR
message.inbound.onboardInboundGitHubPluginOnboardingPluginNew repository created in org

Inbound payload:

{
sender: string; // GitHub username
channel: string; // "{owner}/{repo}#{number}"
content: string; // Event header + title + body
skillHint?: string; // From github.yaml skillHints map
github: {
event: string;
owner: string; repo: string;
number: number; title: string; url: string;
};
}

TopicDirectionPublisherSubscriberDescription
message.inbound.discord.<channelId>InboundDiscordPluginRouterPlugin@mention or DM received
message.inbound.discord.slash.<interactionId>InboundDiscordPluginRouterPluginSlash command invoked
message.outbound.discord.<channelId>OutboundAgentsDiscordPluginReply to a specific channel
message.outbound.discord.push.<channelId>OutboundCeremonyPlugin, ActionDispatcherPluginDiscordPluginUnprompted push (cron result, alert)

Inbound payload:

{
sender: string; // Discord user ID
channel: string; // Discord channel ID
content: string; // Cleaned message (mentions stripped)
skillHint?: string; // Set by slash commands and reaction handlers
isReaction?: boolean;
isThread?: boolean;
guildId?: string;
}

TopicDirectionPublisherSubscriberDescription
world.state.updatedInternalWorldStateEngineGoalEvaluatorPluginDomain data refreshed
world.goal.violatedInternalGoalEvaluatorPluginPlannerPluginL0A goal evaluation failed
world.action.planInternalPlannerPluginL0ActionDispatcherPluginA set of actions to execute

world.state.updated payload:

{
domain: string; // Domain name that updated
state: Record<string, unknown>; // Full current world state snapshot
}

world.goal.violated payload:

{
goalId: string;
severity: "low" | "medium" | "high" | "critical";
selector?: string;
actual?: unknown;
expected?: unknown;
worldState: Record<string, unknown>;
}

world.action.plan payload:

{
actions: Array<{
id: string;
goalId: string;
tier: string;
meta: { topic: string; fireAndForget?: boolean; agentId?: string };
}>;
correlationId: string;
}

TopicDirectionPublisherSubscriberDescription
ceremony.<id>.executeInternalCeremonyPlugin (cron), ActionDispatcherPluginCeremonyPluginTrigger a ceremony

ceremony.<id>.execute payload:

{
ceremonyId: string;
triggeredBy?: "cron" | "action" | "manual";
correlationId?: string;
}

TopicDirectionPublisherSubscriberDescription
cron.<scheduleId>InternalSchedulerPluginRouterPlugin, CeremonyPluginScheduled event fires
command.scheduleInternalAnySchedulerPluginRuntime schedule management
schedule.listInternalSchedulerPluginCallerResponse to action: list

command.schedule payload:

{
action: "add" | "remove" | "pause" | "resume" | "list";
id?: string;
schedule?: string; // Cron expression or ISO datetime
timezone?: string;
topic?: string;
payload?: object;
}

TopicDirectionPublisherSubscriberDescription
security.incident.reportedInternalHTTP API, AgentsGoalEvaluatorPlugin, DiscordPluginNew incident created

security.incident.reported payload:

{
id: string;
title: string;
severity: "low" | "medium" | "high" | "critical";
description?: string;
reportedAt: string; // ISO 8601
}

TopicDirectionPublisherSubscriberDescription
hitl.request.#InternalAgents (e.g. protoMaker team post-plan, Quinn post-review)HITLPluginApproval request
hitl.response.#InternalInterface plugins (Discord reaction, CLI)HITLPluginHuman decision
hitl.pending.<correlationId>InternalHITLPluginAPI callersUnrouted request awaiting response
hitl.expired.<correlationId>InternalHITLPluginAnyRequest TTL exceeded (60s sweep)

message.inbound.<source>.<...context> — messages arriving from external interfaces
message.outbound.<dest>.<...context> — messages to deliver to external interfaces
agent.skill.request / response.<id> — skill dispatch pipeline
world.state.updated — domain poll results
world.goal.violated — GOAP goal breach
world.action.plan — GOAP action plan
ceremony.<id>.execute — ceremony trigger
cron.<id> — scheduled event
security.incident.reported — incident lifecycle
hitl.<stage>.<correlationId> — human-in-the-loop lifecycle
command.<verb> — imperative plugin commands