Skip to main content

🪰 Windy Fly

Your AI. Your Rules. Your Ecosystem.

Windy Fly is a personal AI agent — a lifelong, self-improving companion that remembers everything, learns your preferences, and connects to the entire Windy ecosystem. Talk to it from your terminal, phone, browser, or any messaging platform.

pip install windyfly    # official release (0.7.1+) — the brain + every chat channel
windy go                # opens the hatch ceremony in your browser

The PyPI wheel is the headless brain (no web dashboard). For the full product with the dashboard, run it from a source checkout, either windy go or docker compose up -d --build, which builds the image locally from the Dockerfile. There is no published Docker image yet. See docs/DISTRIBUTION.md.

0.7.1: set your Telegram owner explicitly (AGENT_OWNER_TELEGRAM_ID=<your numeric id>). Older releases defaulted it to a maintainer's account. See CHANGELOG.md.

Your agent hatches, gets an identity, and starts chatting in under 2 minutes.

0.7.3: windy go opens the one Windy hatch ceremony. It prints a link and a short code (Open this to hatch your agent: <link> (code ABCD-1234)) and opens your browser. Check the code matches, name your agent, and at "It's alive!" the terminal prints where to say hi in Windy Chat. Your agent is born in the Windy cloud and lives there; windy bring-home (run it on this machine) is coming soon. WINDY_HATCH_VIA_HUB=0 keeps the old terminal hatch for this one release.


Features

Category What It Does
🧠 Memory Remembers every conversation, extracts facts, builds a knowledge graph
🎛️ Personality 10 sliders (humor, warmth, autonomy, etc.) — tune how your agent thinks and speaks
🛠️ 17+ Tools Weather, reminders, to-dos, news, web search, calculator, unit converter, calendar
💬 Multi-Channel CLI, Matrix (Windy Chat), Telegram, Discord, Slack, WhatsApp, SMS, email
🌐 Dashboard React web UI at localhost:3000 — manage everything visually, no terminal needed
🪪 Identity Eternitas passport, birth certificate, trust score — your agent has a real identity
💰 Cost Control Daily/monthly budgets, per-model breakdown, automatic budget enforcement
🔄 Self-Improving "Never Wrong Twice" — logs corrections, creates correction skills, learns from mistakes
☁️ Cloud Backup Encrypted backups to Windy Cloud — memory survives device changes
🖥️ VPS Deploy windy deploy --vps — run your agent 24/7 on AWS

Quickstart

From Source (Developers)

git clone https://github.com/sneakyfree/windy-agent && cd windy-agent
uv sync                    # Install dependencies
uv run windy go            # Hatch in the browser ceremony (link + code)

From PyPI (headless — no dashboard)

pip install windyfly        # 0.7.1+ (set AGENT_OWNER_TELEGRAM_ID for Telegram)
windy go                   # Hatch in the browser ceremony (link + code)
windy start                # Start the agent (brain + channels only)

