KinBot

May 19, 2026 · View on GitHub

KinBot

AI agents that actually remember you.

Self-hosted. Persistent memory. Real collaboration.

CI E2E Tests CodeQL GitHub Release GitHub Stars License: AGPL-3.0 Docker PRs Welcome

Website · Documentation · Quick Start · Features · Use Cases · Architecture · E2E Report · Discussions · Troubleshooting · Changelog · Contributing

Why KinBot?

Most AI tools treat every conversation as disposable. You explain yourself Monday, they forget by Tuesday.

KinBot is different. You create Kins — AI agents with:

🧠 Persistent memoryThey remember every conversation. Forever. Vector search + full-text across months of interactions.
🎭 Real identityName, role, personality, avatar. They know who they are and who you are.
🤝 CollaborationKins talk to each other, delegate tasks, spawn workers. A team, not a chatbot.
AutonomyCron jobs, webhooks, Telegram. They work while you sleep.
🏠 Self-hostedOne process. One SQLite file. Your data never leaves your server.

"Like having your own team of AI specialists that live on your server and never forget a thing."


✨ Features

🧠 Intelligence

Persistent memory (vector + full-text) · Knowledge base / RAG · Session compacting · Sub-agents · Inter-Kin communication · Continuous sessions that never reset

🔧 Automation & Extensibility

Cron jobs · Webhooks · HTTP requests · 6 channels (Telegram, Discord, Slack, WhatsApp, Signal, Matrix) · MCP servers · Custom tools · Mini Apps · Plugin system · Contacts · Notifications · Human-in-the-loop prompts · 23 AI providers (incl. Ollama) · Multi-provider auto-detection

🔒 Security & Privacy

AES-256-GCM vault · Auth with roles · Invitation system · 100% self-hosted · Your data never leaves your server

🎨 Experience

8 color palettes · Dark/Light/System themes · English & French · @mentions with autocomplete · File uploads · Image generation · Real-time SSE streaming

Full feature list

Kins

  • Persistent identity — each Kin has a name, description, character, expertise domain, model, and avatar
  • Continuous sessions — one session per Kin, never resets
  • Shared Kins — all users on the instance interact with the same Kins; messages are tagged with sender identity

Intelligence

  • Long-term memory — dual-channel: automatic extraction pipeline on every LLM turn + explicit remember() tool; hybrid search (vector similarity + full-text); query intent detection with category-aware score boosting; token-budgeted memory block in prompt
  • Knowledge base / RAG — upload documents and texts as reference material; hybrid search (vector + full-text) retrieves relevant chunks at query time
  • Session compacting — token-aware compaction with multi-summary accumulation and telescopic merge; original messages are always preserved
  • Sub-Kins (tasks) — Kins can delegate work to ephemeral sub-agents; await mode re-enters the parent queue with the result, async mode deposits it as informational
  • Inter-Kin communication — request/reply pattern with correlation IDs; rate-limited; replies are always informational (no ping-pong)

Automation

  • Cron jobs — in-process scheduler (croner); Kins can create their own crons (with user approval); searchable/filterable cron list; cron results appear in the main session
  • Webhooks — inbound webhooks to trigger Kins from external systems; configurable per-Kin
  • Channels — 6 platforms: Telegram, Discord, Slack, WhatsApp, Signal, Matrix
  • Notifications — Kins can send push notifications to users via the notify tool
  • Human-in-the-loop — Kins can prompt users for approval before sensitive actions (cron creation, MCP server management, etc.)

Security & Privacy

  • Vault — AES-256-GCM encrypted secrets; never exposed in prompts or logs; message redaction prevents leaking into compacted summaries
  • Authentication — Better Auth with HTTP-only cookie sessions; admin + member roles; invitation system
  • Self-hosted — your data never leaves your server

Extensibility

  • MCP servers — connect any Model Context Protocol server to extend Kins with external tools; Kins can manage their own MCP connections
  • Plugin system — extend KinBot with third-party plugins; plugins can register tools, hooks, AI providers, and channels; discover and install from npm via the built-in marketplace (any package tagged with the kinbot-plugin keyword); install from a Git URL for unpublished or private plugins; hot reload during development; managed via the UI with per-plugin configuration, encrypted secret storage, and enable/disable toggles; health monitoring with circuit breaker auto-disable; dependency management between plugins; version compatibility checking
  • Custom tools — Kins can create, register, and run their own scripts from their workspace
  • Mini Apps — Kins can build and deploy interactive web apps (HTML/CSS/JS) that live in the sidebar; auto-injected design system + JavaScript SDK with theme sync, toasts, inter-app navigation (openApp), dialogs (confirm/prompt), window title & badge control, persistent key-value storage (get/set/delete/list/clear), starter templates, parent-child event communication, and an App Gallery to browse and clone community apps
  • Contacts — manage contacts that Kins can reference and interact with
  • Multi-provider — 23 providers: Anthropic, Anthropic OAuth, OpenAI, Gemini, Mistral, DeepSeek, Groq, Together AI, Fireworks AI, Ollama, OpenRouter, Cohere, xAI, Voyage AI, Jina AI, Nomic, Tavily, Serper, Perplexity, Replicate, Stability AI, FAL AI, Brave Search

Experience

  • 8 color palettes — Aurora, Ocean, Forest, Sunset, Monochrome, Sakura, Neon, Lavender
  • Dark / Light / System theme modes
  • Internationalization — English and French
  • File uploads — share files with Kins; image generation supported
  • Real-time streaming — SSE-based, multiplexed across all Kins on a single connection
  • @mentions — mention Kins and users in messages with autocomplete and styled pills; mentioned Kins receive notifications
  • Responsive UI — mobile-friendly settings, contextual info tips, suggestion chips in empty chat states
  • System info — version, uptime, and stats visible in settings

Built-in Tools (120+)

Kins have access to a rich set of native tools out of the box, no configuration needed:

Memory & Knowledgerecall, memorize, update_memory, forget, list_memories, review_memories, search_history, search_knowledge, list_knowledge_sources

Web & Browsingweb_search, browse_url, extract_links, screenshot_url

Contactsget_contact, search_contacts, create_contact, update_contact, delete_contact, find_contact_by_identifier, set_contact_note

Vault & Secretsget_secret, create_secret, update_secret, delete_secret, search_secrets, redact_message, vault entries & attachments

Multi-Agentspawn_self, spawn_kin, send_message, reply, list_kins, report_to_parent, request_input, task management, create_kin, update_kin, delete_kin, get_kin_details

Automationcreate_cron, update_cron, delete_cron, list_crons, trigger_cron, get_cron_journal, wake_me_in, wake_me_every, cancel_wakeup, list_wakeups, webhooks (CRUD)

Mini Apps — create, update, delete, read/write files, snapshots, rollback, persistent key-value storage, browse & clone from the App Gallery, templates, docs, icon generation

Channelslist_channels, list_channel_conversations, send_channel_message

Custom Toolsregister_tool, run_custom_tool, list_custom_tools (Kins write and run their own scripts)

Filesystemread_file, write_file, edit_file, list_directory (read, create, edit, and browse files in the workspace)

Files & Imagesstore_file, get_stored_file, list_stored_files, search_stored_files, update_stored_file, delete_stored_file, attach_file, generate_image, list_image_models

Systemrun_shell, execute_sql, get_platform_logs, get_system_info, user management

MCPadd_mcp_server, update_mcp_server, remove_mcp_server, list_mcp_servers

HTTPhttp_request (make HTTP requests to external APIs with full method/header/body control)

Human-in-the-Loopprompt_human (ask user for approval before sensitive actions), notify (push notifications)

💡 What people build with KinBot

DevOps copilot — A Kin connected to GitHub webhooks triages new issues, reviews PRs, runs CI checks, and creates releases. It remembers your codebase conventions and past decisions. Cron jobs monitor infrastructure and alert you on Telegram.

Home automation brain — A Kin talks to Home Assistant via MCP, learns your routines over time, and adjusts lighting/heating based on context. Ask it "why was the heating on last night?" and it remembers.

