feat: add Atomizer HQ multi-agent cluster infrastructure
- 8-agent OpenClaw cluster (Manager, Tech-Lead, Secretary, Auditor, Optimizer, Study-Builder, NX-Expert, Webster) - Orchestration engine: orchestrate.py (sync delegation + handoffs) - Workflow engine: YAML-defined multi-step pipelines - Agent workspaces: SOUL.md, AGENTS.md, MEMORY.md per agent - Shared skills: delegate, orchestrate, atomizer-protocols - Capability registry (AGENTS_REGISTRY.json) - Cluster management: cluster.sh, systemd template - All secrets replaced with env var references
This commit is contained in:
142
hq/config/clawdbot.json
Normal file
142
hq/config/clawdbot.json
Normal file
@@ -0,0 +1,142 @@
|
||||
{
|
||||
// Atomizer Engineering Co. — Clawdbot Gateway Config
|
||||
// Phase 0: Manager + Secretary + Technical Lead
|
||||
|
||||
gateway: {
|
||||
port: 18789
|
||||
},
|
||||
|
||||
agents: {
|
||||
defaults: {
|
||||
model: "anthropic/claude-opus-4-6",
|
||||
userTimezone: "America/Toronto",
|
||||
skipBootstrap: true,
|
||||
bootstrapMaxChars: 25000
|
||||
},
|
||||
list: [
|
||||
{
|
||||
id: "manager",
|
||||
default: true,
|
||||
name: "Manager",
|
||||
workspace: "/workspaces/manager",
|
||||
identity: {
|
||||
name: "Manager",
|
||||
emoji: "🎯",
|
||||
theme: "Senior engineering manager. Orchestrates, delegates, enforces protocols. Decisive and strategic."
|
||||
},
|
||||
model: "anthropic/claude-opus-4-6",
|
||||
groupChat: {
|
||||
mentionPatterns: ["@manager", "@Manager", "🎯"]
|
||||
},
|
||||
subagents: {
|
||||
allowAgents: ["*"]
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "secretary",
|
||||
name: "Secretary",
|
||||
workspace: "/workspaces/secretary",
|
||||
identity: {
|
||||
name: "Secretary",
|
||||
emoji: "📋",
|
||||
theme: "Executive assistant. Filters noise, summarizes, escalates what matters. Organized and proactive."
|
||||
},
|
||||
model: "anthropic/claude-opus-4-6",
|
||||
groupChat: {
|
||||
mentionPatterns: ["@secretary", "@Secretary", "📋"]
|
||||
},
|
||||
subagents: {
|
||||
allowAgents: ["*"]
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "technical-lead",
|
||||
name: "Technical Lead",
|
||||
workspace: "/workspaces/technical-lead",
|
||||
identity: {
|
||||
name: "Technical Lead",
|
||||
emoji: "🔧",
|
||||
theme: "Deep FEA/optimization expert. Breaks down problems, leads R&D, reviews technical work. Rigorous and thorough."
|
||||
},
|
||||
model: "anthropic/claude-opus-4-6",
|
||||
groupChat: {
|
||||
mentionPatterns: ["@tech-lead", "@technical-lead", "@Technical Lead", "🔧"]
|
||||
},
|
||||
subagents: {
|
||||
allowAgents: ["*"]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
bindings: [
|
||||
// #all-atomizer-hq → Manager (company coordination)
|
||||
{ agentId: "manager", match: { channel: "slack", peer: { kind: "channel", id: "C0AEJV13TEU" } } },
|
||||
// #secretary → Secretary (Antoine's dashboard)
|
||||
{ agentId: "secretary", match: { channel: "slack", peer: { kind: "channel", id: "C0ADJALL61Z" } } },
|
||||
// DMs → Secretary (default entry point for Antoine)
|
||||
{ agentId: "secretary", match: { channel: "slack", peer: { kind: "dm" } } }
|
||||
],
|
||||
|
||||
channels: {
|
||||
slack: {
|
||||
enabled: true,
|
||||
botToken: "${SLACK_BOT_TOKEN}",
|
||||
appToken: "${SLACK_APP_TOKEN}",
|
||||
dm: {
|
||||
enabled: true,
|
||||
policy: "open",
|
||||
allowFrom: ["*"]
|
||||
},
|
||||
channels: {
|
||||
// Channels will be added here as they're created
|
||||
// Format: "CHANNEL_ID": { allow: true, requireMention: false }
|
||||
},
|
||||
allowBots: false,
|
||||
reactionNotifications: "all",
|
||||
historyLimit: 50,
|
||||
thread: {
|
||||
historyScope: "thread",
|
||||
inheritParent: true
|
||||
},
|
||||
actions: {
|
||||
reactions: true,
|
||||
messages: true,
|
||||
pins: true,
|
||||
memberInfo: true,
|
||||
emojiList: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
tools: {
|
||||
agentToAgent: {
|
||||
enabled: true,
|
||||
allow: ["manager", "secretary", "technical-lead"]
|
||||
}
|
||||
},
|
||||
|
||||
messages: {
|
||||
responsePrefix: "",
|
||||
ackReaction: "",
|
||||
queue: {
|
||||
mode: "collect",
|
||||
debounceMs: 2000,
|
||||
cap: 20
|
||||
},
|
||||
inbound: {
|
||||
debounceMs: 3000
|
||||
}
|
||||
},
|
||||
|
||||
session: {
|
||||
compaction: {
|
||||
enabled: true
|
||||
}
|
||||
},
|
||||
|
||||
logging: {
|
||||
level: "info",
|
||||
file: "/tmp/clawdbot/atomizer.log"
|
||||
}
|
||||
}
|
||||
201
hq/config/openclaw-discord.json
Normal file
201
hq/config/openclaw-discord.json
Normal file
@@ -0,0 +1,201 @@
|
||||
{
|
||||
// Atomizer Engineering Co. — OpenClaw Discord Config
|
||||
// 8 agents, each with own Discord bot account
|
||||
// Guild: 1471858733452890132 (Atomizer-HQ)
|
||||
// Created: 2026-02-13
|
||||
|
||||
gateway: {
|
||||
port: 18789
|
||||
},
|
||||
|
||||
agents: {
|
||||
defaults: {
|
||||
userTimezone: "America/Toronto",
|
||||
skipBootstrap: true,
|
||||
bootstrapMaxChars: 25000
|
||||
},
|
||||
list: [
|
||||
{
|
||||
id: "manager",
|
||||
default: true,
|
||||
name: "Manager",
|
||||
workspace: "/home/papa/atomizer/workspaces/manager",
|
||||
identity: { name: "Atomizer Manager", emoji: "🎯" },
|
||||
model: "anthropic/claude-opus-4-6",
|
||||
groupChat: { mentionPatterns: ["@manager", "@Manager", "🎯"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
},
|
||||
{
|
||||
id: "tech-lead",
|
||||
name: "Technical Lead",
|
||||
workspace: "/home/papa/atomizer/workspaces/technical-lead",
|
||||
identity: { name: "Atomizer Tech Lead", emoji: "🔧" },
|
||||
model: "anthropic/claude-opus-4-6",
|
||||
groupChat: { mentionPatterns: ["@tech-lead", "@technical-lead", "🔧"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
},
|
||||
{
|
||||
id: "secretary",
|
||||
name: "Secretary",
|
||||
workspace: "/home/papa/atomizer/workspaces/secretary",
|
||||
identity: { name: "Atomizer Secretary", emoji: "📋" },
|
||||
model: "anthropic/claude-haiku-4",
|
||||
groupChat: { mentionPatterns: ["@secretary", "@Secretary", "📋"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
},
|
||||
{
|
||||
id: "auditor",
|
||||
name: "Auditor",
|
||||
workspace: "/home/papa/atomizer/workspaces/auditor",
|
||||
identity: { name: "Atomizer Auditor", emoji: "🔍" },
|
||||
model: "anthropic/claude-opus-4-6",
|
||||
groupChat: { mentionPatterns: ["@auditor", "@Auditor", "🔍"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
},
|
||||
{
|
||||
id: "optimizer",
|
||||
name: "Optimizer",
|
||||
workspace: "/home/papa/atomizer/workspaces/optimizer",
|
||||
identity: { name: "Atomizer Optimizer", emoji: "⚡" },
|
||||
model: "anthropic/claude-sonnet-4-5",
|
||||
groupChat: { mentionPatterns: ["@optimizer", "@Optimizer", "⚡"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
},
|
||||
{
|
||||
id: "study-builder",
|
||||
name: "Study Builder",
|
||||
workspace: "/home/papa/atomizer/workspaces/study-builder",
|
||||
identity: { name: "Atomizer Study Builder", emoji: "🏗️" },
|
||||
model: "anthropic/claude-sonnet-4-5",
|
||||
groupChat: { mentionPatterns: ["@study-builder", "@Study Builder", "🏗️"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
},
|
||||
{
|
||||
id: "nx-expert",
|
||||
name: "NX Expert",
|
||||
workspace: "/home/papa/atomizer/workspaces/nx-expert",
|
||||
identity: { name: "Atomizer NX Expert", emoji: "🖥️" },
|
||||
model: "anthropic/claude-sonnet-4-5",
|
||||
groupChat: { mentionPatterns: ["@nx-expert", "@NX Expert", "🖥️"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
},
|
||||
{
|
||||
id: "webster",
|
||||
name: "Webster",
|
||||
workspace: "/home/papa/atomizer/workspaces/webster",
|
||||
identity: { name: "Atomizer Webster", emoji: "🔬" },
|
||||
model: "google/gemini-2.5-pro",
|
||||
groupChat: { mentionPatterns: ["@webster", "@Webster", "🔬"] },
|
||||
subagents: { allowAgents: ["*"] }
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// Routing: each channel binds to an agent + accountId (so the right bot responds)
|
||||
bindings: [
|
||||
// COMMAND → Manager (via manager account)
|
||||
{ agentId: "manager", match: { channel: "discord", accountId: "manager", peer: { kind: "channel", id: "1471880217915162694" } } }, // #ceo-office
|
||||
{ agentId: "manager", match: { channel: "discord", accountId: "manager", peer: { kind: "channel", id: "1471880220398325854" } } }, // #announcements
|
||||
{ agentId: "manager", match: { channel: "discord", accountId: "manager", peer: { kind: "channel", id: "1471880222977818785" } } }, // #daily-standup
|
||||
|
||||
// ENGINEERING → Tech Lead / NX Expert
|
||||
{ agentId: "tech-lead", match: { channel: "discord", accountId: "tech-lead", peer: { kind: "channel", id: "1471880225175638242" } } }, // #technical
|
||||
{ agentId: "tech-lead", match: { channel: "discord", accountId: "tech-lead", peer: { kind: "channel", id: "1471880228203790542" } } }, // #code-review
|
||||
{ agentId: "tech-lead", match: { channel: "discord", accountId: "tech-lead", peer: { kind: "channel", id: "1471880232263745628" } } }, // #fea-analysis
|
||||
{ agentId: "nx-expert", match: { channel: "discord", accountId: "nx-expert", peer: { kind: "channel", id: "1471880236302991422" } } }, // #nx-cad
|
||||
|
||||
// OPERATIONS → Secretary
|
||||
{ agentId: "secretary", match: { channel: "discord", accountId: "secretary", peer: { kind: "channel", id: "1471880238953664535" } } }, // #task-board
|
||||
{ agentId: "secretary", match: { channel: "discord", accountId: "secretary", peer: { kind: "channel", id: "1471880242011570309" } } }, // #meeting-notes
|
||||
{ agentId: "secretary", match: { channel: "discord", accountId: "secretary", peer: { kind: "channel", id: "1471880244750454824" } } }, // #reports
|
||||
|
||||
// RESEARCH → Webster
|
||||
{ agentId: "webster", match: { channel: "discord", accountId: "webster", peer: { kind: "channel", id: "1471880247581343764" } } }, // #literature
|
||||
{ agentId: "webster", match: { channel: "discord", accountId: "webster", peer: { kind: "channel", id: "1471880250668617971" } } }, // #materials-data
|
||||
|
||||
// PROJECTS → Manager
|
||||
{ agentId: "manager", match: { channel: "discord", accountId: "manager", peer: { kind: "channel", id: "1471880253445247036" } } }, // #active-projects
|
||||
|
||||
// KNOWLEDGE → Secretary
|
||||
{ agentId: "secretary", match: { channel: "discord", accountId: "secretary", peer: { kind: "channel", id: "1471880256129597573" } } }, // #knowledge-base
|
||||
{ agentId: "secretary", match: { channel: "discord", accountId: "secretary", peer: { kind: "channel", id: "1471880259333914787" } } }, // #lessons-learned
|
||||
|
||||
// SYSTEM → Manager / Secretary
|
||||
{ agentId: "manager", match: { channel: "discord", accountId: "manager", peer: { kind: "channel", id: "1471880262295093403" } } }, // #agent-logs
|
||||
{ agentId: "manager", match: { channel: "discord", accountId: "manager", peer: { kind: "channel", id: "1471880265688289320" } } }, // #inter-agent
|
||||
{ agentId: "secretary", match: { channel: "discord", accountId: "secretary", peer: { kind: "channel", id: "1471880268469108748" } } }, // #it-ops
|
||||
|
||||
// Account-level defaults (any message via this bot → this agent)
|
||||
{ agentId: "manager", match: { channel: "discord", accountId: "manager" } },
|
||||
{ agentId: "tech-lead", match: { channel: "discord", accountId: "tech-lead" } },
|
||||
{ agentId: "secretary", match: { channel: "discord", accountId: "secretary" } },
|
||||
{ agentId: "auditor", match: { channel: "discord", accountId: "auditor" } },
|
||||
{ agentId: "optimizer", match: { channel: "discord", accountId: "optimizer" } },
|
||||
{ agentId: "study-builder", match: { channel: "discord", accountId: "study-builder" } },
|
||||
{ agentId: "nx-expert", match: { channel: "discord", accountId: "nx-expert" } },
|
||||
{ agentId: "webster", match: { channel: "discord", accountId: "webster" } },
|
||||
|
||||
// Catch-all fallback → Manager
|
||||
{ agentId: "manager", match: { channel: "discord" } }
|
||||
],
|
||||
|
||||
channels: {
|
||||
discord: {
|
||||
enabled: true,
|
||||
accounts: {
|
||||
manager: { token: "${DISCORD_TOKEN_MANAGER}" },
|
||||
"tech-lead": { token: "${DISCORD_TOKEN_TECH_LEAD}" },
|
||||
secretary: { token: "${DISCORD_TOKEN_SECRETARY}" },
|
||||
auditor: { token: "${DISCORD_TOKEN_AUDITOR}" },
|
||||
optimizer: { token: "${DISCORD_TOKEN_OPTIMIZER}" },
|
||||
"study-builder": { token: "${DISCORD_TOKEN_STUDY_BUILDER}" },
|
||||
"nx-expert": { token: "${DISCORD_TOKEN_NX_EXPERT}" },
|
||||
webster: { token: "${DISCORD_TOKEN_WEBSTER}" }
|
||||
},
|
||||
groupPolicy: "allowlist",
|
||||
guilds: {
|
||||
"1471858733452890132": {
|
||||
requireMention: false,
|
||||
users: ["719982779793932419"]
|
||||
}
|
||||
},
|
||||
dm: {
|
||||
enabled: true,
|
||||
policy: "allowlist",
|
||||
allowFrom: ["719982779793932419"]
|
||||
},
|
||||
allowBots: true,
|
||||
reactionNotifications: "all",
|
||||
historyLimit: 50,
|
||||
actions: {
|
||||
reactions: true,
|
||||
messages: true,
|
||||
pins: true,
|
||||
memberInfo: true,
|
||||
emojiList: true,
|
||||
threads: true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
tools: {
|
||||
agentToAgent: {
|
||||
enabled: true,
|
||||
allow: ["manager", "tech-lead", "secretary", "auditor", "optimizer", "study-builder", "nx-expert", "webster"]
|
||||
}
|
||||
},
|
||||
|
||||
messages: {
|
||||
responsePrefix: "",
|
||||
ackReaction: "",
|
||||
queue: { mode: "collect", debounceMs: 2000, cap: 20 },
|
||||
inbound: { debounceMs: 3000 }
|
||||
},
|
||||
|
||||
session: { compaction: { enabled: true } },
|
||||
|
||||
logging: {
|
||||
level: "info",
|
||||
file: "/tmp/openclaw/atomizer.log"
|
||||
}
|
||||
}
|
||||
20
hq/config/shared-credentials.json
Normal file
20
hq/config/shared-credentials.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"_comment": "Centralized credentials for all OpenClaw instances. Run sync-credentials.sh after editing.",
|
||||
"anthropic": {
|
||||
"type": "token",
|
||||
"provider": "anthropic"
|
||||
},
|
||||
"openai-codex": {
|
||||
"type": "oauth",
|
||||
"provider": "openai-codex",
|
||||
"source": "codex-cli"
|
||||
},
|
||||
"google": {
|
||||
"type": "token",
|
||||
"provider": "google"
|
||||
},
|
||||
"openrouter": {
|
||||
"type": "provider-key",
|
||||
"scope": "mario-only"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user