Metadata-Version: 2.4
Name: flywheel-ai
Version: 0.8.4
Summary: Flywheel CLI and MCP server — business intelligence from the terminal and Claude Code
Project-URL: Homepage, https://lumifai.tech
Author-email: "Lumif.ai" <hello@lumifai.tech>
License-Expression: MIT
Keywords: business-intelligence,claude-code,crm,flywheel,mcp
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
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 :: Office/Business
Requires-Python: >=3.10
Requires-Dist: click>=8.0
Requires-Dist: fastmcp<4,>=3.2.2
Requires-Dist: httpx>=0.27
Requires-Dist: playwright>=1.40.0
Requires-Dist: rich>=13.0
Requires-Dist: websockets>=12.0
Description-Content-Type: text/markdown

# Flywheel AI

Business intelligence CLI and MCP server for [Claude Code](https://claude.ai/download).

Flywheel connects your meetings, contacts, pipeline, and business context to Claude Code — so your AI assistant knows your business as well as you do.

## Quick Install

```bash
curl -fsSL https://flywheel.lumifai.tech/install.sh | bash
```

Or install with **uv tool** (recommended — do not use `pip install`):

```bash
uv tool install flywheel-ai
mkdir -p ~/.flywheel/bin
ln -sf ~/.local/bin/flywheel ~/.flywheel/bin/flywheel
export PATH="$HOME/.local/bin:$HOME/.flywheel/bin:$PATH"
```

Check for a conflicting pip install (common on macOS):

```bash
which -a flywheel
python3 -m pip show flywheel-ai flywheel-cli
ls ~/Library/Python/*/bin/flywheel 2>/dev/null
```

If pip shows a package or `which` points at `Library/Python`, remove it:

```bash
python3 -m pip uninstall -y flywheel-ai flywheel-cli
rm -f ~/Library/Python/*/bin/flywheel ~/Library/Python/*/bin/flywheel-mcp
hash -r
```

## What You Get

### CLI Commands

| Command | Description |
|---------|-------------|
| `flywheel login` | Authenticate via browser OAuth |
| `flywheel login --headless` | Authenticate with email/password credentials |
| `flywheel status` | Check login state and tenant info |
| `flywheel focus list` | List your focuses (departments/teams) |
| `flywheel focus switch <name>` | Switch active focus |
| `flywheel agent setup` | Install browser automation deps |
| `flywheel agent start` | Start local browser agent |
| `flywheel agent register-deeplink` | Register `flywheel://` so Prep opens Terminal (macOS) |
| `flywheel setup-claude-code` | Register MCP servers with Claude Code |

### MCP Tools (available in Claude Code)

Once registered, Claude Code gains access to:

- **flywheel_run_skill** — Run meeting-prep, company-intel, and other skills
- **flywheel_read_context** — Search your business knowledge base
- **flywheel_write_context** — Store business intelligence
- **flywheel_fetch_meetings** — List meetings from your calendar
- **flywheel_sync_meetings** — Sync meetings from connected providers
- **flywheel_list_leads** — View your pipeline contacts
- **flywheel_draft_lead_message** — Draft outreach messages
- And more — run `flywheel setup-claude-code` to see the full list

## Requirements

- macOS (Apple Silicon or Intel)
- Python 3.10+
- [Claude Code](https://claude.ai/download) (for MCP tools)

## Configuration

All configuration is handled automatically. Fresh installs write
`~/.flywheel/env` with `FLYWHEEL_API_URL` (override via env when running
`install.sh`). Existing values are never overwritten.

| Env Variable | Default | Description |
|-------------|---------|-------------|
| `FLYWHEEL_API_URL` | Hosted backend | Override API endpoint |
| `FLYWHEEL_SUPABASE_URL` | Hosted Supabase | Override auth endpoint |
| `FLYWHEEL_SUPABASE_ANON_KEY` | Hosted anon key | Supabase anon key for login |
| `FLYWHEEL_CALLBACK_PORT` | `54321` | Local OAuth callback port (`http://localhost:<port>/callback`) |
| `FLYWHEEL_DIR` | `~/.flywheel/` | Local config directory |
| `FLYWHEEL_LOGIN_EMAIL` | unset | Optional headless login email for `flywheel login --headless` |
| `FLYWHEEL_LOGIN_PASSWORD` | unset | Optional headless login password for `flywheel login --headless` |

For local development, `backend/.env` sets `FLYWHEEL_CALLBACK_PORT=54324` to avoid clashing with local Supabase on port `54321`.

Override API URL at install time:

```bash
FLYWHEEL_API_URL=https://your-backend.example.com \
  curl -fsSL https://flywheel.lumifai.tech/install.sh | bash
```

`flywheel upgrade` ensures `~/.flywheel/env` exists (if missing) and
re-registers the `flywheel://` deeplink on macOS.

## Publishing & Maintenance

- **PyPI package:** https://pypi.org/project/flywheel-ai/
- **Install script (public gist):** https://gist.github.com/Sharan0516/8fb4a3755b3c3e2a2abfae1c949b574a

When you update `scripts/install.sh`, sync the gist (gist owner):
```bash
gh gist edit 8fb4a3755b3c3e2a2abfae1c949b574a scripts/install.sh
```

The installer calls `flywheel agent register-deeplink` after login so Prep can open Terminal without a repo checkout.
To publish a new CLI version to PyPI:

1. Bump `version` in `cli/pyproject.toml` **and** `cli/flywheel_cli/__init__.py` (both must match or the publish job will fail)
2. Merge the PR to `main`
3. The **Publish CLI to PyPI** workflow auto-runs, tests, and publishes — nothing else needed

If the merge does not include a version bump, the workflow runs but skips the publish step automatically.

**One-time repo setup:** add a GitHub Actions secret `PYPI_API_TOKEN` on `Lumif-ai/flywheel-v2` scoped to the `flywheel-ai` PyPI project.

**Manual dispatch options (Actions → Publish CLI to PyPI → Run workflow):**
- "Publish to Test PyPI" — dry-run against test.pypi.org before a real release
- "Publish even if version unchanged" — force re-upload after a failed publish run

**Local publish:**

Copy `cli/.env.example` → `cli/.env` and set your PyPI token:

```bash
cp cli/.env.example cli/.env
# edit cli/.env — UV_PUBLISH_TOKEN=pypi-...
./scripts/publish-cli.sh
```

Or pass inline without `.env`:

```bash
UV_PUBLISH_TOKEN=pypi-XXXX ./scripts/publish-cli.sh
```

## License

MIT
