Models & APIs as skills
Following the OpenClaw pattern, a model provider or an external API can be a skill instead of a plugin. GLM (Z.AI) and X (Twitter) ship as handler skills — and that's how the built-in AI team runs.
You don't need a compiled provider plugin to add a model or an integration. A handler skill — markdown with a sandboxed JS body and network: true — can call any API, and its key lives ON the skill: in the skill's own .md frontmatter config: block, resolved via secret_ref: "self:<key>". This is the OpenClaw way — everything the capability needs is on the skill.md, no central store.
GLM (Z.AI) as a skill
A model's completions are run by its provider_skill. The glm.complete handler skill calls Z.AI's OpenAI-compatible endpoint, so the glm-5 / glm-4.7 model entries become real, assignable agent brains — no plugin. Open the skill and paste your key into its config:
config:
api_key: "<your z.ai key>"
base_url: "https://api.z.ai/api/paas/v4"api_key is declared secret_ref: "self:api_key", so it's filled in server-side from this skill's own config — never pasted into a prompt or a central store. Then assign any agent the model glm-5 or glm-4.7.X (Twitter) search as a skill
The x.search handler skill calls the X API v2 recent-search endpoint and returns posts ranked by engagement with links. Open the skill and paste your token into its config: { bearer_token } — then any agent with the skill can scout X. (X's API is credit-metered; an unfunded plan returns 402 CreditsDepleted.)
x.post creates tweets, but X forbids posting with the app-only search bearer (403). It needs user-context credentials in x.post's config — either the 4 OAuth 1.0a keys (consumer_key + consumer_secret + oauth_token + oauth_token_secret, signed in-skill with HMAC-SHA1) or an OAuth2 user access_token. Posting is outward + irreversible, so gate it behind a human.handoff approval node.Brand images + video clips as skills
Two more handler skills round out the content engine, both keys-on-the-skill:
| Skill | What it does | Key in config |
|---|---|---|
brand.image | Your brand identity (visual style, palette, logo note) lives in config.brand_style — set it ONCE and every generated image looks like *you*, not a stock gradient. Wraps OpenAI image generation. | brand_style + openai_api_key |
vugola.clip / vugola.status | Turn a long video URL into captioned 9:16 short clips with AI virality scores (Vugola — the same clipper Vadim uses). Submit a URL, poll for the ranked clips. | vug_sk_ key |
brand.image is the reusable brand layer — define the brand on the skill and every agent that makes a graphic stays on-brand. No separate brand service needed.The built-in AI team
OpenBook seeds a skill-based, always-on AI team (the solo-founder agent company people build on OpenClaw). The content agents exist to grow the founder's brand on X by going viral — building in public, not advertising the product. Every capability is a Skill, and the API-calling agents self-heal:
| Agent | Role | Brain | Key skills |
|---|---|---|---|
| Jarvis | Chief of staff — routes & delegates | Strong model | pick_specialist, invoke_agent(s) |
| Alice | Research — keeps the viral X masterclass (MrBeast + Dan Koe), studies real outliers | Strong model | http.request (Reddit/HN), web_search, memory_* |
| Scribe | Copywriter — writes viral bangers in your voice from the masterclass | GLM 5 | memory_*, doc_*, email.send |
| Trendy | Scout — viral outliers to ride on X + Reddit | GLM 4.7 | x.search, http.request |
| Sentinel | Product health checks + code review | Strong model | http.request, doc_read/write |
| Dev | Nightly product feature proposer | Strong model | skill_create/edit/patch, doc_write |
| Clipper | YouTube → short clips | Fast model | http.request, doc_write |
| Daniel | Reddit growth scout — finds customers, hands Scribe leads (the '450 users' play) | Strong model | reddit.search, web_search, doc_* |
The content engine: Trendy finds the wave, Alice's viral X masterclass explains how to ride it, Scribe writes your version. Each cron workflow is a graph whose capability leaves are Skills, not Actions. If no Z.AI key is set, Scribe/Trendy fall back to the best available model so the team still runs.
