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.8.tar.gz (93.2 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.8-py3-none-any.whl (105.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: freehand_agent-0.1.8.tar.gz
  • Upload date:
  • Size: 93.2 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.8.tar.gz
Algorithm Hash digest
SHA256 eb177f1e251511000a371f23b7403cee4e87a59aee5ca5ac8c83a7d1111f6996
MD5 d5507a5d58e8aec403cf660bf266d8e2
BLAKE2b-256 30257415f160f525656257d08ef1215553d2d3cef5445ad116ecdb78c20d7487

See more details on using hashes here.

File details

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

File metadata

  • Download URL: freehand_agent-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 105.5 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.8-py3-none-any.whl
Algorithm Hash digest
SHA256 8de7043f21c207ad31aaba84c78ece70ee5780b204a1939371ee025957add8cc
MD5 9fd213d64f523a7a3d9aaf96561018a1
BLAKE2b-256 e02e8e49d223700386baa329fb3339356f329eef0b7857af06c8dda43ac3e8c8

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