Metadata-Version: 2.4
Name: jacky
Version: 0.9.0
Summary: A local, privacy-first, English-only voice assistant.
Project-URL: Homepage, https://github.com/mdjakkariya/jacky
Project-URL: Repository, https://github.com/mdjakkariya/jacky
Project-URL: Changelog, https://github.com/mdjakkariya/jacky/blob/main/CHANGELOG-cli.md
Project-URL: Issues, https://github.com/mdjakkariya/jacky/issues
Author: Mohamed Jakkariya
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: llm,local,ollama,privacy,stt,voice-assistant
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development
Classifier: Topic :: Utilities
Requires-Python: >=3.11
Requires-Dist: anthropic>=0.40
Requires-Dist: fastapi>=0.110
Requires-Dist: faster-whisper>=1.0.0
Requires-Dist: keyring>=25
Requires-Dist: numpy>=1.24
Requires-Dist: ollama>=0.4.0
Requires-Dist: openai>=1.40
Requires-Dist: prompt-toolkit>=3.0
Requires-Dist: rich>=13
Requires-Dist: sounddevice>=0.4.6
Requires-Dist: uvicorn[standard]>=0.29
Provides-Extra: aec
Requires-Dist: pyobjc-framework-applicationservices>=10.0; (sys_platform == 'darwin') and extra == 'aec'
Requires-Dist: pyobjc-framework-avfoundation>=10.0; (sys_platform == 'darwin') and extra == 'aec'
Requires-Dist: pyobjc-framework-coreservices>=10.0; (sys_platform == 'darwin') and extra == 'aec'
Provides-Extra: all
Requires-Dist: onnxruntime>=1.17; extra == 'all'
Requires-Dist: openwakeword>=0.6.0; extra == 'all'
Requires-Dist: piper-tts>=1.2; extra == 'all'
Provides-Extra: cloud
Provides-Extra: code
Requires-Dist: tree-sitter-language-pack>=0.1; extra == 'code'
Provides-Extra: daemon
Provides-Extra: dev
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pre-commit>=3.7; extra == 'dev'
Requires-Dist: pyflakes>=3.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: python-lsp-server[rope]>=1.9; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Provides-Extra: docs
Requires-Dist: openpyxl>=3.1; extra == 'docs'
Requires-Dist: pypdf>=4; extra == 'docs'
Requires-Dist: python-docx>=1.1; extra == 'docs'
Provides-Extra: e2e
Requires-Dist: pyte>=0.8; extra == 'e2e'
Provides-Extra: freeze
Requires-Dist: pyinstaller>=6.0; extra == 'freeze'
Provides-Extra: mcp
Requires-Dist: mcp<2,>=1.28; extra == 'mcp'
Provides-Extra: tts
Requires-Dist: piper-tts>=1.2; extra == 'tts'
Provides-Extra: tui
Provides-Extra: wake
Requires-Dist: onnxruntime>=1.17; extra == 'wake'
Requires-Dist: openwakeword>=0.6.0; extra == 'wake'
Provides-Extra: web
Requires-Dist: ddgs>=6.0; extra == 'web'
Provides-Extra: whispercpp
Requires-Dist: pywhispercpp>=1.2; extra == 'whispercpp'
Description-Content-Type: text/markdown

<div align="center">

# Jack

**Your Mac, with a voice. Entirely on-device.**

