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

Check connectivity: windy ecosystem

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

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.3
File Size Uploaded
windyfly-0.7.3.tar.gz 2.0 MB Details

Built distribution (wheel)

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

Total release size: 2.9 MB

Release files / windyfly-0.7.3.tar.gz

Download URL windyfly-0.7.3.tar.gz
Size 2.0 MB
Tags Source
SHA-256 checksum
How to use checksums
b1df463d683fcec1ec06bee46748cc15b31983508c8a845fed916fa3d93dab57
BLAKE2b-256 checksum
How to use checksums
0331e2766307fc8895b91fe836614606a993c1889e19bc8685c70db52d08963e
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.3-py3-none-any.whl

Download URL windyfly-0.7.3-py3-none-any.whl
Size 886.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
50d3c0b340fee0bcea052524cff70c853e26933e5b4fb3ec3b684cbec08a9e5d
BLAKE2b-256 checksum
How to use checksums
6e85cd010a82e6adf5aa411c96c375756b25f3e5a17cc294ec148497fea12540
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

0.7.4

2 release files

This release

0.7.3 This release

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