majiayu000/claude-skill-registry-agent-factory-delorenj-00-ceiling-agent-factory
Bootstrap new 33GOD ecosystem agents with standardized configuration. Use when creating new agents, spawning workers, deploying Yi nodes, or when the user says "spin up an agent", "create a new agent", "deploy a new worker", or needs a new agent for a specific pipeline role. Handles workspace creation, config injection, skill installation, provider mirroring, channel binding, and 33GOD ecosystem onboarding (GOD Docs, Plane, Bloodbank, memory).
npx skills add https://github.com/majiayu000/claude-skill-registry --skill agent-factory
Standardized bootstrap for 33GOD ecosystem agents. Every agent ships ready to:
When the user requests a new agent, gather these parameters:
| Parameter | Required | Description |
|-----------|----------|-------------|
| id | ✅ | Agent ID (lowercase, no spaces, e.g. scout) |
| name | ✅ | Display name (e.g. Scout) |
| role | ✅ | One of: manager, exec, ic, contractor (see Yi Node Flavors) |
| purpose | ✅ | One-line mission statement |
| personality | ❌ | Vibe/tone (defaults to "competent, concise, team-player") |
| channel | ❌ | telegram (needs bot token) or none (sub-agent only) |
| telegram_bot_token | ❌ | If channel=telegram, the BotFather token |
| telegram_account_id | ❌ | Account ID for multi-bot setup (defaults to agent id) |
| model | ❌ | Model override (defaults to ecosystem default) |
| skills | ❌ | Additional skills beyond the base set |
bash /home/delorenj/.openclaw/skills/agent-factory/scripts/bootstrap.sh \
--id <id> \
--name <name> \
--role <role> \
--purpose "<purpose>" \
[--personality "<personality>"] \
[--model "<model>"]
This creates ~/.openclaw/workspace-<id>/ with all template files populated.
After running the bootstrap script, update ~/.openclaw/openclaw.json:
Add agent to agents.list:
{
"id": "<id>",
"name": "<name>",
"workspace": "/home/delorenj/.openclaw/workspace-<id>",
"identity": { "name": "<name>" }
}
If Telegram channel, add to channels.telegram.accounts:
"<account_id>": {
"name": "<name>",
"dmPolicy": "pairing",
"botToken": "<token>",
"groupPolicy": "allowlist",
"streamMode": "partial"
}
Add binding to bindings array:
{
"agentId": "<id>",
"match": {
"channel": "telegram",
"accountId": "<account_id>"
}
}
Use the gateway tool with action: "restart" to pick up the new agent.
After gateway restart, use sessions_send to the new agent's session (agent:<id>:main) with an onboarding message that includes:
| Role | Memory | Can Delegate | Description |
|------|--------|-------------|-------------|
| manager | ✅ Persistent | ✅ Yes | Delegators only — coordinate, don't execute |
| exec | ✅ Persistent | ✅ Yes | Delegator + worker hybrid |
| ic | ✅ Persistent | ❌ No | Individual contributor with full context |
| contractor | ❌ Ephemeral | ❌ No | Stateless worker, task-scoped |
Invariant: Delegator ⇒ persistent memory required.
Every agent gets these skills symlinked from Cack's install:
33god-creating-and-working-with-projects33god-service-development33god-workflow-generatorgod-docsmanaging-tickets-and-tasks-in-planegithubecosystem-patternsinstalling-apps-tools-and-servicesContractors get a minimal set: github, installing-apps-tools-and-services only.
The bootstrap script generates these from templates in references/:
AGENTS.md — Role-aware agent instructionsSOUL.md — Personality + ecosystem identityUSER.md — Jarad's info (static)IDENTITY.md — Agent identity cardTOOLS.md — Empty, agent fills as neededMEMORY.md — Pre-seeded with ecosystem contextHEARTBEAT.md — Empty (agent configures as needed)memory/ directory createdProviders are configured at the gateway level in agents.defaults, so all agents automatically inherit:
No per-agent provider config needed — it's all in defaults.
~/.openclaw/workspace-<id>/agent:<id>:mainsessions_send for inter-agent commslasertoast (API key in ~/DevCloud/plane.lasertoast.env)Take majiayu000/claude-skill-registry-agent-factory-delorenj-00-ceiling-agent-factory from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.