Skip to main content

FreeHand

Your local AI agent, on your devices, in your channels.

FreeHand is a local-first AI agent system with OAuth integrations, cross-agent memory import, and Tailscale network access. Built for the South African market — free, open source, no vendor lock-in.

pip install freehand-agent
freehand serve
# Open http://localhost:8000

Features

  • 🔌 7 OAuth connectors — Gmail, Outlook, Zoom, Facebook, Instagram, GitHub, custom email (IMAP/SMTP)
  • 🔗 Cross-agent memory import — automatically detects and imports memories from Hermes Agent and OpenClaw
  • 🛠 17 agent tools — email, calendar, sheets, GitHub, Zoom, browser automation, document processing
  • 🔒 Permission tiers — Autonomous, Semi-Autonomous, God Mode with approval workflows
  • 💬 Remote gateways — Telegram, Slack, WhatsApp
  • 🧠 FTS5 memory search — full-text search across all vault notes
  • 📅 Task scheduler — cron-based task execution via scribble sweep
  • 🔐 Encrypted token storage — Fernet encryption for all OAuth tokens
  • 🌐 Tailscale support — accessible from anywhere on your tailnet

Install

One-command install (recommended)

Windows (PowerShell):

iwr https://freehand.tracysmith.co.za/install.ps1 -useb | iex

macOS / Linux:

curl -fsSL https://freehand.tracysmith.co.za/install.sh | bash

From PyPI

pip install freehand-agent
freehand init
freehand serve

From source

git clone https://github.com/TracySmithConsulting/freehand.git
cd freehand
pip install -e ".[all]"
freehand init
freehand serve

Quick Start

# 1. Install
pip install freehand-agent
freehand init

# 2. Start the server
freehand serve

# 3. Open in browser
# http://localhost:8000

# 4. Connect your accounts (Settings → OAuth Credentials)
# See docs/OAUTH_SETUP.md for step-by-step

CLI Commands

freehand serve                    # Start the web server
freehand init                     # Initialize database and vault
freehand sweep                    # Process pending scribble entries

# Connections
freehand connect <service>        # Start OAuth flow (google, microsoft, zoom, etc.)
freehand connections              # List all connections
freehand disconnect <service>     # Remove a connection
freehand test <service>           # Test if connection is valid

# Agents (cross-agent import)
freehand agents list              # Detect installed AI agents
freehand agents import hermes     # Import from Hermes Agent
freehand agents import openclaw   # Import from OpenClaw
freehand agents status            # Show import history
freehand agents remove <agent>    # Remove imported data

# Tools
freehand office read-docx <path>
freehand browser axtree <url>
freehand browser screenshot <url>

# Gateway
freehand gateway status
freehand gateway pair <phone>

OAuth Setup

See docs/OAUTH_SETUP.md for detailed instructions on registering apps with:

  • Google Cloud Console (Gmail, Calendar, Sheets, Meet)
  • Microsoft Entra ID (Outlook, Teams, Calendar)
  • Zoom Marketplace (Meetings, recordings)
  • Meta for Developers (Facebook, Instagram)
  • GitHub (PAT-based, no app registration needed)

Cross-Agent Memory Import

FreeHand can detect and import memories from other AI agents installed on your system:

Agent What gets imported
Hermes Agent SOUL.md, AGENTS.md, MEMORY.md, USER.md, config, 20+ skills, state.db (selective)
OpenClaw SOUL.md, IDENTITY.md, MEMORY.md, USER.md, AGENTS.md, journal entries

Run freehand agents list to detect, then freehand agents import hermes --state to import.

Architecture

┌─────────────────────────────────────────────┐
│  Web UI  (static/index.html)                │
│  http://localhost:8000                      │
└──────────────────┬──────────────────────────┘
                   │ FastAPI
┌──────────────────▼──────────────────────────┐
│  server.py     core/                        │
│  ┌─────────────┴─────────────────────────┐  │
│  │  /api/agent/command    ← LLM agent    │  │
│  │  /api/integrations/*   ← OAuth flows  │  │
│  │  /api/agents/*         ← import mgmt  │  │
│  │  /api/tools/*          ← tool API     │  │
│  └───────────────────────────────────────┘  │
│                                             │
│  core/agents/     ← detection & import      │
│  core/oauth/      ← token management        │
│  core/tools/      ← office, browser, integrations│
│  core/memory/     ← FTS5 search           │
│  core/security/   ← permission tiers        │
│  core/gateway/    ← Telegram/Slack/WhatsApp │
│  core/scheduler/  ← cron-based sweep      │
└──────────────────┬──────────────────────────┘
                   │
┌──────────────────▼──────────────────────────┐
│  vault/              ← user data            │
│  agent.db            ← SQLite (FTS5)       │
│  connections.json    ← encrypted tokens    │
│  imports/hermes/     ← imported memories   │
│  imports/openclaw/   ← imported memories   │
└─────────────────────────────────────────────┘

API Endpoints

Method Path Description
GET /api/v1/status Service status
POST /api/agent/command Run agent command
GET /api/integrations List integrations
GET /api/integrations/{service}/authorize Get OAuth URL
GET /api/integrations/callback/{service} OAuth callback
POST /api/integrations/{service}/disconnect Remove connection
GET /api/agents Detect installed agents
POST /api/agents/import Import from agent
GET /api/agents/imported Import history

Full API reference: API Documentation

Security

  • All OAuth tokens are encrypted at rest using Fernet (AES-128-CBC + HMAC-SHA256)
  • Encryption key is auto-generated on first run at vault/encryption.key (mode 0o600)
  • Permission tiers enforce approval workflows for write operations
  • Nango removed — all OAuth is handled in-process
  • No telemetry or data collection

License

MIT — see LICENSE

Contributing

See CONTRIBUTING.md

Changelog

See CHANGELOG.md

Links

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

freehand_agent-0.1.6.tar.gz (58.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freehand_agent-0.1.6-py3-none-any.whl (70.1 kB view details)

Uploaded Python 3

File details

Details for the file freehand_agent-0.1.6.tar.gz.

File metadata

  • Download URL: freehand_agent-0.1.6.tar.gz
  • Upload date:
  • Size: 58.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for freehand_agent-0.1.6.tar.gz
Algorithm Hash digest
SHA256 038efbc64d656deaaf0af4eda52e4ae13e0f1d7bc5ee596d8fe4a8bdf0028042
MD5 333a72cb2f990a1a7194fd187c134c2e
BLAKE2b-256 9adc9b958dbbb46ee2870a14b4082f5c76e4b6844e3c7e4038fa50cd10df1f86

See more details on using hashes here.

File details

Details for the file freehand_agent-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: freehand_agent-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 70.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for freehand_agent-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 b7572879b07d262ac9cbea0d16cd65451cbca9e00475449020e7ffc647c5ae48
MD5 9152b15dcf96e9fca919edb24217803e
BLAKE2b-256 6f73ea2f2d274d25df4a8ae8b4735e7996a823fd4357258c3d352e60d4408727

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page