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
- Source: https://github.com/TracySmithConsulting/freehand
- PyPI: https://pypi.org/project/freehand-agent/
- Issues: https://github.com/TracySmithConsulting/freehand/issues
- Setup Guide: docs/OAUTH_SETUP.md
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file freehand_agent-0.1.7.tar.gz.
File metadata
- Download URL: freehand_agent-0.1.7.tar.gz
- Upload date:
- Size: 93.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de404a99ab7dfcf72a4b2012f3dbcfb01b5b0798b135d4408e02e2eec554c23e
|
|
| MD5 |
d2fd1124bf2d636de9462126b8b1f101
|
|
| BLAKE2b-256 |
21d62194483487fe9fdd9409f8668e2357fe12f4d3b5c86f2b5348f8389a7b5a
|
File details
Details for the file freehand_agent-0.1.7-py3-none-any.whl.
File metadata
- Download URL: freehand_agent-0.1.7-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee2987fad487e0445ec9ecf0c3f5872045f604d7e79f74ef2da473008a0ea17c
|
|
| MD5 |
2d65c509a4760fc6a510bb94d851864a
|
|
| BLAKE2b-256 |
e7b3a7407c04f2a4e5f422d0f10b9ee25f81f6cac8b54d4a3a035179faa46461
|