mothermachine

Browse / Invoicing and finance

Clawbolt

Messaging-first AI assistant for tradespeople: estimates, QuickBooks invoices and calendar from a text thread.

Adaptable Agent workflowAgent Hybrid PythonTypeScript License: Apache-2.0

Mozilla.ai's self-hosted assistant that a contractor texts over Telegram, iMessage, RCS or SMS to log jobs, catalog photos, create QuickBooks Online estimates and invoices and schedule work. It runs on any LLM through any-llm. The surface an Adopter changes is the .env: provider, model, messaging channel, QuickBooks and Google credentials, heartbeat cadence.

Use it when
  • I run a trade business from my phone and want to text an assistant that raises QuickBooks estimates and books jobs
  • I am an agency standing up a branded assistant for contractors and want to swap the model and channel without touching code
Gotchas
  • QuickBooks and Google Calendar integrations are marked experimental in the README
  • Inbound webhooks need a public URL; the compose stack registers one through a Cloudflare Tunnel
  • There is no agent-facing API or MCP: the assistant is driven by humans over messaging, so this is listed as Adaptable only

Last activity Sep 3, 2026. Fit: adaptable 3, operable 1.

Editions

Free · Free open source

  • Clonegit clone https://github.com/mozilla-ai/clawbolt
  • ImageContainer

For agents: JSON · Markdown

Adaptable: what is yours to change

Make it yours

Config only23 things to edit

Copy .env.example, pick an LLM provider and model, wire one messaging channel (Telegram is the easy path; Linq, BlueBubbles or Twilio for iMessage/RCS/SMS), and optionally add QuickBooks Online and Google OAuth clients. Heartbeat cadence, context limits and multi-user mode are env knobs; docs/self-host/configuration.md documents every variable.

Env vars
LLM_PROVIDER LLM_MODEL LLM_API_BASE VISION_MODEL MESSAGING_PROVIDER TELEGRAM_BOT_TOKEN TELEGRAM_ALLOWED_CHAT_ID LINQ_API_TOKEN TWILIO_ACCOUNT_SID QUICKBOOKS_CLIENT_ID QUICKBOOKS_CLIENT_SECRET QUICKBOOKS_ENVIRONMENT GOOGLE_DRIVE_CLIENT_ID AUTH_MODE JWT_SECRET DATABASE_URL HEARTBEAT_ENABLED HEARTBEAT_DEFAULT_FREQUENCY HEARTBEAT_MAX_DAILY_MESSAGES APP_BASE_URL ENCRYPTION_KEY
Config files
.env docker-compose.yml
Prompt files
none
Accounts you need
LLM provider account (or any-llm.ai key)Telegram bot from BotFather, or Linq / Twilio / BlueBubbles for iMessage and SMSIntuit developer account for QuickBooks Online (optional)Google Cloud OAuth client for Drive and Calendar (optional)

Source

Code stack

Languages
PythonTypeScript
Frameworks
FastAPIany-llmReact
Package manager
uv/pip
Database
PostgreSQL
Hosting target
Docker ComposeCloudflare Tunnel for webhooks
Built
Mixed (recorded, never ranked)

Model stack

Providers
any provider supported by any-llm (Anthropic, OpenAI, local through LLM_API_BASE)
Models
none
Keys you need
LLM_PROVIDER LLM_MODEL ANY_LLM_KEY LLM_API_BASE
Prompts live in
none

Skills

Clawbolt's backend agent loads SKILL.md files as its runtime integration definitions (QuickBooks, ServiceTitan, CompanyCam, calendar, AppFolio).

Kind
bundled
Paths
backend/app/agent/skills/file/SKILL.md backend/app/integrations/*/SKILL.md

Evidence and confidence

FieldWhere it was seenConfidence
formFactorlong-running assistant with agent loop, heartbeat scheduler and messaging webhooks (configuration.md sections Agent loop, Heartbeat)90%
executionModelfixed orchestration with tool calls, MAX_TOOL_ROUNDS, approval timeouts; model does bounded work85%
operabilitybackend/app/routers serve the web chat UI and admin; no documented MCP, SDK or public API for outside agents70%
effort.env.example plus docs/self-host/configuration.md full variable reference90%
editionsApache-2.0 source; no paid edition seen–
activeGitHub pushedAt 2026-09-03; Show HN 2026-03-03–
reach0%

Open questions

  • Whether the per-user BOOTSTRAP.md under DATA_DIR is an editable system-prompt surface (would add a prompt file to the Customization surface)
  • Triage scored Operable 2 on the messaging channels; this analysis treats human messaging as not an agent interface. Curator to decide.

Sources