MCPcopy Index your code
hub / github.com/Hesper-Labs/owly

github.com/Hesper-Labs/owly @v0.2.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.2 ↗ · + Follow
555 symbols 1,223 edges 165 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Owly

Features · Screenshots · Quick Start · Configuration · API · Tech Stack · Wiki · Roadmap

CI License Version Tests Helm Node TypeScript Next.js PostgreSQL PRs Welcome

Owly Demo


What is Owly?

Owly is a self-hosted AI customer support agent that small businesses and individuals can run on their own machines -- completely free. Connect your WhatsApp, Email, and Phone channels, add your business knowledge, and let the AI handle customer inquiries 24/7. Owly automatically identifies customers across channels -- someone who emails first and later calls gets a unified profile with full conversation history.

Zero Cost No monthly fees. You only pay for AI API usage. Your Data, Your Server Everything runs on your machine. Complete privacy. Multi-Channel WhatsApp, Email, and Phone from a single dashboard. 5-Minute Setup Docker Compose or npm. Guided setup wizard.

Features

Multi-Channel Support

Connect all your customer communication channels in one place.

WhatsApp

Connect via QR code scan or Business API. Handles text, images, voice messages, and documents.

Email

IMAP/SMTP with any provider. Branded HTML templates with automatic thread tracking.

Phone

Twilio Voice with OpenAI Whisper (STT) and ElevenLabs (TTS) for natural voice conversations.

Channel Management

Connect and manage all channels from one screen

AI-Powered Conversations

Owly uses OpenAI GPT (extensible to Claude, Ollama) with your knowledge base to provide accurate, on-brand responses. During conversations, the AI can autonomously:

  • Create tickets when customers report problems
  • Route issues to the right department based on expertise matching
  • Send internal emails to notify team members about urgent issues
  • Look up customer history for context-aware support
  • Trigger webhooks to notify external systems
  • Schedule follow-ups for proactive customer care

Conversations

Unified inbox with conversation thread and admin takeover

Customer CRM & Cross-Channel Continuity

Every customer gets a unified profile across all channels -- conversations, notes, tags, and contact history in one place. Owly automatically resolves customer identity when someone switches channels (WhatsApp to Email to Phone), keeping the full context available to both the AI and your team.

Customer Management

Customer profiles with notes, tags, and cross-channel history

Knowledge Base

Train your AI with your business information. Organize entries into categories, set priorities, and test responses before going live.

Knowledge Base Categories Categories with entry counts and color coding Knowledge Base Entries Entries with priority levels and active toggles

Automation Engine

Automate repetitive tasks with rule-based automation, business hours, SLA tracking, and canned responses.

Automation Rules Auto-route, auto-tag, auto-reply, keyword alerts Canned Responses Quick reply templates with shortcuts
Business Hours Weekly schedule with timezone and offline messages SLA Rules Response time targets per channel and priority

Team & Ticket Management

Organize your team into departments, track issues with a full ticket system, and monitor performance.

Team Management Departments, members, expertise, and availability Ticket System Priority levels, assignments, and status tracking

Analytics & Insights

Monitor your support performance with charts, metrics, and team performance tracking.

Analytics Dashboard

Conversation trends, channel breakdown, ticket distribution, and satisfaction scores

Administration & API

Manage users, API keys, webhooks, and explore the full REST API with interactive documentation.

Administration Multi-admin with roles and API key management API Documentation Interactive API docs with live request testing

Dark Mode

Full dark theme with persistent preference, applied across all 19 pages.

Dark Mode

Dark mode dashboard with consistent styling across all components

More Features

Settings 6-tab settings: General, AI, Voice, Phone, Email, WhatsApp Webhooks Webhook management with payload preview and testing

Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+

Option 1: npm

# Clone the repository
git clone https://github.com/hsperus/owly.git
cd owly

# Install dependencies
npm install

# Set up environment
cp .env.example .env
# Edit .env with your database URL and API keys

# Run database migrations
npx prisma migrate dev

# (Optional) Load sample data with a default admin account
npm run db:seed
# Default login: username=admin, password=admin123

# Start the development server
npm run dev

Option 2: Docker Compose

git clone https://github.com/hsperus/owly.git
cd owly

cp .env.example .env
# Edit .env with your API keys

docker compose up -d

Open http://localhost:3000 -- the setup wizard will guide you through the initial configuration.

Login Page

Clean login page with Owly branding


Configuration

All configuration is done through the admin dashboard -- no config files to edit after initial setup:

Setting Location Description
Business profile Settings > General Name, description, welcome message, tone
AI provider Settings > AI Configuration OpenAI / Claude / Ollama, model, API key
Voice Settings > Voice ElevenLabs API key and voice selection
Phone Settings > Phone Twilio Account SID, auth token, phone number
Email Settings > Email SMTP and IMAP server configuration
WhatsApp Channels > WhatsApp QR code scan or Business API
Team Team Departments, members, expertise areas
SLA SLA Rules Response and resolution time targets
Schedule Business Hours Weekly availability and offline messages
Automation Automation Auto-route, auto-tag, auto-reply rules
Templates Canned Responses Pre-written reply templates
Integrations Webhooks External service connections

