Metadata-Version: 2.1
Name: familiar-agent
Version: 1.4.0
Summary: Self-Hosted AI Companion Platform
Project-URL: Homepage, https://github.com/omegcrash/familiar
Project-URL: Bug Tracker, https://github.com/omegcrash/familiar/issues
Author-email: George Scott Foley <Georgescottfoley@proton.me>
License: MIT
Keywords: ai,assistant,healthcare,llm,nonprofit,privacy
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Requires-Dist: aiofiles>=23.0
Requires-Dist: certifi>=2024.7.4
Requires-Dist: cryptography>=46.0.5
Requires-Dist: httpx>=0.27
Requires-Dist: idna>=3.7
Requires-Dist: pydantic>=2.0
Requires-Dist: pynacl>=1.6.2
Requires-Dist: python-dotenv>=1.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: urllib3>=2.6.3
Requires-Dist: websockets>=12.0
Requires-Dist: zeroconf>=0.115
Provides-Extra: dev
Requires-Dist: mypy>=1.8; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-cov>=4.1; extra == 'dev'
Requires-Dist: pytest>=7.4; extra == 'dev'
Requires-Dist: ruff>=0.3; extra == 'dev'
Provides-Extra: discord
Requires-Dist: discord-py>=2.3.0; extra == 'discord'
Provides-Extra: docs
Requires-Dist: openpyxl>=3.1; extra == 'docs'
Requires-Dist: pillow>=10.3.0; extra == 'docs'
Requires-Dist: pymupdf>=1.23; extra == 'docs'
Requires-Dist: python-docx>=1.0; extra == 'docs'
Requires-Dist: weasyprint>=60.0; extra == 'docs'
Provides-Extra: email
Requires-Dist: aiosmtpd>=1.4.4; extra == 'email'
Provides-Extra: encryption
Requires-Dist: cryptography>=46.0.5; extra == 'encryption'
Provides-Extra: full
Requires-Dist: aiosmtpd>=1.4.4; extra == 'full'
Requires-Dist: anthropic>=0.40; extra == 'full'
Requires-Dist: beautifulsoup4>=4.12; extra == 'full'
Requires-Dist: cryptography>=46.0.5; extra == 'full'
Requires-Dist: discord-py>=2.3.0; extra == 'full'
Requires-Dist: edge-tts>=6.1; extra == 'full'
Requires-Dist: faster-whisper>=1.0; extra == 'full'
Requires-Dist: flask-cors>=4.0; extra == 'full'
Requires-Dist: flask-limiter>=3.5; extra == 'full'
Requires-Dist: flask-socketio>=5.3; extra == 'full'
Requires-Dist: flask>=3.1.3; extra == 'full'
Requires-Dist: google-api-python-client>=2.100; extra == 'full'
Requires-Dist: google-auth-httplib2>=0.2; extra == 'full'
Requires-Dist: google-auth-oauthlib>=1.0; extra == 'full'
Requires-Dist: gtts>=2.4; extra == 'full'
Requires-Dist: openai-whisper>=20231117; extra == 'full'
Requires-Dist: openai>=1.0; extra == 'full'
Requires-Dist: openpyxl>=3.1; extra == 'full'
Requires-Dist: pillow>=10.3.0; extra == 'full'
Requires-Dist: playwright>=1.40; extra == 'full'
Requires-Dist: presidio-analyzer>=2.2; extra == 'full'
Requires-Dist: presidio-anonymizer>=2.2; extra == 'full'
Requires-Dist: pymupdf>=1.23; extra == 'full'
Requires-Dist: pynacl>=1.6.2; extra == 'full'
Requires-Dist: python-docx>=1.0; extra == 'full'
Requires-Dist: python-telegram-bot>=20.0; extra == 'full'
Requires-Dist: pyttsx3>=2.90; extra == 'full'
Requires-Dist: redis>=4.0.0; extra == 'full'
Requires-Dist: requests>=2.32.4; extra == 'full'
Requires-Dist: spacy>=3.7; extra == 'full'
Requires-Dist: speechrecognition>=3.10; extra == 'full'
Requires-Dist: weasyprint>=60.0; extra == 'full'
Requires-Dist: websockets>=12.0; extra == 'full'
Requires-Dist: werkzeug>=3.1.6; extra == 'full'
Requires-Dist: zeroconf>=0.115; extra == 'full'
Provides-Extra: google
Requires-Dist: google-api-python-client>=2.100; extra == 'google'
Requires-Dist: google-auth-httplib2>=0.2; extra == 'google'
Requires-Dist: google-auth-oauthlib>=1.0; extra == 'google'
Provides-Extra: healthcare
Requires-Dist: presidio-analyzer>=2.2; extra == 'healthcare'
Requires-Dist: presidio-anonymizer>=2.2; extra == 'healthcare'
Requires-Dist: spacy>=3.7; extra == 'healthcare'
Provides-Extra: llm
Requires-Dist: anthropic>=0.40; extra == 'llm'
Requires-Dist: openai>=1.0; extra == 'llm'
Provides-Extra: mesh
Requires-Dist: pynacl>=1.6.2; extra == 'mesh'
Requires-Dist: websockets>=12.0; extra == 'mesh'
Requires-Dist: zeroconf>=0.115; extra == 'mesh'
Provides-Extra: redis
Requires-Dist: redis>=4.0.0; extra == 'redis'
Provides-Extra: telegram
Requires-Dist: python-telegram-bot>=20.0; extra == 'telegram'
Provides-Extra: voice
Requires-Dist: edge-tts>=6.1; extra == 'voice'
Requires-Dist: faster-whisper>=1.0; extra == 'voice'
Requires-Dist: gtts>=2.4; extra == 'voice'
Requires-Dist: openai-whisper>=20231117; extra == 'voice'
Requires-Dist: pyttsx3>=2.90; extra == 'voice'
Requires-Dist: speechrecognition>=3.10; extra == 'voice'
Provides-Extra: web
Requires-Dist: beautifulsoup4>=4.12; extra == 'web'
Requires-Dist: flask-cors>=4.0; extra == 'web'
Requires-Dist: flask-limiter>=3.5; extra == 'web'
Requires-Dist: flask-socketio>=5.3; extra == 'web'
Requires-Dist: flask>=3.1.3; extra == 'web'
Requires-Dist: playwright>=1.40; extra == 'web'
Requires-Dist: requests>=2.32.4; extra == 'web'
Requires-Dist: werkzeug>=3.1.6; extra == 'web'
Description-Content-Type: text/markdown

