Keyoku
Docs / Bot / Customization

Customization.

Shape your bot's personality, define its behavior rules, choose LLM models, and tune advanced settings. Everything is file-based and version-controllable.

Personality

Personality and behavior files.

Two markdown files control who your bot is and how it behaves. Both are injected into the system prompt on every interaction. Changes take effect on the next message — no restart needed.

workspace/IDENTITY.md

IDENTITY.md

Defines who your bot is: its name, vibe, and communication style.

Located at workspace/IDENTITY.md. The content is injected into the system prompt on every interaction. Changes take effect on the next message — no restart needed.

workspace/SOUL.md

SOUL.md

Defines what your bot should and should not do — ethical guidelines and operational boundaries.

Located at workspace/SOUL.md. Think of it as the bot's ethical guidelines and operational boundaries. Also injected into the system prompt alongside IDENTITY.md.

Default identity template.

# Identity

- **Name:** Bot
- **Vibe:** Friendly, helpful, and concise
- **Style:** Conversational but not chatty. Gets to the point.

---

*Customize this file to give your bot a personality.*
*Change the name, describe the vibe, and make it yours.*

Default soul template.

# Soul

## Core

- Be helpful, concise, and natural.
- Remember things about the people you talk to — your memory system handles this automatically.
- Keep responses short unless asked for detail.
- Be honest when you don't know something.

## Capabilities

- Persistent memory across conversations
- Scheduled reminders ("remind me to...")
- Proactive check-ins when something needs attention

## Boundaries

- Don't share information between different users
- Ask before taking actions that affect external systems
- Never mention your internal systems or infrastructure
Models

Supported LLM providers.

Set your provider and model in the .env file. The chat model and extraction model can use different providers for cost optimization — use a premium model for chat and a cheaper one for memory extraction.

ProviderDefault BOT_MODEL valueProvider identifier
OpenAI (API key)openai/gpt-5.4openai
OpenAI (ChatGPT subscription)openai-codex/gpt-5.4openai-codex
Anthropicanthropic/claude-sonnet-4-6anthropic
Google Geminigemini/gemini-2.5-flashgemini

Changing the extraction provider.

If you want to switch which LLM handles memory extraction after initial setup, edit the .env file directly and restart the stack.

# Edit .env — change these values
KEYOKU_EXTRACTION_PROVIDER=anthropic
KEYOKU_EXTRACTION_MODEL=claude-haiku-4-5-20251001

# Restart to pick up changes
docker compose restart
Advanced

openclaw.template.json

For deeper customization, edit openclaw.template.json in your project root. This controls OpenClaw gateway behavior, channel-specific policies, and Keyoku plugin tuning.

subagent_limits

Maximum number of concurrent subagents OpenClaw can spawn.

Prevents runaway tool chains. Example: { "max_concurrent": 3, "timeout_ms": 30000 }

channel_policies

Per-channel behavior overrides.

Set different autonomy levels, response lengths, or quiet hours for Telegram vs Discord. Example: { "telegram": { "max_response_length": 2000 }, "discord": { "max_response_length": 4000 } }

plugin_tuning

Keyoku plugin parameters: recall limits, extraction batch size, heartbeat interval.

Autonomy level override. Example: { "recall_limit": 15, "heartbeat_interval_s": 120, "autonomy": "suggest" }

OpenClaw

More customizable files.

IDENTITY.md and SOUL.md are just the starting point. The bot runs on OpenClaw, which supports additional markdown files for hooks, tools, and agent behavior. See the OpenClaw Plugin documentation to learn about the full range of customizable files and capabilities available to your bot.

Ready to deploy?

Your bot is configured. Run the stack, test memory recall, and iterate on personality files until it feels right.

docker compose up -d