Skip to main content

PyPI Version Python 3.10+ Coverage License

Parlor Logo

Parlor

The secure digital speakeasy for AI conversation.

Self-hosted ChatGPT-style web UI and agentic CLI that connects to any OpenAI-compatible API.
Install with pip. Run locally. Own your data.

Documentation • Quick Start • Features • Security

Parlor - Midnight Theme


Why Parlor?

Step inside. Parlor connects to any OpenAI-compatible endpoint --- your company's internal API, OpenAI, Azure, Ollama, LM Studio, or anything else that speaks the OpenAI protocol. Built to OWASP ASVS L1 standards because your conversations deserve real security, not security theater.

One command. No cloud. No telemetry. No compromise.


Quick Start

pip install parlor
parlor init         # Interactive setup wizard

Or create ~/.parlor/config.yaml manually:

ai:
  base_url: "https://your-ai-endpoint/v1"
  api_key: "your-api-key"
  model: "gpt-4"
parlor --test       # Verify connection
parlor              # Web UI at http://127.0.0.1:8080
parlor chat         # Terminal CLI
parlor --version    # Show version

Features

Web UI

Full-featured ChatGPT-style interface with conversations, projects, folders, tags, file attachments, MCP tool integration, prompt queuing, command palette, and four built-in themes.

Midnight Theme Dawn Theme

CLI Chat

An agentic terminal REPL with built-in tools (read/write/edit files, bash, glob, grep), MCP integration, skills system, and Rich markdown rendering. Type while the AI works --- messages queue automatically.

parlor chat                          # Interactive REPL
parlor chat "explain main.py"        # One-shot mode
parlor chat -c                       # Continue last conversation
parlor chat --model gpt-4o "hello"   # Override model

Shared Core

Both interfaces share the same agent loop, storage layer, and SQLite database. Conversations created in the CLI show up in the web UI, and vice versa.


Security

Layer Implementation
Auth Session tokens, HttpOnly cookies, HMAC-SHA256
CSRF Per-session double-submit tokens
Headers CSP, X-Frame-Options, HSTS, Referrer-Policy
Database Parameterized queries, column allowlists, path validation
Input DOMPurify, UUID validation, filename sanitization
Rate Limiting 120 req/min per IP
CLI Safety Destructive command confirmation, path blocking
MCP Safety SSRF protection, shell metacharacter rejection

Full details in SECURITY.md.


Documentation

For complete documentation including configuration, CLI commands, API reference, themes, MCP setup, skills, and development guides, visit parlor.readthedocs.io.


Development

git clone https://github.com/troylar/parlor.git
cd parlor
pip install -e ".[dev]"
pytest tests/ -v
Backend Python 3.10+, FastAPI, Uvicorn
Frontend Vanilla JS, marked.js, highlight.js, KaTeX
CLI Rich, prompt-toolkit, tiktoken
Database SQLite with FTS5, WAL journaling
AI OpenAI Python SDK (async streaming)
MCP Model Context Protocol SDK (stdio + SSE)

MIT License
Built for people who care about their conversations.
parlor.readthedocs.io

Metadata

Release files for parlor 0.15.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for parlor 0.15.1
File Size Uploaded
parlor-0.15.1.tar.gz 703.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for parlor 0.15.1
File Interpreter ABI Platform
parlor-0.15.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.4 MB

Release files / parlor-0.15.1.tar.gz

Download URL parlor-0.15.1.tar.gz
Size 703.4 kB
Tags Source
SHA-256 checksum
How to use checksums
01cd1a7f31948ee38eb3928381992bc976294dfcd67cea40202e374961255842
BLAKE2b-256 checksum
How to use checksums
18efc63237a160006030aeff71b8ce1da748d15283f6d8b9145e6474db22f6cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / parlor-0.15.1-py3-none-any.whl

Download URL parlor-0.15.1-py3-none-any.whl
Size 746.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8d8a04c1b2b540a69bb23a3a8c54ef59177243f92ba18f5947a1d96c293409e4
BLAKE2b-256 checksum
How to use checksums
cc9065ceff06a657b8c5acab26c98c57d926488e2db55e2f99a4486196fdfaff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.15.1 This release

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page