AI Assistant for Frappe Framework
Jana is an AI-powered assistant built on the Frappe Framework. Designed for teams who want context-aware AI without leaving their Frappe ecosystem, Jana provides chat, document understanding, and natural language interaction across any Frappe-based application — with support for multiple LLM providers and GDPR-compliant privacy.
A floating assistant available on every Frappe Desk page — ask questions, get explanations, and interact with your data in natural language.
- Floating chat widget accessible from any page
- Real-time streaming responses (token-by-token output)
- Persistent chat sessions across page navigation
- Full conversation history
Jana automatically detects the document you're viewing and uses its data in conversation — no copy-pasting required.
- Automatic DocType and document detection
- Field values injected into conversation context
- Grounded responses based on real document data
- LLM guardrails to prevent hallucination
Bring Your Own Key — use your preferred LLM provider. Each user can connect their own API key, or the system admin can set a shared key.
- OpenAI (GPT-4, GPT-3.5)
- Anthropic (Claude)
- Google (Gemini)
- OpenRouter
- Ollama (local models)
- vLLM (self-hosted)
- Any OpenAI-compatible endpoint
Create AI agents tailored to specific roles with custom system prompts, model settings, and tool configurations.
- Define agents with specific personas and instructions
- Assign tools and knowledge articles per agent
- Configure model and temperature per agent
- Switch between agents in chat
Inject business-specific knowledge into every conversation so Jana understands your company, processes, and terminology.
- Business description injected into all conversations
- Knowledge articles for domain-specific context
- Per-agent knowledge assignments
- Company-specific AI responses
Generate structured content — emails, summaries, reports — using AI with your business context.
- Template-driven content generation
- Business-aware output
- Reusable prompt templates
GDPR-compliant privacy layer that strips personal data before sending to cloud LLM providers and unmasks it in the response.
- Automatic detection and masking of personal data
- Data never leaves your server in identifiable form
- Unmasking on response for seamless user experience
- Configurable masking rules
Conversations are saved and accessible across page navigation — pick up where you left off.
- Session history per user and document
- Resume conversations after navigating away
- Search and browse past sessions
All user-facing strings are translatable — use Jana in your language.
- Translatable UI strings
- Multilingual AI response support depending on provider
When Dock is installed, Jana integrates into the ecosystem navigation and panel system.
- App registered in the Dock app switcher
- Jana panel accessible from the Dock navbar
- Settings accessible from Dock settings panel
- Notification types registered in Dock
Other ecosystem apps can expose tools to Jana for AI-powered insights — property data from Home, project summaries from Orga, and more.
- Tool-based integration system
- Apps register Jana tools via hooks
- No hard dependency — tools available only when apps are installed
- Frappe Framework v16 or higher
- Python 3.14+
- Node.js 24+
- MariaDB 10.6+
- At least one LLM provider account (OpenAI, Anthropic, etc.) or a local Ollama installation
# Get the app
bench get-app jana https://github.com/tonic-6101/jana.git
# Install on your site
bench --site your-site.localhost install-app jana
# Run migrations
bench --site your-site.localhost migrate
# Build assets
bench build --app janaAfter installation, access Jana at: https://your-site.localhost/jana
- Configure a Provider: Go to Jana Settings and create a provider with your LLM credentials
- Set as Default: Mark the provider as default
- Open Any Document: Navigate to any document in Frappe Desk
- Start Chatting: Click the Jana widget and ask a question about the document
- Explore Agents: Create custom agents for specific workflows
| Document | Description |
|---|---|
| How Jana Works | The orchestration layer explained |
| Getting Started | Installation and first-time setup |
| User Guide | Day-to-day usage |
| Configuration | Settings and capability toggles |
| Providers | LLM provider setup |
| Agents | Creating and managing AI agents |
| LLM Guardrails | How Jana prevents hallucination |
| LLM Security | Data protection and AI security |
| Privacy & Data Handling | PII masking and GDPR compliance |
| Developer Guide | Architecture and contributing |
| API Reference | REST API endpoints |
| Changelog | Release history |
- Backend: Frappe Framework, Python 3.14+
- Frontend: Vue 3, TypeScript, Tailwind CSS
- UI Components: FrappeUI
- Database: MariaDB
- AI Providers: OpenAI, Anthropic, Google Gemini, OpenRouter, Ollama, vLLM
- Build: Vite
Contributions are welcome! This project uses pre-commit for code formatting and linting:
cd apps/jana
pre-commit installPre-commit runs the following tools automatically:
- ruff — Python linting and formatting
- eslint — TypeScript/JavaScript linting
- prettier — Code formatting
- pyupgrade — Python syntax modernization
- Issues: GitHub Issues
- Discussions: GitHub Discussions
GNU Affero General Public License v3.0 (AGPL-3.0)
See LICENSE for details.
SPDX-License-Identifier: AGPL-3.0-or-later
Copyright (C) 2024-2026 Tonic
Built with Frappe Framework and FrappeUI.