API

Owly provides a full REST API with OpenAPI 3.0 spec at /api/openapi.json. Interactive documentation with live testing is available at /api-docs in the dashboard. All list endpoints are paginated (max 100/page) with standardized response format.

# Send a message and get AI response
curl -X POST http://localhost:3000/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "What are your business hours?", "channel": "api"}'

# Response:
# {"conversationId": "...", "response": "We are open Monday to Friday, 9 AM to 6 PM..."}
# Health check (database, OpenAI, memory, uptime)
curl http://localhost:3000/api/health
# {"status": "ok", "version": "0.2.1", "services": {"database": "connected", "openai": "reachable"}, ...}

Every API response includes enterprise headers: X-Request-Id, X-RateLimit-Limit, X-RateLimit-Remaining, X-API-Version.

View all endpoints

Method Endpoint Description
POST /api/chat Send message, get AI response
GET POST /api/conversations List or create conversations
GET PUT DELETE /api/conversations/:id Manage a conversation
POST /api/conversations/:id/messages Add message (admin takeover)
POST /api/conversations/:id/satisfaction Rate conversation (1-5)
POST /api/conversations/:id/notes Add internal note
GET POST /api/customers List or create customers
GET PUT DELETE /api/customers/:id Manage a customer
GET /api/customers/:id/conversations Cross-channel conversation timeline
GET POST /api/tickets List or create tickets
GET PUT DELETE /api/tickets/:id Manage a ticket
GET POST /api/knowledge/categories Knowledge categories
GET POST /api/knowledge/entries Knowledge entries
POST /api/knowledge/test Test AI with a question
GET PUT /api/settings Application settings
GET /api/analytics?period=7d Analytics data
GET /api/export?type=conversations&format=csv Export (CSV/JSON)
GET POST /api/automation Automation rules
GET PUT /api/business-hours Business hours config
GET POST /api/sla SLA rules
GET POST /api/canned-responses Canned responses
GET POST /api/webhooks Webhook management
POST /api/webhooks/test Test a webhook
GET POST /api/webhooks/:id/deliveries Delivery log and retry
GET POST /api/admin/users Admin user management
GET POST /api/admin/api-keys API key management
GET /api/activity Activity audit log
GET /api/health Health check
GET /api/openapi.json OpenAPI 3.0 specification

Tech Stack

Layer Technology
Framework Next.js 16 (App Router)
Language TypeScript 5
Database PostgreSQL 16 + Prisma 7
UI Tailwind CSS 4 + Radix UI
AI OpenAI GPT (extensible to Claude, Ollama)
Voice TTS ElevenLabs
Voice STT OpenAI Whisper
Phone Twilio Voice API
WhatsApp whatsapp-web.js
Auth JWT + bcrypt (12 rounds)
Validation Zod schemas on all endpoints
Testing Vitest (274 tests)
Charts Pure CSS/SVG (zero dependencies)
Deployment Docker Compose / K

Extension points exported contracts — how you extend this code

ErrorBoundaryProps (Interface)
(no doc)
src/components/error-boundary.tsx
CampaignSegment (Interface)
(no doc)
src/lib/campaigns.ts
Endpoint (Interface)
(no doc)
src/app/(dashboard)/api-docs/page.tsx
RequestOptions (Interface)
(no doc)
tests/helpers/request.ts
ErrorBoundaryState (Interface)
(no doc)
src/components/error-boundary.tsx
CampaignConfig (Interface)
(no doc)
src/lib/campaigns.ts
ApiSection (Interface)
(no doc)
src/app/(dashboard)/api-docs/page.tsx
HeaderProps (Interface)
(no doc)
src/components/layout/header.tsx

Core symbols most depended-on inside this repo

cn
called by 136
src/lib/utils.ts
createRequest
called by 50
tests/helpers/request.ts
validateBody
called by 32
src/lib/validations.ts
GET
called by 29
src/app/api/sla/route.ts
update
called by 28
src/app/(dashboard)/settings/page.tsx
POST
called by 25
src/app/api/sla/route.ts
parsePagination
called by 23
src/lib/pagination.ts
parseJsonResponse
called by 22
tests/helpers/request.ts

Shape

Function 446
Interface 98
Class 6
Method 5

Languages

TypeScript100%

Modules by API surface

src/app/(dashboard)/settings/page.tsx21 symbols
src/app/(dashboard)/automation/page.tsx18 symbols
src/app/(dashboard)/customers/page.tsx16 symbols
src/app/(dashboard)/webhooks/page.tsx15 symbols
src/app/(dashboard)/team/page.tsx13 symbols
src/app/(dashboard)/channels/page.tsx13 symbols
src/app/(dashboard)/admin/page.tsx13 symbols
src/lib/channels/phone.ts12 symbols
src/lib/channels/email.ts12 symbols
src/app/(dashboard)/knowledge/page.tsx12 symbols
src/lib/flow-builder.ts10 symbols
src/lib/automation.ts10 symbols

Datastores touched

owlyDatabase · 1 repos
DBDatabase · 1 repos
owly_testDatabase · 1 repos

For agents

$ claude mcp add owly \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact