2026-02-19 19:31:48 +00:00
|
|
|
# Timmy Time — Mission Control
|
|
|
|
|
# Copy this file to .env and uncomment lines you want to override.
|
|
|
|
|
# .env is gitignored and never committed.
|
feat: one-click cloud deployment — Caddy HTTPS, Ollama, systemd, cloud-init
Add complete production deployment stack so Timmy can be deployed to any
cloud provider (DigitalOcean, AWS, Hetzner, etc.) with a single command.
New files:
- docker-compose.prod.yml: production stack (Caddy auto-HTTPS, Ollama LLM,
Dashboard, Timmy agent, Watchtower auto-updates)
- deploy/Caddyfile: reverse proxy with security headers and WebSocket support
- deploy/setup.sh: interactive one-click setup script for any Ubuntu/Debian server
- deploy/cloud-init.yaml: paste as User Data when creating a cloud VM
- deploy/timmy.service: systemd unit for auto-start on boot
- deploy/digitalocean/create-droplet.sh: create a DO droplet via doctl CLI
Updated:
- Dockerfile: non-root user, healthcheck, missing deps (GitPython, moviepy, redis)
- Makefile: cloud-deploy, cloud-up/down/logs/status/update/scale targets
- .env.example: DOMAIN setting for HTTPS
- .dockerignore: exclude deploy configs from image
https://claude.ai/code/session_018CduUZoEJzFynBwMsxaP8T
2026-02-24 21:22:56 +00:00
|
|
|
#
|
|
|
|
|
# For cloud deployment, deploy/setup.sh generates this automatically.
|
|
|
|
|
|
|
|
|
|
# ── Cloud / Production ──────────────────────────────────────────────────────
|
|
|
|
|
# Your domain for automatic HTTPS via Let's Encrypt.
|
|
|
|
|
# Set to your actual domain (e.g., timmy.example.com) for HTTPS.
|
|
|
|
|
# Leave as "localhost" for IP-only HTTP access.
|
|
|
|
|
# DOMAIN=localhost
|
2026-02-19 19:31:48 +00:00
|
|
|
|
|
|
|
|
# Ollama host (default: http://localhost:11434)
|
feat: one-click cloud deployment — Caddy HTTPS, Ollama, systemd, cloud-init
Add complete production deployment stack so Timmy can be deployed to any
cloud provider (DigitalOcean, AWS, Hetzner, etc.) with a single command.
New files:
- docker-compose.prod.yml: production stack (Caddy auto-HTTPS, Ollama LLM,
Dashboard, Timmy agent, Watchtower auto-updates)
- deploy/Caddyfile: reverse proxy with security headers and WebSocket support
- deploy/setup.sh: interactive one-click setup script for any Ubuntu/Debian server
- deploy/cloud-init.yaml: paste as User Data when creating a cloud VM
- deploy/timmy.service: systemd unit for auto-start on boot
- deploy/digitalocean/create-droplet.sh: create a DO droplet via doctl CLI
Updated:
- Dockerfile: non-root user, healthcheck, missing deps (GitPython, moviepy, redis)
- Makefile: cloud-deploy, cloud-up/down/logs/status/update/scale targets
- .env.example: DOMAIN setting for HTTPS
- .dockerignore: exclude deploy configs from image
https://claude.ai/code/session_018CduUZoEJzFynBwMsxaP8T
2026-02-24 21:22:56 +00:00
|
|
|
# In production (docker-compose.prod.yml), this is set to http://ollama:11434 automatically.
|
2026-02-19 19:31:48 +00:00
|
|
|
# OLLAMA_URL=http://localhost:11434
|
|
|
|
|
|
2026-03-15 12:34:21 -04:00
|
|
|
# LLM model to use via Ollama (default: qwen3:30b)
|
|
|
|
|
# OLLAMA_MODEL=qwen3:30b
|
2026-02-19 19:31:48 +00:00
|
|
|
|
2026-03-14 18:54:43 -04:00
|
|
|
# Ollama context window size (default: 4096 tokens)
|
|
|
|
|
# Set higher for more context, lower to save RAM. 0 = model default.
|
|
|
|
|
# qwen3:30b + 4096 ctx ≈ 19GB VRAM; default ctx ≈ 45GB.
|
|
|
|
|
# OLLAMA_NUM_CTX=4096
|
|
|
|
|
|
2026-02-19 19:31:48 +00:00
|
|
|
# Enable FastAPI interactive docs at /docs and /redoc (default: false)
|
|
|
|
|
# DEBUG=true
|
2026-02-21 16:53:16 +00:00
|
|
|
|
|
|
|
|
# ── AirLLM / big-brain backend ───────────────────────────────────────────────
|
|
|
|
|
# Inference backend: "ollama" (default) | "airllm" | "auto"
|
|
|
|
|
# "auto" → uses AirLLM on Apple Silicon if installed, otherwise Ollama.
|
|
|
|
|
# Requires: pip install ".[bigbrain]"
|
|
|
|
|
# TIMMY_MODEL_BACKEND=ollama
|
|
|
|
|
|
|
|
|
|
# AirLLM model size (default: 70b).
|
|
|
|
|
# 8b ~16 GB RAM | 70b ~140 GB RAM | 405b ~810 GB RAM
|
|
|
|
|
# AIRLLM_MODEL_SIZE=70b
|
2026-02-21 13:46:12 -05:00
|
|
|
|
feat: add Grok (xAI) as opt-in premium backend with monetization
- Add GrokBackend class in src/timmy/backends.py with full sync/async
support, health checks, usage stats, and cost estimation in sats
- Add consult_grok tool to Timmy's toolkit for proactive Grok queries
- Extend cascade router with Grok provider type for failover chain
- Add Grok Mode toggle card to Mission Control dashboard (HTMX live)
- Add "Ask Grok" button on chat input for direct Grok queries
- Add /grok/* routes: status, toggle, chat, stats endpoints
- Integrate Lightning invoice generation for Grok usage monetization
- Add GROK_ENABLED, XAI_API_KEY, GROK_DEFAULT_MODEL, GROK_MAX_SATS_PER_QUERY,
GROK_FREE config settings via pydantic-settings
- Update .env.example and docker-compose.yml with Grok env vars
- Add 21 tests covering backend, tools, and route endpoints (all green)
Local-first ethos preserved: Grok is premium augmentation only,
disabled by default, and Lightning-payable when enabled.
https://claude.ai/code/session_01FygwN8wS8J6WGZ8FPb7XGV
2026-02-27 01:12:51 +00:00
|
|
|
# ── Grok (xAI) — premium cloud augmentation ──────────────────────────────────
|
|
|
|
|
# Enable Grok as an opt-in premium backend for frontier reasoning.
|
|
|
|
|
# Local-first ethos is preserved — Grok only activates when explicitly enabled.
|
|
|
|
|
# GROK_ENABLED=false
|
|
|
|
|
# XAI_API_KEY=xai-...
|
|
|
|
|
# GROK_DEFAULT_MODEL=grok-3-fast
|
|
|
|
|
# GROK_MAX_SATS_PER_QUERY=200
|
|
|
|
|
# GROK_FREE=false
|
|
|
|
|
|
2026-02-21 13:46:12 -05:00
|
|
|
# ── L402 Lightning secrets ───────────────────────────────────────────────────
|
|
|
|
|
# HMAC secret for invoice verification. MUST be changed in production.
|
|
|
|
|
# Generate with: python3 -c "import secrets; print(secrets.token_hex(32))"
|
|
|
|
|
# L402_HMAC_SECRET=<your-secret-here>
|
|
|
|
|
|
|
|
|
|
# HMAC secret for macaroon signing. MUST be changed in production.
|
|
|
|
|
# L402_MACAROON_SECRET=<your-secret-here>
|
|
|
|
|
|
|
|
|
|
# Lightning backend: "mock" (default) | "lnd"
|
|
|
|
|
# LIGHTNING_BACKEND=mock
|
2026-02-22 17:16:12 +00:00
|
|
|
|
2026-02-25 15:32:19 -05:00
|
|
|
# ── Environment & Privacy ───────────────────────────────────────────────────
|
|
|
|
|
# Environment mode: "development" (default) | "production"
|
|
|
|
|
# In production, security secrets MUST be set or the app will refuse to start.
|
|
|
|
|
# TIMMY_ENV=development
|
|
|
|
|
|
|
|
|
|
# Disable Agno telemetry for sovereign/air-gapped deployments.
|
|
|
|
|
# Default is false (disabled) to align with local-first AI vision.
|
|
|
|
|
# TELEMETRY_ENABLED=false
|
|
|
|
|
|
2026-02-22 17:16:12 +00:00
|
|
|
# ── Telegram bot ──────────────────────────────────────────────────────────────
|
|
|
|
|
# Bot token from @BotFather on Telegram.
|
|
|
|
|
# Alternatively, configure via the /telegram/setup dashboard endpoint at runtime.
|
|
|
|
|
# Requires: pip install ".[telegram]"
|
|
|
|
|
# TELEGRAM_TOKEN=
|
2026-02-25 01:11:14 +00:00
|
|
|
|
|
|
|
|
# ── Discord bot ──────────────────────────────────────────────────────────────
|
|
|
|
|
# Bot token from https://discord.com/developers/applications
|
|
|
|
|
# Alternatively, configure via the /discord/setup dashboard endpoint at runtime.
|
|
|
|
|
# Requires: pip install ".[discord]"
|
|
|
|
|
# Optional: pip install pyzbar Pillow (for QR code invite detection from screenshots)
|
|
|
|
|
# DISCORD_TOKEN=
|
2026-03-08 12:50:44 -04:00
|
|
|
|
|
|
|
|
# ── Autoresearch — autonomous ML experiment loops ────────────────────────────
|
|
|
|
|
# Enable autonomous experiment loops (Karpathy autoresearch pattern).
|
|
|
|
|
# AUTORESEARCH_ENABLED=false
|
|
|
|
|
# AUTORESEARCH_WORKSPACE=data/experiments
|
|
|
|
|
# AUTORESEARCH_TIME_BUDGET=300
|
|
|
|
|
# AUTORESEARCH_MAX_ITERATIONS=100
|
|
|
|
|
# AUTORESEARCH_METRIC=val_bpb
|
|
|
|
|
|
ruff (#169)
* polish: streamline nav, extract inline styles, improve tablet UX
- Restructure desktop nav from 8+ flat links + overflow dropdown into
5 grouped dropdowns (Core, Agents, Intel, System, More) matching
the mobile menu structure to reduce decision fatigue
- Extract all inline styles from mission_control.html and base.html
notification elements into mission-control.css with semantic classes
- Replace JS-built innerHTML with secure DOM construction in
notification loader and chat history
- Add CONNECTING state to connection indicator (amber) instead of
showing OFFLINE before WebSocket connects
- Add tablet breakpoint (1024px) with larger touch targets for
Apple Pencil / stylus use and safe-area padding for iPad toolbar
- Add active-link highlighting in desktop dropdown menus
- Rename "Mission Control" page title to "System Overview" to
disambiguate from the chat home page
- Add "Home — Timmy Time" page title to index.html
https://claude.ai/code/session_015uPUoKyYa8M2UAcyk5Gt6h
* fix(security): move auth-gate credentials to environment variables
Hardcoded username, password, and HMAC secret in auth-gate.py replaced
with os.environ lookups. Startup now refuses to run if any variable is
unset. Added AUTH_GATE_SECRET/USER/PASS to .env.example.
https://claude.ai/code/session_015uPUoKyYa8M2UAcyk5Gt6h
* refactor(tooling): migrate from black+isort+bandit to ruff
Replace three separate linting/formatting tools with a single ruff
invocation. Updates tox.ini (lint, format, pre-push, pre-commit envs),
.pre-commit-config.yaml, and CI workflow. Fixes all ruff errors
including unused imports, missing raise-from, and undefined names.
Ruff config maps existing bandit skips to equivalent S-rules.
https://claude.ai/code/session_015uPUoKyYa8M2UAcyk5Gt6h
---------
Co-authored-by: Claude <noreply@anthropic.com>
2026-03-11 12:23:35 -04:00
|
|
|
# ── Auth Gate (nginx auth_request) ─────────────────────────────────────────
|
|
|
|
|
# Required when running auth-gate.py for nginx auth_request.
|
|
|
|
|
# Generate secret with: python3 -c "import secrets; print(secrets.token_hex(32))"
|
|
|
|
|
# AUTH_GATE_SECRET=<your-secret-here>
|
|
|
|
|
# AUTH_GATE_USER=<your-username>
|
|
|
|
|
# AUTH_GATE_PASS=<your-password>
|
|
|
|
|
|
2026-03-08 12:50:44 -04:00
|
|
|
# ── Docker Production ────────────────────────────────────────────────────────
|
|
|
|
|
# When deploying with docker-compose.prod.yml:
|
|
|
|
|
# - Containers run as non-root user "timmy" (defined in Dockerfile)
|
|
|
|
|
# - No source bind mounts — code is baked into the image
|
|
|
|
|
# - Set TIMMY_ENV=production to enforce security checks
|
|
|
|
|
# - All secrets below MUST be set before production deployment
|