"Self-hosted, Kubernetes-native AI assistant platform. Multi-tenant, model-agnostic, runs on your infrastructure."
See the code
IT-managed, multi-tenant AI assistant platform for small business and enterprise. KClaw gives your team a Chief of Staff and researcher — integrating Google Workspace, Slack,calendar, drive, and office tools via a personalized AI assistant per user. Scales to 30 agents on existing Kubernetes infrastructure, managed entirely by IT.
Built for organizations that need governance, data sovereignty, and cost control — not a personal agent running on someone's workstation.
Why KClaw instead of Claude Managed Agents or Microsoft Copilot:
┌─────────────────────────────────────────────────────────────────────────┐
│ Kubernetes Cluster (kclaw namespace) │
│ │
│ ┌─────────────────┐ ┌───────────────────────────────────────────┐ │
│ │ KClaw Admin UI │ │ Orchestrator │ │
│ │ (kclaw-admin- │ │ - Channels (Slack) │ │
│ │ ui.local) │ │ - Message routing & Pod lifecycle │ │
│ │ - Dashboard │ │ - Task scheduler + CronJob │ │
│ │ - IAM / RBAC │ │ - Real-time Observability (K8s Watch API)│ │
│ │ - Tenants │ │ - Admin API (port 3002) │ │
│ │ - Teams │ └────────────┬──────────────────────────────┘ │
│ │ - MCP servers │ │ HTTP POST /message │
│ │ - Vault │ ↓ │
│ │ - Sessions │ ┌───────────────────────────────────────────┐ │
│ └────────┬────────┘ │ Agent Pod (per user/group) │ │
│ │ │ - Claude Agent SDK & HTTP server :3000 │ │
│ │ REST │ - MCP servers (stdio/SSE) │ │
│ ↓ │ - Local SQLite Storage (gtd.db) │ │
│ ┌─────────────────┐ │ - POST /reload endpoint │ │
│ │ CredRouter │←──┤ ┌─────────────────────────────────────┐ │ │
│ │ - IAM (JWT) │ │ │ Shared PVCs (subPath mounts) │ │ │
│ │ - Tenant vault │ │ │ - Team Skills │ │ │
│ │ - Team config │ │ │ - Private Agent State │ │ │
│ │ - MCP configs │ │ └─────────────────────────────────────┘ │ │
│ │ - Token limits │ └───────────────────────────────────────────┘ │
│ └─────────────────┘ │
│ LiteLLM → Bedrock / Anthropic API / OpenRouter │
└─────────────────────────────────────────────────────────────────────────┘
| Component | Image | Port | Ingress |
|---|---|---|---|
| CredRouter | YOUR_REGISTRY/kubeclaw-credrouter:latest | 3001 (internal) | — |
| Orchestrator | YOUR_REGISTRY/kubeclaw-orchestrator:latest | 8787, 3002 | kubeclaw-admin.local |
| Admin UI | YOUR_REGISTRY/kclaw-admin-ui:latest | 3003 | kclaw-admin-ui.local |
| Agent pods | YOUR_REGISTRY/kubeclaw-agent:latest | 3000 (internal) | — |
kclawkubernetes.io/hostname (agents pin to same node for hostPath access)--dangerously-skip-permissions as root)Native Claude Code Skill Compatibility
Model Support (via LiteLLM)
Messaging & Intelligence
application/pdf parsing routed dynamically to Claude 3.5/4.x document blocksCredential & Config Management (CredRouter)
Admin UI (http://kclaw-admin-ui.local)
Data, Storage & Skills
gtd.db (SQLite) per agent pod for durable GTD task trackingsubPath mounts) for private agent stateRouting & Observability
Scheduled Tasks
ScheduleTask MCP tool to persist tasks to diskClick Create New App and select From scratch.
Enter your app name (we suggest G-eves but you can use any name) and select your target Slack workspace.
Click Create App.
Get the app Token starts with xapp-???????????? and keep it for latter.
Scroll back up and click Install to Workspace, then authorize the app.
Goto Oauth & Permission on the right side under Features
Copy your Bot User OAuth Token (xoxb-...) and keep it secret.
Now on the right click the App Manifest to configure your apps behavior.
Apply the following app manifest to your Slack application. Update the name fields if you chose a different name.
{
"display_information": {
"name": "G-eves",
"description": "Personal AI Assistant"
},
"features": {
"app_home": {
"home_tab_enabled": false,
"messages_tab_enabled": true,
"messages_tab_read_only_enabled": false
},
"bot_user": {
"display_name": "G-eves",
"always_online": true
},
"slash_commands": [
{
"command": "/reload",
"description": "reloads config",
"should_escape": false
},
{
"command": "/reset",
"description": "Clears the context",
"should_escape": false
}
]
},
"oauth_config": {
"scopes": {
"bot": [
"users:read.email",
"channels:history",
"channels:read",
"chat:write",
"commands",
"files:read",
"files:write",
"groups:history",
"groups:read",
"im:history",
"im:read",
"users:read"
]
},
"pkce_enabled": false
},
"settings": {
"event_subscriptions": {
"bot_events": [
"message.channels",
"message.groups",
"message.im"
]
},
"interactivity": {
"is_enabled": true
},
"org_deploy_enabled": false,
"socket_mode_enabled": true,
"token_rotation_enabled": false,
"is_mcp_enabled": false
}
}
Before you begin, collect:
xoxb-…) and App Token (xapp-…)The installer (kclaw-installer.tar.gz) is included in this repository. Extract and run it on your target server:
# Clone the repo
git clone https://github.com/info-struct/kclaw
cd kclaw
# Extract the installer
tar -xvf kclaw-installer.tar.gz
cd kubeclaw-installer
# Run the interactive installer as root
sudo ./scripts/install.sh
The installer will prompt for your credentials and automatically provision k3s, Helm, LiteLLM, PostgreSQL, and all KClaw components.
Verify the installer tarball before running it:
md5sum -c ../md5sum-kclaw-installer.gz.txt
When the installer completes, it writes an install-summary.txt file in the installer directory. This file contains all generated secrets, your admin credentials, and internal service URLs. Keep this file secure and do not commit it — it is automatically added to .gitignore.
ADMIN_UI_URL=http://<your-node-ip>
ADMIN_EMAIL=you@example.com
ADMIN_TEMP_PASSWORD=<generated>
LITELLM_MASTER_KEY=<generated>
...
For external access, expose the Admin UI (port 3003) using one of:
Change your admin password on first login.
This guide covers how to set up Teams in the K-Claw Admin UI. Teams allow you to group tenants (users/bots), manage shared MCP servers, and configure team-level variables. K-Claw can automatically provision underlying Kubernetes Persistent Volume Claims (PVCs) for team-wide storage sharding.
/admin/teams).Click the + Create Team button in the top right.
Fill out the team details:
Engineering or Marketing).engineering). This is used for internal routing and storage paths.Click Create Team.
If the team is created successfully but the PVC fails to provision immediately (e.g., due to cluster resource limits), you will receive a "PVC warning". The team will still be created, but you may need to check the Kubernetes cluster events to resolve the storage binding.
Once created, you can click Manage → next to the team in the list to configure shared MCP servers and Config Keys for the team.
This guide explains how to invite and provision new users (and their associated agent tenants) using the K-Claw Admin UI Wizard.
To onboard a new user, navigate to the Settings or Users area of the Admin UI and click to open the Add User Wizard.
The provisioning process handles Identity, Tenant (Bot) assignment, Provider setup, and Invite link generation in one streamlined flow.
Alice Smith).User, Team Lead, or Admin.You must decide how this user will interact with the system:
Alice's Bot).alices-bot). Used for internal routing and storage paths.team-setup.md). This grants the agent access to the team's shared PVC storage and MCP servers.Configure the LLM provider for the new tenant. K-Claw provides presets to speed this up:
LiteLLM (cluster proxy) or Anthropic (direct).
claude-sonnet-4-6.http://litellm-service.default.svc.cluster.local:4000).KClaw FSL-1.1-ALv2
See LICENSE for full terms.
27 commits
"Self-hosted, Kubernetes-native AI assistant platform. Multi-tenant, model-agnostic, runs on your infrastructure."
See the code
IT-managed, multi-tenant AI assistant platform for small business and enterprise. KClaw gives your team a Chief of Staff and researcher — integrating Google Workspace, Slack,calendar, drive, and office tools via a personalized AI assistant per user. Scales to 30 agents on existing Kubernetes infrastructure, managed entirely by IT.
Built for organizations that need governance, data sovereignty, and cost control — not a personal agent running on someone's workstation.
Why KClaw instead of Claude Managed Agents or Microsoft Copilot:
┌─────────────────────────────────────────────────────────────────────────┐
│ Kubernetes Cluster (kclaw namespace) │
│ │
│ ┌─────────────────┐ ┌───────────────────────────────────────────┐ │
│ │ KClaw Admin UI │ │ Orchestrator │ │
│ │ (kclaw-admin- │ │ - Channels (Slack) │ │
│ │ ui.local) │ │ - Message routing & Pod lifecycle │ │
│ │ - Dashboard │ │ - Task scheduler + CronJob │ │
│ │ - IAM / RBAC │ │ - Real-time Observability (K8s Watch API)│ │
│ │ - Tenants │ │ - Admin API (port 3002) │ │
│ │ - Teams │ └────────────┬──────────────────────────────┘ │
│ │ - MCP servers │ │ HTTP POST /message │
│ │ - Vault │ ↓ │
│ │ - Sessions │ ┌───────────────────────────────────────────┐ │
│ └────────┬────────┘ │ Agent Pod (per user/group) │ │
│ │ │ - Claude Agent SDK & HTTP server :3000 │ │
│ │ REST │ - MCP servers (stdio/SSE) │ │
│ ↓ │ - Local SQLite Storage (gtd.db) │ │
│ ┌─────────────────┐ │ - POST /reload endpoint │ │
│ │ CredRouter │←──┤ ┌─────────────────────────────────────┐ │ │
│ │ - IAM (JWT) │ │ │ Shared PVCs (subPath mounts) │ │ │
│ │ - Tenant vault │ │ │ - Team Skills │ │ │
│ │ - Team config │ │ │ - Private Agent State │ │ │
│ │ - MCP configs │ │ └─────────────────────────────────────┘ │ │
│ │ - Token limits │ └───────────────────────────────────────────┘ │
│ └─────────────────┘ │
│ LiteLLM → Bedrock / Anthropic API / OpenRouter │
└─────────────────────────────────────────────────────────────────────────┘
| Component | Image | Port | Ingress |
|---|---|---|---|
| CredRouter | YOUR_REGISTRY/kubeclaw-credrouter:latest | 3001 (internal) | — |
| Orchestrator | YOUR_REGISTRY/kubeclaw-orchestrator:latest | 8787, 3002 | kubeclaw-admin.local |
| Admin UI | YOUR_REGISTRY/kclaw-admin-ui:latest | 3003 | kclaw-admin-ui.local |
| Agent pods | YOUR_REGISTRY/kubeclaw-agent:latest | 3000 (internal) | — |
kclawkubernetes.io/hostname (agents pin to same node for hostPath access)--dangerously-skip-permissions as root)Native Claude Code Skill Compatibility
Model Support (via LiteLLM)
Messaging & Intelligence
application/pdf parsing routed dynamically to Claude 3.5/4.x document blocksCredential & Config Management (CredRouter)
Admin UI (http://kclaw-admin-ui.local)
Data, Storage & Skills
gtd.db (SQLite) per agent pod for durable GTD task trackingsubPath mounts) for private agent stateRouting & Observability
Scheduled Tasks
ScheduleTask MCP tool to persist tasks to diskClick Create New App and select From scratch.
Enter your app name (we suggest G-eves but you can use any name) and select your target Slack workspace.
Click Create App.
Get the app Token starts with xapp-???????????? and keep it for latter.
Scroll back up and click Install to Workspace, then authorize the app.
Goto Oauth & Permission on the right side under Features
Copy your Bot User OAuth Token (xoxb-...) and keep it secret.
Now on the right click the App Manifest to configure your apps behavior.
Apply the following app manifest to your Slack application. Update the name fields if you chose a different name.
{
"display_information": {
"name": "G-eves",
"description": "Personal AI Assistant"
},
"features": {
"app_home": {
"home_tab_enabled": false,
"messages_tab_enabled": true,
"messages_tab_read_only_enabled": false
},
"bot_user": {
"display_name": "G-eves",
"always_online": true
},
"slash_commands": [
{
"command": "/reload",
"description": "reloads config",
"should_escape": false
},
{
"command": "/reset",
"description": "Clears the context",
"should_escape": false
}
]
},
"oauth_config": {
"scopes": {
"bot": [
"users:read.email",
"channels:history",
"channels:read",
"chat:write",
"commands",
"files:read",
"files:write",
"groups:history",
"groups:read",
"im:history",
"im:read",
"users:read"
]
},
"pkce_enabled": false
},
"settings": {
"event_subscriptions": {
"bot_events": [
"message.channels",
"message.groups",
"message.im"
]
},
"interactivity": {
"is_enabled": true
},
"org_deploy_enabled": false,
"socket_mode_enabled": true,
"token_rotation_enabled": false,
"is_mcp_enabled": false
}
}
Before you begin, collect:
xoxb-…) and App Token (xapp-…)The installer (kclaw-installer.tar.gz) is included in this repository. Extract and run it on your target server:
# Clone the repo
git clone https://github.com/info-struct/kclaw
cd kclaw
# Extract the installer
tar -xvf kclaw-installer.tar.gz
cd kubeclaw-installer
# Run the interactive installer as root
sudo ./scripts/install.sh
The installer will prompt for your credentials and automatically provision k3s, Helm, LiteLLM, PostgreSQL, and all KClaw components.
Verify the installer tarball before running it:
md5sum -c ../md5sum-kclaw-installer.gz.txt
When the installer completes, it writes an install-summary.txt file in the installer directory. This file contains all generated secrets, your admin credentials, and internal service URLs. Keep this file secure and do not commit it — it is automatically added to .gitignore.
ADMIN_UI_URL=http://<your-node-ip>
ADMIN_EMAIL=you@example.com
ADMIN_TEMP_PASSWORD=<generated>
LITELLM_MASTER_KEY=<generated>
...
For external access, expose the Admin UI (port 3003) using one of:
Change your admin password on first login.
This guide covers how to set up Teams in the K-Claw Admin UI. Teams allow you to group tenants (users/bots), manage shared MCP servers, and configure team-level variables. K-Claw can automatically provision underlying Kubernetes Persistent Volume Claims (PVCs) for team-wide storage sharding.
/admin/teams).Click the + Create Team button in the top right.
Fill out the team details:
Engineering or Marketing).engineering). This is used for internal routing and storage paths.Click Create Team.
If the team is created successfully but the PVC fails to provision immediately (e.g., due to cluster resource limits), you will receive a "PVC warning". The team will still be created, but you may need to check the Kubernetes cluster events to resolve the storage binding.
Once created, you can click Manage → next to the team in the list to configure shared MCP servers and Config Keys for the team.
This guide explains how to invite and provision new users (and their associated agent tenants) using the K-Claw Admin UI Wizard.
To onboard a new user, navigate to the Settings or Users area of the Admin UI and click to open the Add User Wizard.
The provisioning process handles Identity, Tenant (Bot) assignment, Provider setup, and Invite link generation in one streamlined flow.
Alice Smith).User, Team Lead, or Admin.You must decide how this user will interact with the system:
Alice's Bot).alices-bot). Used for internal routing and storage paths.team-setup.md). This grants the agent access to the team's shared PVC storage and MCP servers.Configure the LLM provider for the new tenant. K-Claw provides presets to speed this up:
LiteLLM (cluster proxy) or Anthropic (direct).
claude-sonnet-4-6.http://litellm-service.default.svc.cluster.local:4000).KClaw FSL-1.1-ALv2
See LICENSE for full terms.
27 commits