# 🤝 Familiar

**Self-hosted AI agent with Signal-grade encryption**

![Version](https://img.shields.io/badge/version-1.2.0-purple) ![Python](https://img.shields.io/badge/python-3.9+-green) ![License](https://img.shields.io/badge/license-MIT-orange)

---

## Quick Start

Unzip, then run the script for your OS:

### Linux / macOS / Raspberry Pi
```bash
cd familiar
./run.sh
```

### Windows
Double-click `run.bat`, or from Command Prompt:
```cmd
cd familiar
run.bat
```

Familiar auto-detects your setup. If you have Ollama installed, it uses local AI (free, private). If you set an API key, it uses Claude or GPT instead:

```bash
export ANTHROPIC_API_KEY="sk-ant-..."   # Claude
# or
export OPENAI_API_KEY="sk-..."          # GPT
./run.sh
```

**That's it.** No Docker, no databases, no config files needed.

---

## What Is Familiar?

A self-hosted AI agent that runs on your machine — from a Raspberry Pi to a workstation. Talk to it through CLI, Telegram, Discord, or the web dashboard. It remembers context, executes tools, manages your calendar, reads your email, controls GPIO pins, and browses the web.

Everything is encrypted locally. Your conversations never leave your hardware unless you choose a cloud LLM provider.

### Features

- **Multi-provider LLM** — Claude, GPT, or local models via Ollama
- **36 skills** — email, calendar, browser, knowledge base, tasks, GPIO, voice, and more
- **Signal-grade encryption** — sessions, memory, and data encrypted at rest
- **Multi-channel** — CLI, Telegram, Discord, web dashboard, SMS, Signal
- **Raspberry Pi optimized** — runs on 4GB Pi with local Ollama models
- **Multi-device mesh** — connect multiple Familiar instances across devices
- **HIPAA-ready** — compliance mode with audit logging and PHI detection

---

## GUI Launcher

For a graphical interface (recommended on desktop):

```bash
python3 FamiliarLauncher.py
```

This opens a window for managing Ollama models, starting/stopping the agent, and viewing logs. Requires tkinter (`sudo apt install python3-tk` on Linux).

---

## Advanced Installation

For running as a system daemon, Pi optimization, or full dependency install:

```bash
# Full install with venv + systemd service (Linux)
./scripts/install.sh

# Pi-specific with swap, GPU memory, and Ollama optimization
./scripts/install-pi.sh --with-ollama

# Windows full install with venv
scripts\install.bat
```

See [docs/INSTALL.md](docs/INSTALL.md) for detailed options.

---

## Configuration

Copy and edit the sample config:

```bash
cp config.sample.yaml ~/.familiar/config.yaml
```

Key settings:
```yaml
llm:
  default_provider: anthropic     # or openai, ollama
  anthropic_model: claude-sonnet-4-20250514
  ollama_model: llama3.2

agent:
  name: Familiar
  memory_enabled: true
  skills_enabled: true

security:
  encrypt_sessions: true
  encrypt_memory: true
```

---

## Project Structure

```
familiar/
├── run.sh / run.bat         # Start here
├── FamiliarLauncher.py       # GUI launcher
├── __main__.py              # CLI entry point
├── core/                    # Agent, providers, memory, tools
├── channels/                # CLI, Telegram, Discord, etc.
├── skills/                  # 21 built-in skills
├── launcher/                # GUI + hardware detection
├── dashboard/               # Web dashboard
├── admin/                   # Admin panel
├── pwa/                     # Progressive web app
├── docs/                    # Documentation
└── scripts/                 # Install scripts + dev tools
```

---

## License

MIT — Copyright (c) 2026 George Scott Foley

See [LICENSE](LICENSE) for full text.
