{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "mozilla-ai--clawbolt",
    "name": "Clawbolt",
    "tagline": "Messaging-first AI assistant for tradespeople: estimates, QuickBooks invoices and calendar from a text thread.",
    "shortTagline": "AI assistant for tradespeople",
    "description": "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.",
    "capabilities": [
      "adaptable"
    ],
    "vertical": "invoicing-finance",
    "alternativeTo": [
      "Jobber",
      "Housecall Pro"
    ],
    "shape": "agent-workflow",
    "formFactor": "agent",
    "executionModel": "hybrid",
    "provenance": "mixed",
    "codeStack": {
      "languages": [
        "Python",
        "TypeScript"
      ],
      "frameworks": [
        "FastAPI",
        "any-llm",
        "React"
      ],
      "packageManager": "uv/pip",
      "database": [
        "PostgreSQL"
      ],
      "hostingTarget": [
        "Docker Compose",
        "Cloudflare Tunnel for webhooks"
      ]
    },
    "modelStack": {
      "providers": [
        "any provider supported by any-llm (Anthropic, OpenAI, local through LLM_API_BASE)"
      ],
      "models": [],
      "requiredKeys": [
        "LLM_PROVIDER",
        "LLM_MODEL",
        "ANY_LLM_KEY",
        "LLM_API_BASE"
      ],
      "promptLocations": [],
      "tools": [
        "QuickBooks Online (experimental)",
        "Google Calendar (experimental)",
        "Google Drive",
        "photo analysis",
        "memory"
      ]
    },
    "repos": [
      {
        "url": "https://github.com/mozilla-ai/clawbolt",
        "owner": "mozilla-ai",
        "name": "clawbolt",
        "license": "Apache-2.0",
        "stars": 102,
        "lastCommit": "2026-09-03"
      }
    ],
    "interface": null,
    "operability": null,
    "recommendedWrapper": null,
    "reach": null,
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/mozilla-ai/clawbolt"
          },
          {
            "kind": "container",
            "url": "https://github.com/mozilla-ai/clawbolt/blob/main/docs/self-host/docker.md",
            "command": "cp .env.example .env && docker compose up --build"
          }
        ]
      }
    ],
    "skills": {
      "kind": "bundled",
      "paths": [
        "backend/app/agent/skills/file/SKILL.md",
        "backend/app/integrations/*/SKILL.md"
      ],
      "install": null,
      "note": "Clawbolt's backend agent loads SKILL.md files as its runtime integration definitions (QuickBooks, ServiceTitan, CompanyCam, calendar, AppFolio)."
    },
    "customization": {
      "summary": "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.",
      "envVars": [
        "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"
      ],
      "configFiles": [
        ".env",
        "docker-compose.yml"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 23
    },
    "useWhen": [
      "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"
    ],
    "accounts": [
      "LLM provider account (or any-llm.ai key)",
      "Telegram bot from BotFather, or Linq / Twilio / BlueBubbles for iMessage and SMS",
      "Intuit developer account for QuickBooks Online (optional)",
      "Google Cloud OAuth client for Drive and Calendar (optional)"
    ],
    "active": true,
    "lastActivity": "2026-09-03",
    "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"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 1
    },
    "evidence": {
      "formFactor": "long-running assistant with agent loop, heartbeat scheduler and messaging webhooks (configuration.md sections Agent loop, Heartbeat)",
      "executionModel": "fixed orchestration with tool calls, MAX_TOOL_ROUNDS, approval timeouts; model does bounded work",
      "operability": "backend/app/routers serve the web chat UI and admin; no documented MCP, SDK or public API for outside agents",
      "effort": ".env.example plus docs/self-host/configuration.md full variable reference",
      "editions": "Apache-2.0 source; no paid edition seen",
      "active": "GitHub pushedAt 2026-09-03; Show HN 2026-03-03"
    },
    "confidence": {
      "formFactor": 0.9,
      "executionModel": 0.85,
      "operability": 0.7,
      "effort": 0.9,
      "reach": 0
    },
    "openQuestions": [
      "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": [
      {
        "url": "https://github.com/mozilla-ai/clawbolt",
        "foundBy": "sourcing:invoicing-finance:community"
      },
      {
        "url": "https://github.com/mozilla-ai/clawbolt/blob/main/docs/self-host/configuration.md",
        "foundBy": "analysis:invoicing-finance"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Strong Adaptable: owner-documented env surface, config-only, Apache-2.0, Mozilla.ai Builder. Listed Adaptable only because the drive surface is human messaging, not an agent interface.",
      "disputed": [
        "operable capability: triage said 2, analysis says none"
      ]
    },
    "url": "apps/mozilla-ai--clawbolt.html",
    "coverage": null,
    "paid": false,
    "source": "research/verified/mozilla-ai--clawbolt.json"
  }
}
