Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
자체 호스팅 AGPL-3.0 헬프데스크, Znuny/OTRS와 DB 공유, 현대 UI·AI 초안·PII 마스킹·GDPR·PGP/S/MIME 지원
Self-hosted, AGPL-3.0 helpdesk that runs next to Znuny/OTRS 6.0–7.3 on the same database. Modern UI, AI drafts with PII masking, GDPR tools, PGP/S/MIME.
비즈니스Python · TypeScriptGitHub @CygnusNetworks온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Modern self-hosted helpdesk, database-compatible with Znuny/OTRS 6.0–7.3 — FastAPI + React, AI-assisted replies with PII masking, GDPR tooling, e-mail/Telegram/phone channels.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Tiqora is a modern, self-hosted ticket / helpdesk system that is
database-compatible with OTRS 6.0.x and Znuny 6.0–7.3 (MariaDB/MySQL and
PostgreSQL). It is a clean-room reimplementation (Python FastAPI + React), not a
fork of Znuny — no Znuny source code is included or redistributed.
In the browser, nothing to install: the interactive demo
runs the full agent, admin and portal UI against mock data.
On your machine, one command (Docker with Compose v2):README 전문 보기 ↗Tiqora is a modern, self-hosted ticket / helpdesk system that is database-compatible with OTRS 6.0.x and Znuny 6.0–7.3 (MariaDB/MySQL and PostgreSQL). It is a clean-room reimplementation (Python FastAPI + React), not a fork of Znuny — no Znuny source code is included or redistributed.
| Backend | Python 3.12+, FastAPI, SQLAlchemy 2 async, Alembic, Pydantic v2 |
| Frontend | React + TypeScript + Vite, Tailwind, theming via CSS variables |
| Search | Meilisearch (full-text; hybrid / vector RAG planned later) |
| Jobs | Plain asyncio worker loops (tiqora-worker, tiqora-ai-worker), Redis for sessions/pub-sub |
| AI surface | MCP server (FastMCP) under the same permission engine as UI/REST |
| License | AGPL-3.0 — Copyright © 2026 Cygnus Networks GmbH |
In the browser, nothing to install: the interactive demo runs the full agent, admin and portal UI against mock data.
On your machine, one command (Docker with Compose v2):
curl -fsSLO https://raw.githubusercontent.com/CygnusNetworks/tiqora/main/docker-compose.quickstart.yml
docker compose -f docker-compose.quickstart.yml up -d
Open http://localhost:8000/ and sign in as root@localhost / tiqora-demo. The first
start creates the database and seeds 40 fake tickets; docker compose -f docker-compose.quickstart.yml down -v removes everything again. The quickstart is for
evaluation only (fixed passwords, plain HTTP). For a real installation see
Getting started.
Running OTRS or Znuny already? Tiqora can work on your existing database, next to Znuny — read Moving off OTRS/Znuny without a big-bang migration or the comparison with Znuny, OTRS, Zammad and others.
Questions, ideas, war stories from your OTRS migration: GitHub Discussions.
tiqora_* tables only until
you explicitly take schema ownership). Preferred peers: Znuny 6.5 (LTS) or
7.3.Product site — overview, features, screenshots.
Interactive demo — full agent, admin, and
portal UI in the browser against mock data (nothing is saved). Built from frontend/
with Mock Service Worker; local build:
VITE_BASE=/tiqora/demo/ pnpm --filter tiqora-frontend build:demo
Inbox sorted by last activity, with e-mail / Telegram / phone filters — and a CTI popup for the call that is ringing through.
Grouped by topic; click a section to expand it, click a picture for full size. The product site shows the same set as a gallery with a light/dark switch.
| Ticket summary | Draft grounded in MCP tools | Auto-reply with its tool trace |
|---|---|---|
| Refine, reviewed as a diff | Model catalog | Task → profile routing |
| Per-queue policies | AI settings | Providers |
| Cost budget & tool rounds | MCP tool sources | LLM request audit |
| Inbox | Ticket view | Dashboard |
|---|---|---|
| Search | Reporting & SLA | Calendar |
| Knowledge base | ||
| Dashboard with filters | Incident in the ticket view | CI detail |
|---|---|---|
| CMDB list | CI with versions and links | Impact graph |
| CMDB class designer | ITSM administration | |
| Telegram chat | CTI call popup | Phone ticket with caller lookup |
|---|---|---|
| Verified signature on arrival | Sign & encrypt in the composer | Per-queue security defaults |
|---|---|---|
| PGP keys | S/MIME certificates | |
| Queues | Escalation matrix | Agents |
|---|---|---|
| Groups | Roles ↔ groups | Customer users |
| Customer user groups | Dynamic fields | Privacy / GDPR |
| Two-factor | ||
| Login | Account security | Account menu | Customer portal |
|---|---|---|---|
Generated with SCREENSHOTS=1 pnpm exec playwright test screenshots
(e2e/fixtures/rich-mock.ts) — no backend required. Use THEME=dark / LANG_UI=de for variants.
| Area | Notes |
|---|---|
| Ticket write path + Znuny invariants | Golden-master multi-peer matrix (OTRS/Znuny 6.0–7.3) |
| GenericInterface compatibility | Provider: Session*, TicketCreate/Update/Get/Search/HistoryGet, TimeAccountingGet, OutOfOffice, ConfigItemGet/Search/Create/Update/Delete (depending on the ITSM mode); REST + SOAP. Requester: invokers on ticket events with retries, conditions, response actions and a debugger, ExecuteInvoker process action — docs/compatibility.md, docs/guide/webservices.md |
| MCP tools | ticket_*, customer lookup, KB, read-only CMDB (cmdb_search, cmdb_get, cmdb_impact), plus tools from plugins — see docs/api/mcp.md, docs/ai-integration.md |
| AI assistance subsystem | Draft replies, summaries, triage, refine (diff review, call notes), auto-reply worker, human handoff, per-ticket pause, 🤖 origin traces, attachment/vision, PII masking, model catalog/profiles/task routing, per-subject ACL, cost budgets & audit — /admin/ai/*, docs/ai-integration.md |
| Daemon takeover (mail, escalation, notify, GA) | Per-function flags, off by default |
| Calendar / appointments | Month/week/agenda UI; reuses Znuny calendar* tables |
| Process management (BPM) and process designer | Reuses Znuny pm_* tables; visual designer (canvas, validation, Znuny YAML import/export, versions), deploy through TiqoraSync while Znuny runs — docs/process-management.md |
| PGP / S-MIME |
┌──────────────────────────────────────────┐
│ Clients │
│ Agent UI · Portal · Admin · AI agents │
└───────────┬──────────────┬────────────────┘
│ │
/api/v1 │ │ MCP (streamable HTTP)
/znuny-compat/* │ │
▼ ▼
┌────────────────┐ ┌─────────────┐
│ tiqora-api │ │ tiqora-mcp │
│ (FastAPI) │ │ (FastMCP) │
└───────┬────────┘ └──────┬──────┘
│ │
│ domain/* │
│ permissions/* │
▼ ▼
┌─────────────────────────────────────────────┐
│ Shared domain layer │
│ TicketService · ACL · sessions · outbox │
└───────────┬───────────────────┬─────────────┘
│ │
┌──────────────▼──────┐ ┌────────▼────────┐
│ OTRS/Znuny tables │ │ tiqora_* tables│
│ (6.0–7.3; R/W, no │ │ (Alembic chain │
│ schema changes) │ │ versions_tiqora)│
└──────────┬──────────┘ └────────┬────────┘
│ │
┌────────────▼──────────┐ │
│ Peer instance │ │
│ (optional parallel) │◄── cache invalidation via TiqoraSync OPM
└───────────────────────┘
│
┌────────────▼────────────────────────────────────┐
│ tiqora-worker · ai-worker · Redis · Meili │
└─────────────────────────────────────────────────┘
flowchart TB
subgraph clients [Clients]
AgentUI[Agent UI]
Portal[Customer Portal]
Admin[Admin]
AI[AI Agents via MCP]
end
subgraph tiqora [Tiqora]
API[tiqora-api FastAPI]
MCP[tiqora-mcp FastMCP]
Worker[tiqora-worker + ai-worker]
Domain[domain + permissions]
end
subgraph data [Shared data plane]
ZTables[(Znuny tables)]
TTables[(tiqora_* tables)]
Redis[(Redis)]
Meili[(Meilisearch)]
end
Znuny[OTRS/Znuny 6.0–7.3 peer]
AgentUI --> API
Portal --> API
Admin --> API
AI --> MCP
API --> Domain
MCP --> Domain
Domain --> ZTables
Domain --> TTables
Worker --> ZTables
Worker --> TTables
Worker --> Redis
Worker --> Meili
Znuny --> ZTables
Domain -.->|tiqora_cache_invalidation| Znuny
Package layout (backend):
backend/src/tiqora/
db/legacy/ # Hand-written models for Znuny tables + conformance tests
db/tiqora/ # tiqora_* models (Alembic: versions_tiqora / versions_owned)
znuny/ # Invariants: ticket numbers, history, escalation, follow-up, …
domain/ # Services — sole write paths, bundling invariants
permissions/ # Groups/roles + ACL for UI, REST, MCP
events/ # Async bus + transactional outbox
channels/ # Channel plugins (email, SMS, WhatsApp, Telegram, phone)
storage/ # StorageBackend interface (DB MIME in V1)
api/ # v1 routers + GenericInterface compat layer
mcp_server/ # FastMCP process
worker/ # asyncio worker loops (daemon takeover, outbox, pollers)
kb/ # Knowledge base
Tiqora and Znuny can share one PostgreSQL or MariaDB/MySQL database:
| Rule | Detail |
|---|---|
| No Znuny schema changes | Tiqora never alters Znuny tables until post-cutover ownership mode |
New tables only as tiqora_* | Alembic chain versions_tiqora/ |
| Behavioural parity | Ticket numbers, history formats, escalation columns, search flags must match Znuny |
| Daemon ownership | Znuny keeps mail/escalation/notifications/GenericAgent until feature flags hand each over |
| Cache coherence | Optional TiqoraSync Znuny OPM reads tiqora_cache_invalidation; or lower Znuny cache TTLs |
See docs/parallel-operation.md for the full invariant list.
| Path | When | Doc |
|---|---|---|
| Quickstart | Evaluate locally in two minutes, demo data included | docker-compose.quickstart.yml — see Try it |
| Fresh standalone | Empty database, no Znuny — greenfield install via tiqora bootstrap | docs/guide/fresh-install.md |
| Parallel to Znuny | Co-run with an existing OTRS/Znuny 6.0–7.3 database (additive tiqora_* only) | docs/support-matrix.md, docs/parallel-operation.md, docs/guide/znuny-to-tiqora.md |
| Migrate away | After parallel operation: schema ownership, cutover checklist | docs/cutover.md |
docker compose -f docker-compose.dev.yml up -d
# MariaDB :3306, Postgres :5432, Redis :6379, Meilisearch :7700, Mailpit :8025/:1025
cd backend
uv sync
export DATABASE_URL=postgresql+asyncpg://tiqora:tiqora@localhost:5432/tiqora
# or: mysql+aiomysql://tiqora:tiqora@localhost:3306/tiqora
export REDIS_URL=redis://localhost:6379/0
export MEILI_URL=http://localhost:7700
uv run uvicorn tiqora.api.app:create_app --factory --reload --host 0.0.0.0 --port 8000
Health checks:
curl -s http://localhost:8000/health
curl -s http://localhost:8000/ready
curl -s http://localhost:8000/metrics | head
cd frontend
pnpm install
pnpm dev
# http://localhost:5173 — agent, portal, and admin UI
make dev-up # or: just dev-up
make sync
make api
make test
make lint
The customer portal is off by default: /api/portal/* answers 404 and /, /portal,
and /portal/login all redirect to the agent login. Two switches control it:
TIQORA_PORTAL_ENABLED=true enables it. Without it the portal is
hard-off and the admin switch cannot override that; the UI control is disabled, and a
write attempt against the API returns 409.Customer records, customer companies, and email tickets are unaffected either way. The
Znuny-compat GenericInterface (/znuny-compat/*) is also unaffected — it's an integration
API, not part of the portal, so customers with credentials can still reach their own
tickets through it while the portal is off.
| Layer | Choice | Rationale |
|---|---|---|
| API | FastAPI + Pydantic v2 | Async-native, OpenAPI-first |
| ORM | SQLAlchemy 2 async | Dual drivers: asyncpg + aiomysql |
| Migrations | Alembic (two chains) | Own tables now; owned Znuny schema only after cutover |
| Jobs | Plain asyncio loops | Feature-flagged daemon takeover without an extra task queue; AI in its own worker |
| Search | Meilisearch | Fast full-text; later hybrid/vector for RAG |
| Sessions | Redis server-side | No JWT; Znuny-compatible session table for compat API |
| Frontend | Vite, React, TS, Tailwind | One app, three route trees, code-split |
| i18n | react-i18next | 49 locales (Znuny catalogue parity; docs/i18n.md) |
| Observability | structlog JSON, Prometheus /metrics | Zabbix template placeholder under deploy/zabbix/ |
| MCP | FastMCP (separate process) | Same permission engine as UI/REST |
Browser floor: the UI's theme tokens are CSS variables tinted with
color-mix(), so it needs Chrome/Edge 111+, Safari 16.4+, or Firefox 113+
(all shipped in 2023). Older browsers render an uncoloured, but still usable,
approximation.
Core functionality is implemented and covered by automated tests, including schema-matrix (Layer A) and multi-peer golden-master (Layer B) checks for OTRS/Znuny 6.0–7.3. Schema ownership defaults off and requires an explicit operator action — see docs/cutover.md.
Day-to-day agent, customer-portal and admin work is covered, and since v0.18.0 / v0.19.0 also what used to be on the gap list: saved searches, widget dashboards, the statistics framework (builder, import, schedules), the process designer, the GenericInterface requester, SAML, web chat, ITSM / CMDB and a plugin system as the replacement for Perl OPM add-ons. The maintained, detailed list with every status (and what is only partial) is docs/compatibility.md. Still not implemented:
| Znuny feature | Status |
|---|---|
| Admin screens: sessions, SQL box, maintenance windows, system log | missing |
| Calendar admin and ticket appointment rules (queue/SLA) | missing |
| Customer portal print view | missing |
Follow-up as a new ticket (queue.follow_up_id == 3) | missing (behaves like reopen) |
| Process transitions after every ticket change | missing (evaluated after process dialogs and new process tickets) |
| ITSM change management (changes, work orders), service catalogue, approvals | planned (wave 5) |
| SysConfig edit/deploy UI | by design (settings are read from sysconfig_*) |
| Perl OPM packages / Package Manager | by design (replaced by plugins) |
Full index: docs/README.md
Getting started & operating
| Document | Content |
|---|---|
| docs/guide/znuny-to-tiqora.md | Operator playbook: run alongside Znuny, then migrate onto Tiqora |
| docs/deploy/docker-compose.md | Docker Compose deployment — services, env vars, reverse proxy |
| docs/support-matrix.md · docs/parallel-operation.md · docs/cutover.md | Peer support matrix, parallel-op invariants, cutover runbook |
| docs/development.md · docs/testing.md | Local dev, seeding/anonymizing, test suites |
| docs/guide/fresh-install.md | Greenfield install, then the optional building blocks (ITSM mode, reports, SSO, web chat, plugins) |
| docs/deployment.md | Production notes, upgrade notes per release (v0.19.0) |
Feature areas (guides marked German have an English summary block unless noted)
| Document | Content |
|---|---|
| docs/itsm.md · docs/cmdb.md · docs/itsm-import.md | ITSM modes, incident / problem / major incident, priority matrix, link types; CMDB; Znuny ITSM import and survey (German) |
| docs/reporting.md | Reports: catalogue, builder, saved reports, Znuny stats import, PDF, schedules |
| docs/dashboards.md | Widget dashboards, role templates, wallboards (German) |
| docs/guide/identity-providers.md | SAML, OIDC, LDAP, customer SSO, SCIM, step-up MFA (German) |
| docs/guide/webchat.md · docs/webchat.md | Web chat: administrators and agents (German, English summary); internals (English) |
| docs/plugins.md | Plugin system: admin part (German), developer guide (English) |
| docs/process-management.md · docs/guide/webservices.md |
API & integrations
| Document | Content |
|---|---|
| docs/api/README.md | API surfaces overview (v1 / portal / compat / MCP and the further public endpoints) |
| docs/api/rest-v1.md | Guided /api/v1 reference with curl examples |
| docs/api/openapi.json | Generated OpenAPI spec (tiqora openapi) |
| docs/api/compat.md | GenericInterface compatibility layer |
| docs/api/mcp.md · docs/ai-integration.md | MCP tools, webhook contract, AI-agent patterns |
| docs/channels.md | Communication channel plugins |
| docs/gdpr.md | GDPR anonymization & retention tooling |
Reference
| Document | Content |
|---|---|
| docs/architecture.md | System components and data flow |
| docs/specs/2026-07-19-tiqora-design.md | Historical design specification |
| NOTICE.md | Licensing breakdown and trademark notes |
TIQORA_ALLOW_UNKNOWN_LEGACY_SCHEMA /
TIQORA_LEGACY_SCHEMA_PROFILE=<profile_id>).znuny-6.5.22/, znuny-7.3.5/, …) are gitignored and never published in
this repository.Contributions are welcome. Read CONTRIBUTING.md first, especially the clean-room rule (never copy Znuny/OTRS source) and the rule about test data (no real tickets, names or addresses). Questions go to GitHub Discussions; security problems go through SECURITY.md, not public issues.
Tiqora is licensed under the GNU Affero General Public License v3.0
(AGPL-3.0) — see LICENSE — with three documented exceptions
(the GPL-3.0 TiqoraSync Znuny add-on, the dual-licensed
backend/src/tiqora/znuny/ compatibility modules, and the verbatim upstream
schema fixtures). See NOTICE.md for the complete licensing
picture, the reimplementation statement, and trademark notes.
Copyright © 2026 Cygnus Networks GmbH.
"Znuny" is a trademark of Znuny GmbH; "OTRS" is a registered trademark of OTRS AG. Tiqora is not affiliated with, endorsed by, or sponsored by either company; the names are used solely to describe factual compatibility.
amr/acr/AuthnContext with Tiqora's own second factor
as fallback, per-provider session lifetime —
guide (German, English summary)..po codes +
English source), RTL included; agent preference syncs with Znuny
UserLanguage (see docs/i18n.md).TIQORA_PORTAL_ENABLED) and Markdown KB./api/v1, GenericInterface REST/SOAP compatibility
(provider and requester: outgoing calls on ticket events, ConfigItem*), webhooks,
channel plugins (email, SMS, WhatsApp, Telegram, phone/CTI), MCP, plugins.Off by default (Znuny's PGP / SMIME switches). Shared Znuny key stores, admin pages with overview/keys/settings, inbound verify/decrypt, outbound sign/encrypt with per-queue defaults and per-sender sign keys, signed/encrypted notifications, customer keys, public S/MIME roots trusted out of the box — docs/crypto.md |
| Telegram, SMS, WhatsApp, phone/CTI | Telegram chat composer; phone tickets, call logging and CTI incoming-call popup — docs/channels.md |
| New-ticket helpers | Queue suggested from the customer's history, property bar, compact phone ticket with call strip |
| Integrations endpoint | Per-customer ticket history for external tools (/api/v1/integrations/customer-tickets) |
| SSE realtime + agent presence | Live updates on ticket zoom |
| CSV ticket export | Permission-filtered streaming export |
| ITSM and CMDB | Incident / problem / major incident, priority matrix, link types, Tiqora CMDB (Mode B), read-only Znuny CMDB (Mode A), ITSM importer, tiqora itsm CLI — docs/itsm.md, docs/cmdb.md, docs/itsm-import.md |
| Reporting | Report builder, 25 built-in reports, saved reports, Znuny stats import, PDF / XLSX / CSV, schedules, report data backfill (tiqora report) — docs/reporting.md |
| Dashboards and wallboards | Widget dashboards, role templates, TV mode, public wallboard links — docs/dashboards.md |
| Web chat | Website widget, chat inbox, AI first line with handoff, recognised visitors, portal chat — docs/guide/webchat.md |
| Plugins | SDK 0.2.0, signed .tqplugin packages, repositories, safe mode, tiqora plugins CLI — docs/plugins.md |
| Identity providers | SAML 2.0, OIDC, LDAP, customer SSO, JIT, role sync, SCIM 2.0, step-up MFA — docs/guide/identity-providers.md |
| Saved searches | Saved ticket searches with sharing and sidebar counts, import of Znuny search profiles |
| TiqoraSync Znuny addon | Optional OPM (1.2.0) for cache coherence during parallel op; deploys processes and ACLs for Tiqora while Znuny runs |
| TiqoraITSM Znuny addon | Optional OPM (1.0.0, German only) for sites whose CMDB moved to Tiqora: affected CIs in the Znuny ticket zoom, read-only guard for Znuny's CI screens — docs/support-matrix.md |
| Processes and the designer; outgoing GenericInterface calls (German, no summary) |
| docs/crypto.md · docs/channels.md · docs/i18n.md | PGP / S/MIME, channels, UI languages |