Personal knowledge base — Upload docs, meeting notes, project specs. A Kin indexes everything with RAG and answers questions across months of accumulated context. Unlike ChatGPT, it never forgets previous conversations.

Multi-agent team — A dispatcher Kin receives requests and delegates to specialists (one for code, one for sysadmin, one for writing). They collaborate, share context through memories, and report back.

Business monitoring — Webhooks feed sales data, support tickets, or server metrics into a Kin. It builds mini-app dashboards, sends daily Slack summaries, and flags anomalies before you notice them.

Family assistant — Multiple users share the same instance. One Kin manages groceries via Telegram, another handles kids' schedules, another tracks household tasks. Each remembers everyone's preferences.


🚀 Quick Start

docker run -d --name kinbot -p 3000:3000 -v kinbot-data:/app/data ghcr.io/marlburrow/kinbot:latest

Open http://localhost:3000 — done. The onboarding wizard handles the rest.

Other install methods (one-liner script, Docker Compose, manual)

One-liner install (Linux / macOS)

curl -fsSL https://raw.githubusercontent.com/MarlBurroW/kinbot/main/install.sh | bash

This script will:

  1. Install Bun if not already present
  2. Clone the repository to /opt/kinbot
  3. Install dependencies and build the frontend
  4. Run database migrations
  5. Create a system service (systemd on Linux, launchd on macOS)
  6. Start KinBot on port 3000

Customizable via env vars:

KINBOT_DIR=/home/me/kinbot \
KINBOT_DATA_DIR=/home/me/kinbot-data \
KINBOT_PORT=8080 \
  bash <(curl -fsSL https://raw.githubusercontent.com/MarlBurroW/kinbot/main/install.sh)

Docker Compose

git clone https://github.com/MarlBurroW/kinbot.git
cd kinbot/docker
ENCRYPTION_KEY=$(openssl rand -hex 32) docker compose up -d

See docker/docker-compose.yml for full options.

Manual

git clone https://github.com/MarlBurroW/kinbot.git
cd kinbot
bun install
bun run build
bun run db:migrate
NODE_ENV=production bun run start

Architecture

                     ┌──────────────────────────────┐
                     │          Channels             │
                     │  Telegram · Discord · Slack   │
                     │  WhatsApp · Signal · Matrix   │
                     └──────────────┬───────────────┘

┌───────────────────────────────────┼───────────────────────────┐
│                   KinBot  (single process)                    │
│                                    │                          │
│  ┌──────────────────┐      ┌───────▼───────────────────────┐  │
│  │  React + Vite    │      │        Hono REST API          │  │
│  │  Tailwind 4      │◀────▶│        + SSE stream           │  │
│  │  shadcn/ui       │      └───────┬───────────────────────┘  │
│  └──────────────────┘              │                          │
│                                    │                          │
│    ┌───────────┬───────────┬───────────┬───────────┐          │
│    │           │           │           │           │          │
│  ┌─▼────────┐┌─▼────────┐┌─▼────────┐┌─▼────────┐┌─▼──────┐ │
│  │ Vercel   ││ Queue    ││ Croner   ││ Mini     ││Plugins │ │
│  │ AI SDK   ││ (FIFO)   ││(Cron     ││ Apps     ││        │ │
│  │ Kin      ││ per Kin  ││ jobs)    ││ + Tools  ││ tools  │ │
│  │ Engine   │└──────────┘└──────────┘└──────────┘│ hooks  │ │
│  └────┬─────┘                                    │providers│ │
│       │                                          │channels│ │
│       │                                          └────────┘ │
│  ┌────▼────────────────────────────────────────────────────┐ │
│  │           SQLite  (bun:sqlite + Drizzle ORM)            │ │
│  │           + FTS5 (full-text search)                     │ │
│  │           + sqlite-vec (vector similarity)              │ │
│  └─────────────────────────────────────────────────────────┘ │
└──────────┬───────────────────────────────────┬───────────────┘
           │                                   │
   AI Providers (23)                   Integrations
   Anthropic · OpenAI · Gemini          MCP servers
   Mistral · DeepSeek · Groq            Webhooks
   Ollama · OpenRouter · xAI            Custom tools
   Cohere · Together · Fireworks        Web browsing
   + embedding, image, search           Plugins (npm)

Key design principles:

  • Queue per Kin — one message processed at a time per Kin; user messages have priority over automated ones
  • Global SSE — one SSE connection per browser tab, multiplexed by kinId; no per-Kin polling
  • No message deletion — compacting compresses older messages into dated summaries that merge telescopically; original messages always preserved
  • Secrets stay in the vault — vault secrets are never exposed in prompts; redaction prevents leaking into summaries

Tech Stack

LayerTechnology
RuntimeBun
BackendHono, Drizzle ORM, bun:sqlite, sqlite-vec, Vercel AI SDK, Better Auth, croner
FrontendReact 19, Vite, Tailwind CSS 4, shadcn/ui, i18next
AI ProvidersAnthropic, OpenAI, Gemini, Mistral, DeepSeek, Groq, Together AI, Fireworks AI, Ollama, OpenRouter, Cohere, xAI, Voyage AI, Jina AI, Nomic, Tavily, Serper, Perplexity, Replicate, Stability AI, FAL AI, Brave Search
DatabaseSQLite (single file) + FTS5 + sqlite-vec

Configuration

Copy .env.example to .env and adjust as needed. All values have sensible defaults — you can start with an empty .env.

VariableDefaultDescription
PORT3333HTTP server port
HOST127.0.0.1Bind address (0.0.0.0 to expose on all interfaces)
KINBOT_DATA_DIR./dataPersistent data directory (DB, uploads, workspaces)
ENCRYPTION_KEY(auto-generated)64-char hex key for AES-256-GCM vault encryption. Auto-generated and persisted to data/.encryption-key on first run.
LOG_LEVELinfodebug | info | warn | error
PUBLIC_URLhttp://localhost:3333Public-facing URL (used in webhooks, invitation links)

See .env.example for the complete list of all options (compacting thresholds, memory tuning, queue settings, cron limits, web browsing, etc.).


Development

Prerequisites

  • Bun >= 1.0
  • Git

Setup

git clone https://github.com/MarlBurroW/kinbot.git
cd kinbot
bun install
bun run dev    # Starts Vite dev server (port 5173) + Hono backend (port 3333)

The dev server proxies API requests from port 5173 to 3333 automatically.

Commands

CommandDescription
bun run devStart dev servers (Vite + Hono with hot reload)
bun run buildProduction build (Vite → dist/client/)
bun run startStart production server
bun run db:generateGenerate a new Drizzle migration from schema changes
bun run db:migrateApply pending migrations to the SQLite database

Project structure

src/
  server/           # Bun + Hono backend
    routes/         # REST API routes (one file per resource)
    services/       # Business logic
    providers/      # AI provider implementations
    tools/          # Native tools exposed to Kins
    db/             # SQLite connection, Drizzle schema, migrations
    auth/           # Better Auth config + middleware
    sse/            # SSE manager
    config.ts       # Centralized configuration
  client/           # React + Vite frontend
    pages/          # Page components
    components/     # UI components (shadcn/ui + custom)
    hooks/          # Custom React hooks
    locales/        # i18n translation files (en.json, fr.json)
    styles/         # Design tokens + Tailwind config
  shared/           # Types and constants shared by client and server
    types.ts
    constants.ts
data/               # Created at runtime — SQLite DB, uploads, workspaces
plugins/            # Installed third-party plugins (each with plugin.json + main entry)
docker/             # Dockerfile + docker-compose.yml
site/               # GitHub Pages landing site

Adding a new language

  1. Copy src/client/locales/en.json to src/client/locales/<lang>.json
  2. Translate all values (keys must remain identical)
  3. Register the language in src/client/lib/i18n.ts

⚙️ Environment Variables

All settings have sensible defaults. Override only what you need.

Full configuration reference

Core

VariableDefaultDescription
PORT3333HTTP server port
HOST127.0.0.1Bind address (0.0.0.0 to expose externally)
NODE_ENVdevelopmentSet to production for optimized builds
PUBLIC_URLhttp://localhost:{PORT}Public-facing URL (for OAuth callbacks, webhooks)
KINBOT_DATA_DIR./dataData directory (DB, uploads, workspaces)
ENCRYPTION_KEYAuto-generatedAES-256 key for vault encryption. Auto-generated and persisted on first run. Must be preserved across restarts.
LOG_LEVELinfoLog verbosity: debug, info, warn, error
DB_PATH{dataDir}/kinbot.dbSQLite database file path

Memory & Compacting

VariableDefaultDescription
COMPACTING_THRESHOLD_PERCENT75Context usage % before compaction triggers
COMPACTING_KEEP_PERCENT40% of context window preserved as raw messages
COMPACTING_SUMMARY_BUDGET_PERCENT20Max % of context for summaries before telescopic merge
COMPACTING_MAX_SUMMARIES10Max active summaries before telescopic merge
COMPACTING_MAX_SUMMARIES_PER_KIN50Total summary retention per Kin (active + archived)
COMPACTING_MODELProvider defaultOverride the model used for session compacting
MEMORY_EXTRACTION_MODELProvider defaultOverride the model used for memory extraction
MEMORY_MAX_RELEVANT10Max relevant memories injected into context
MEMORY_SIMILARITY_THRESHOLD0.7Minimum cosine similarity for memory retrieval
MEMORY_EMBEDDING_MODELtext-embedding-3-smallEmbedding model for memory vectors
MEMORY_EMBEDDING_DIMENSION1536Vector dimension for embeddings
MEMORY_TOKEN_BUDGET0Max tokens for memory block in prompt (0 = unlimited)
MEMORY_RERANK_MODELProvider defaultCross-encoder rerank model (Cohere, Jina) for memory retrieval
MEMORY_CONSOLIDATION_MODELProvider defaultModel used for memory consolidation
MEMORY_CONSOLIDATION_SIMILARITY0.85Cosine similarity threshold for merging duplicate memories
MEMORY_CONSOLIDATION_MAX_GEN5Max consolidation generations per run
MEMORY_MULTI_QUERY_MODELProvider defaultModel for multi-query expansion during recall
MEMORY_HYDE_MODELProvider defaultModel for HyDE (hypothetical document embedding) queries
MEMORY_CONTEXTUAL_REWRITE_MODELProvider defaultModel for contextual memory rewriting
MEMORY_CONTEXTUAL_REWRITE_THRESHOLD80Token threshold to trigger contextual rewrite
MEMORY_ADAPTIVE_KtrueEnable adaptive K (dynamic result count based on score distribution)
MEMORY_ADAPTIVE_K_MIN_SCORE_RATIO0.3Minimum score ratio for adaptive K cutoff
MEMORY_RRF_K60Reciprocal Rank Fusion K parameter for hybrid search
MEMORY_FTS_BOOST0.5Full-text search score boost factor
MEMORY_SUBJECT_BOOST1.3Score boost for subject-matching memories
MEMORY_CATEGORY_BOOST1.25Score boost for category-matching memories
MEMORY_TEMPORAL_DECAY_LAMBDA0.01Temporal decay rate (higher = faster decay)
MEMORY_TEMPORAL_DECAY_FLOOR0.7Minimum score multiplier from temporal decay
HISTORY_TOKEN_BUDGET40000Max tokens for conversation history in context

Tasks & Queues

VariableDefaultDescription
QUEUE_POLL_INTERVAL500Queue polling interval in ms
TASKS_MAX_DEPTH3Maximum sub-task nesting depth
TASKS_MAX_REQUEST_INPUT3Max concurrent task requests per input
TASKS_MAX_CONCURRENT10Max concurrent tasks globally
TOOLS_MAX_STEPS10Max tool call steps per LLM turn

Cron & Automation

VariableDefaultDescription
CRONS_MAX_ACTIVE50Max active cron jobs
CRONS_MAX_CONCURRENT_EXEC5Max concurrent cron executions

Inter-Kin Communication

VariableDefaultDescription
INTER_KIN_MAX_CHAIN_DEPTH5Max chain depth for Kin-to-Kin messages
INTER_KIN_RATE_LIMIT20Max inter-Kin messages per minute

Channels & Webhooks

VariableDefaultDescription
CHANNELS_MAX_PER_KIN5Max channel connections per Kin
WEBHOOKS_MAX_PER_KIN20Max webhooks per Kin
WEBHOOKS_MAX_PAYLOAD_BYTES1048576Max webhook payload size (1 MB)
WEBHOOKS_LOG_RETENTION_DAYS30Webhook execution log retention period
WEBHOOKS_MAX_LOGS_PER_WEBHOOK500Max stored execution logs per webhook
WEBHOOKS_RATE_LIMIT_PER_MINUTE60Max webhook executions per minute

File Storage & Uploads

VariableDefaultDescription
UPLOAD_DIR{dataDir}/uploadsUpload directory
UPLOAD_MAX_FILE_SIZE50Max upload size in MB
UPLOAD_CHANNEL_RETENTION_DAYS30Channel file retention period in days
UPLOAD_CHANNEL_CLEANUP_INTERVAL60Channel file cleanup interval in minutes
FILE_STORAGE_DIR{dataDir}/storageKin file storage directory
FILE_STORAGE_MAX_SIZE100Max file size in MB
FILE_STORAGE_CLEANUP_INTERVAL60Cleanup interval in minutes

Vault

VariableDefaultDescription
VAULT_ATTACHMENT_DIR{dataDir}/vaultVault attachment directory
VAULT_MAX_ATTACHMENT_SIZE50Max attachment size in MB
VAULT_MAX_ATTACHMENTS_PER_ENTRY10Max attachments per vault entry

Workspaces & Mini Apps

VariableDefaultDescription
WORKSPACE_BASE_DIR{dataDir}/workspacesKin workspace base directory
MINI_APPS_DIR{dataDir}/mini-appsMini apps storage directory
MINI_APPS_MAX_PER_KIN20Max mini apps per Kin
MINI_APPS_MAX_FILE_SIZE5Max single file size in MB
MINI_APPS_MAX_TOTAL_SIZE50Max total size per app in MB
MINI_APPS_BACKEND_ENABLEDtrueEnable mini app backend execution

Web Browsing

VariableDefaultDescription
WEB_BROWSING_PAGE_TIMEOUT30000Page load timeout in ms
WEB_BROWSING_MAX_CONTENT_LENGTH100000Max extracted content length
WEB_BROWSING_MAX_CONCURRENT5Max concurrent fetches
WEB_BROWSING_USER_AGENTKinBot defaultCustom User-Agent string
WEB_BROWSING_BLOCKED_DOMAINS(empty)Comma-separated blocked domains
WEB_BROWSING_PROXY(none)HTTP proxy for web requests
WEB_BROWSING_HEADLESS_ENABLEDfalseEnable headless browser (Puppeteer)
PUPPETEER_EXECUTABLE_PATHAuto-detectedChrome/Chromium path for headless mode
WEB_BROWSING_MAX_BROWSERS2Max concurrent browser instances
WEB_BROWSING_BROWSER_IDLE_TIMEOUT60000Browser idle timeout in ms

MCP & Human-in-the-Loop

VariableDefaultDescription
MCP_REQUIRE_APPROVALtrueRequire user approval for MCP server management
HUMAN_PROMPTS_MAX_PENDING5Max pending human-in-the-loop prompts per Kin

Sessions & Invitations

VariableDefaultDescription
QUICK_SESSION_EXPIRATION_HOURS24Quick session expiration time
QUICK_SESSION_MAX_PER_USER_KIN1Max active quick sessions per user per Kin
QUICK_SESSION_RETENTION_DAYS7Quick session data retention
QUICK_SESSION_CLEANUP_INTERVAL60Cleanup interval in minutes
INVITATION_DEFAULT_EXPIRY_DAYS7Default invitation link expiry
INVITATION_MAX_ACTIVE50Max active invitations

Notifications

VariableDefaultDescription
NOTIFICATIONS_RETENTION_DAYS30Notification retention period
NOTIFICATIONS_MAX_PER_USER500Max stored notifications per user
NOTIFICATIONS_EXT_MAX_PER_USER5Max external notification endpoints per user
NOTIFICATIONS_EXT_RATE_LIMIT5External notification rate limit per minute
NOTIFICATIONS_EXT_MAX_ERRORS5Max consecutive errors before disabling endpoint

Wakeups

VariableDefaultDescription
WAKEUPS_MAX_PENDING_PER_KIN20Max pending wakeups per Kin

Version Check

VariableDefaultDescription
VERSION_CHECK_ENABLEDfalseEnable automatic version checking
VERSION_CHECK_REPOMarlBurroW/kinbotGitHub repo to check for new releases
VERSION_CHECK_INTERVAL_HOURS12Hours between version checks

🔧 Troubleshooting

Common issues and solutions

Port already in use

Error: listen EADDRINUSE :::3000

Another process is using port 3000. Either stop it or change KinBot's port:

PORT=3001 bun src/server/index.ts
# or with Docker:
docker run -d -p 3001:3000 ghcr.io/marlburrow/kinbot:latest

Database migration errors after update

If you see migration errors after updating KinBot:

# Backup first
cp data/kinbot.db data/kinbot.db.bak

# Re-run migrations
bun run db:migrate

Docker container won't start

Check logs for details:

docker logs kinbot

Common causes:

  • Permission issues on volume: Ensure the data directory is writable (chmod 777 ./data or match UID)
  • Missing encryption key: If you previously set ENCRYPTION_KEY, you must provide it on every restart (vault data is encrypted with it)

Provider connection fails

  • Verify your API key is correct and has sufficient credits
  • For self-hosted providers (Ollama), ensure the base URL is reachable from the KinBot container (use host.docker.internal or the host's LAN IP, not localhost)
  • Check provider status pages for outages

Memory search returns no results

Memory extraction runs asynchronously after each LLM turn. If you just started a conversation:

  • Wait a few seconds for the extraction pipeline to complete
  • Check that you have an embedding provider configured in Settings > Providers

Blank page / frontend not loading

# Rebuild the frontend
bun run build

# Then restart
bun src/server/index.ts

For Docker, pull the latest image which includes pre-built frontend assets.

Generate a diagnostic report

If you're stuck, generate a report to include in bug reports:

bash install.sh --doctor

💬 Community & Support

If KinBot is useful to you, consider starring the repo — it helps others discover the project.

Contributing

Contributions are welcome! See CONTRIBUTING.md for the full guide: setup, adding providers/channels, code style, and commit conventions.

Quick version:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feat/my-feature
  3. Follow existing code conventions:
    • Files: kebab-case.ts / Components: PascalCase.tsx
    • Shared types in src/shared/types.ts; shared constants in src/shared/constants.ts
    • API errors: { "error": { "code": "ERROR_CODE", "message": "..." } }
    • Never hardcode user-facing text — always use useTranslation() and add keys to both en.json and fr.json
  4. Open a Pull Request with a clear description

Design system

The UI is built on a custom design system with 8 palettes and full dark/light mode support. Before building any new UI:

  • Consult src/client/pages/design-system/DesignSystemPage.tsx (live showcase, source of truth)
  • Use semantic CSS variables (var(--color-*)) or Tailwind tokens — never hardcode colors
  • Reuse components from src/client/components/ui/

License

KinBot is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).

You are free to use, modify, and distribute KinBot. However, if you deploy a modified version as a network service, you must also make your source code available under the same license. This protects against cloud-washing while keeping the project fully open.

For commercial use cases where the AGPL obligations are not compatible with your business, a commercial license is available — open an issue to discuss.


Made with care · marlburrow