The wheel ships the Python brain and every channel adapter, but NOT the gateway/dashboard (that's a Bun/TypeScript app that lives in the source checkout). Want the full product? Use a source checkout: windy go, or docker compose up -d --build to build the image yourself. Details: docs/DISTRIBUTION.md.

What Happens

  1. Link + code — windy go signs you in with your Windy account, prints the ceremony link and a short code, and opens your browser
  2. Hatch — check the code, name your agent, and it comes alive with the "It's alive! It's alive! The fly is alive!" ceremony, born in the Windy cloud
  3. Chat — the terminal prints "Say hi: "; windy bring-home (run the agent on this machine) is coming soon (With WINDY_HATCH_VIA_HUB=0, this release still runs the old terminal hatch: paste an API key, hatch locally, chat in the terminal or dashboard.)
  4. Enjoy — ask about the weather, set reminders, manage to-dos, search the web

Commands

Everyday

Command Description
windy chat Chat in the terminal
windy start Start agent + gateway, open dashboard
windy stop Stop all processes
windy status Check what's running

Tools (via chat or slash commands)

Command Example
/weather "What's the weather in Fort Anne?"
/remind "Remind me to call Mom at 3pm"
/todo "Add 'buy groceries' to my list"
/news "What's the latest tech news?"
/calendar "What's on my schedule today?"

Agent Management

Command Description
windy version Version + update check
windy update Update to latest from PyPI
windy doctor Diagnose issues
windy ecosystem Check all service connections
windy backup now Backup to Windy Cloud

Architecture

┌─────────────────────────────────────────────────────────────┐
│  Dashboard (React + Vite + Tailwind)  ← localhost:3000      │
├─────────────────────────────────────────────────────────────┤
│  Gateway (Bun/TypeScript)  ← 50+ REST/WS API endpoints     │
├─────────────────────────────────────────────────────────────┤
│  Brain (Python 3.12+)  ← LLM orchestration, tools, memory  │
├─────────────────────────────────────────────────────────────┤
│  Memory (SQLite + FTS5 + sqlite-vec)  ← one file, zero ops  │
└─────────────────────────────────────────────────────────────┘
Layer Runtime Role
Dashboard React 19 + Vite + Tailwind 8-page web UI for managing your agent
Gateway Bun / TypeScript API server, WebSocket chat, static files
Brain Python 3.12+ Agent loop, LLM calls, tools, personality
Memory SQLite Episodes, knowledge graph, skills, costs, reminders, todos

Configuration

All config lives in windyfly.toml:

[agent]
name = "Windy Fly"
default_model = "kimi-k2.5"

[personality]
preset = "buddy"          # buddy, engineer, powerhouse, coder, friend
warmth = 9
humor = 7

[costs]
daily_budget_usd = 5.0

[ecosystem]
eternitas_url = "https://api.eternitas.ai"
windy_mail_url = "https://api.windymail.ai"
matrix_homeserver = "https://chat.windychat.ai"
windy_cloud_url = "https://cloud.windycloud.com"

Environment Variables

Secrets go in .env (never committed):

OPENAI_API_KEY=sk-...          # Required: at least one LLM key
ANTHROPIC_API_KEY=sk-ant-...   # Optional: for Claude models
BRAVE_SEARCH_API_KEY=...       # Optional: better web search (free at brave.com/search/api)

Ecosystem

Windy Fly connects to the full Windy product suite:

Service What It Does Status
Eternitas Agent identity — passport, trust score ✅ Integrated
Windy Chat Matrix messaging via Synapse ✅ Integrated
Windy Mail Agent email inbox ✅ Integrated
Windy Cloud Backup storage, VPS deployment ✅ Integrated
Windy Pro Desktop/mobile app connections ✅ Integrated
Windy Mind All model compute (the agent's brain), with its own Eternitas token ✅ Integrated

Check connectivity: windy ecosystem

Compute goes through Windy Mind. The agent calls Mind with its own passport token; Mind picks, meters and ledgers the model. Any other tool that needs a model should do the same: one base URL plus a Mind key, as described in Use Windy Mind for compute. The only direct model call windy-agent makes is the declared backup: a local Ollama on the agent's own machine, used only when Mind is unreachable, with every such reply marked.

Eternitas Trust Gate

Every sensitive action — send_email, post_chat_message, run_command, install_package, commit_push, upload_file — is gated by the live Eternitas Trust API before it hits the network.

Contract: /Users/thewindstorm/eternitas/docs/trust-api.md is the authoritative consumer reference. Endpoint: GET {ETERNITAS_URL}/api/v1/trust/{passport_number} — public, no auth, 100 req/min/IP, 5-min server cache. Responses carry status, band (exceptional/good/fair/poor/critical), clearance_level, tier_multiplier, allowed_actions, and cache_ttl_seconds. Windy Fly mirrors the TTL in a local SQLite cache and subscribes to trust.changed webhooks to flush on band flip or clearance promotion.

Env vars:

Var Purpose Default
ETERNITAS_URL Base URL for the Trust API http://localhost:8200 (dev)
ETERNITAS_USE_MOCK true to skip live fetches and fail-open unset
WINDYFLY_TRUST_STRICT 1 to fail-closed when the trust service is unreachable unset (fail-open)
ETERNITAS_PASSPORT Agent's passport number; unset means "human/standalone, skip gate" set during hatch

Agent-gate → Eternitas vocabulary:

Windy Fly gate action Eternitas action
send_email, post_chat_message, upload_file send
run_command execute
install_package install_packages
commit_push commit_push

Running the live integration tests:

# Terminal 1 — start Eternitas
cd /Users/thewindstorm/eternitas
./scripts/dev-start.sh

# Terminal 2 — run the live tests
cd /Users/thewindstorm/windy-agent
ETERNITAS_URL=http://localhost:8200 \
ETERNITAS_USE_MOCK=false \
WINDYFLY_TEST_PASSPORT_EXCEPTIONAL=<exceptional-band passport> \
WINDYFLY_TEST_PASSPORT_CRITICAL=<critical-band passport> \
uv run pytest tests/integration/test_trust_live.py -v

Tests skip automatically when the API isn't reachable.


Telemetry and privacy

Windy Fly sends anonymous health data to Windy so we can see when agents are failing in the field: error codes, counts and durations. It never sends your messages, prompts, files, names or email addresses. You're told this once, when your agent is born or the first time you run windy login or windy go, and nothing is sent before that.

  • See or change it: windy telemetry status|on|off, or WINDY_TELEMETRY=0 (in your shell or the agent's .env).
  • What's sent: service.boot (version, install type), service.health every 15 minutes (turn/tool/error counts, p95 turn time, lifeboat turns), agent.run_failed (one per turn where you got no real answer, with a code such as rate_limited), agent.model_demoted (when your agent falls back to a weaker or local model), and llm.call (tokens and list-price cost).
  • Whose it is: rows are signed with your agent's own passport token and filed under its passport number. An agent without a passport sends nothing.

Details: docs/PRIVACY.md.

Development

# Run tests (~1100 offline + 27 live-Eternitas integration)
uv run pytest tests/ -v
uv run pytest tests/integration/ -v   # needs Eternitas at ETERNITAS_URL

# Lint
uv run ruff check src/

# Build package
uv build

# Release (maintainers only)
./scripts/release.sh 0.6.0    # Bumps version, tags, pushes → PyPI

Project Stats

  • 1100+ tests | 0 failures (includes contract, integration, stress)
  • 22 LLM-callable tools
  • 101 DNA codons | 100% implemented
  • 8-page React dashboard
  • 9 messaging channels supported

License

Proprietary — (C) 2026 WindyLabs. All rights reserved.


"If you have one copy of the DNA, you can recreate the entire organism."

Metadata

Release files for windyfly 0.7.4

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

Source distribution (sdist)

Source distribution for windyfly 0.7.4
File Size Uploaded
windyfly-0.7.4.tar.gz 2.1 MB Details

Built distribution (wheel)

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

Total release size: 3.0 MB

Release files / windyfly-0.7.4.tar.gz

Download URL windyfly-0.7.4.tar.gz
Size 2.1 MB
Tags Source
SHA-256 checksum
How to use checksums
e9b887688936298b2053f49bb6415822b046fd21dc2a4b7706ecc4d383962180
BLAKE2b-256 checksum
How to use checksums
91446c84d9f1769c7e80e064e5e0804d86bebbe7c40ac4583437928838dd9e6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / windyfly-0.7.4-py3-none-any.whl

Download URL windyfly-0.7.4-py3-none-any.whl
Size 918.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
39e4e6afe72cc7ae111483361a29f0fb947cef488feffe3361b6a9a2413f1b35
BLAKE2b-256 checksum
How to use checksums
e2ac21983f8300738e15f6227c29df9a3ecf5a1df21a4a8497a66d54e23fca8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

0.7.6

2 release files

0.7.5

2 release files

This release

0.7.4 This release

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.1.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