[![CI](https://img.shields.io/github/actions/workflow/status/mdjakkariya/jacky/ci.yml?branch=main&label=CI)](https://github.com/mdjakkariya/jacky/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/mdjakkariya/jacky/graph/badge.svg)](https://codecov.io/gh/mdjakkariya/jacky)
[![Latest release](https://img.shields.io/github/v/release/mdjakkariya/jacky)](https://github.com/mdjakkariya/jacky/releases)
[![Downloads](https://img.shields.io/github/downloads/mdjakkariya/jacky/total)](https://github.com/mdjakkariya/jacky/releases)
[![License](https://img.shields.io/github/license/mdjakkariya/jacky)](LICENSE)
[![Stars](https://img.shields.io/github/stars/mdjakkariya/jacky?style=flat)](https://github.com/mdjakkariya/jacky/stargazers)
![Platform](https://img.shields.io/badge/macOS-Apple%20Silicon-black?logo=apple)
![Views](https://visitor-badge.laobi.icu/badge?page_id=mdjakkariya.jacky)

**[Website](https://mdjakkariya.github.io/jacky/)** · **[Docs](https://mdjakkariya.github.io/jacky/getting-started.html)** · **[Download](https://github.com/mdjakkariya/jacky/releases)**

</div>

---

Jack is a privacy-first **voice & chat** assistant for macOS. You talk to a floating
orb (or type in a chat drawer); it listens, understands, and **acts on your Mac** —
open apps and websites, find and open files, check battery/Wi-Fi/disk, remember
things about you, empty the Trash. **Everything runs locally: no audio, text, or
memory leaves your machine**, with two clearly-marked, opt-in exceptions (web search
and an optional cloud LLM). English only.

## Highlights

- **Chat or voice** — type in the chat drawer (the default), or enable voice and say
  **“jack, …”** for hands-free (push-to-talk also supported).
- **Acts through a permission gate** — read-only tools run straight through,
  destructive ones ask first, and every action is audited. The model *plans*; the
  gate *executes* — it never runs a tool blindly.
- **Hands on your Mac** — app & web control, on-device file search (open / reveal in
  Finder), system info, and local memory.
- **Local by default, cloud optional** — runs fully on-device with Ollama, or switch
  to Claude (disclosed, opt-in).

→ Full feature tour, the orb's states, and how it works: **[jack's website](https://mdjakkariya.github.io/jacky/)**.

## Quickstart

**Download (recommended):** grab the latest **`.dmg`** from
[Releases](https://github.com/mdjakkariya/jacky/releases) — a single, self-contained
app. It's an unsigned dev preview, so the first launch is right-click **Jack** →
**Open**. Voice models download on demand the first time you enable voice.

**Build from source** (macOS, Apple Silicon):

```bash
brew install uv ollama
ollama serve && ollama pull qwen3:8b   # local LLM, one time
make setup                              # dev env + git hooks
make run                                # the engine/daemon
```

Then build the orb from `ui/orb-shell` (`cargo tauri dev`). Full setup, configuration,
permissions, and troubleshooting live in **[Getting started](https://mdjakkariya.github.io/jacky/getting-started.html)**.

## Install the coding CLI

No Python needed — one command downloads a self-contained `jack` binary.

**macOS / Linux**
```sh
curl -fsSL https://raw.githubusercontent.com/mdjakkariya/jacky/main/install.sh | sh
```

**Windows (PowerShell)**
```powershell
irm https://raw.githubusercontent.com/mdjakkariya/jacky/main/install.ps1 | iex
```

Then run `jack` inside a project. You'll need an LLM backend: set a cloud key with
`jack config` (Anthropic/OpenAI — you pay the provider), or install
[Ollama](https://ollama.com) and pull a model to run fully local.

**Update:** `jack` checks once a day and prints a notice when a new version ships —
run `jack update` to upgrade in place. `jack --version` shows the current version.

## Architecture

A headless Python engine + a macOS **orb / chat** client (Tauri) that talks to it over
a localhost WebSocket. A pipeline of swappable stages drives one turn:

```
AudioSource ─▶ SpeechToText ─▶ LanguageModel ─plan─▶ PermissionGate ─▶ ToolRegistry
 wake+VAD/PTT   whisper         Ollama / Claude       risk·confirm·audit  apps·web·files·system
                                                                                  │
                              TextToSpeech (Piper) ◀──────── reply ◀──────────────┘
```

Diagram: [`docs/architecture/architecture.svg`](docs/architecture/architecture.svg).
Engineering conventions and the full design rationale are in [`CLAUDE.md`](CLAUDE.md).

## Star history

<a href="https://star-history.com/#mdjakkariya/jacky&Date">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=mdjakkariya/jacky&type=Date&theme=dark" />
    <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=mdjakkariya/jacky&type=Date" />
    <img alt="Star history chart for mdjakkariya/jacky" src="https://api.star-history.com/svg?repos=mdjakkariya/jacky&type=Date" width="640" />
  </picture>
</a>

## Contributing

Contributions are welcome — see [`CONTRIBUTING.md`](CONTRIBUTING.md) for the workflow
(open an issue first, `make check`, Conventional Commits, DCO sign-off) and
[`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md).

## Sponsor

Jack is built in my free time. If it's useful to you, sponsoring helps me keep going via
**[GitHub Sponsors](https://github.com/sponsors/mdjakkariya)** — or buy me a chai:

[![Buy Me A Chai](https://buymeachai.ezee.li/assets/images/buymeachai-button.png)](https://buymeachai.ezee.li/mdjakkariya)

## License

Created and maintained by **Mohamed Jakkariya**
([@mdjakkariya](https://github.com/mdjakkariya)). Licensed under **Apache-2.0** — see
[`LICENSE`](LICENSE) and [`NOTICE`](NOTICE). You're free to use, modify, and build on
Jack; please keep the attribution.
