Skip to content

openclaw/hermit

Repository files navigation

Hermit (Cloudflare Worker)

Discord bot built with Carbon on Cloudflare Workers.

Stack

  • @buape/carbon
  • Cloudflare Workers (@buape/carbon/adapters/fetch)
  • Gateway forwarding: forwarder/ Bun process using GatewayForwarderPlugin
  • Cloudflare D1 + Drizzle ORM

Setup

  1. Install deps:
bun install
  1. Create .env from .env.example.

Required:

BASE_URL=
DEPLOY_SECRET=
DISCORD_CLIENT_ID=
DISCORD_PUBLIC_KEY=
DISCORD_BOT_TOKEN=

Optional:

DISCORD_DEV_GUILDS=
FORWARDER_PUBLIC_KEY=
ANSWER_OVERFLOW_API_KEY=
HELPER_THREAD_WELCOME_PARENT_ID=
HELPER_THREAD_WELCOME_TEMPLATE=
THREAD_LENGTH_CHECK_INTERVAL_HOURS=
  1. Configure wrangler.jsonc D1 binding:
  • set d1_databases[0].database_id to your real D1 database id
  • keep binding = "DB"
  1. Apply D1 migrations:
bun run db:apply:local
# or
bun run db:apply:remote
  1. Run locally:
bun run dev

Scripts

  • bun run devwrangler dev --env-file .env
  • bun run deploy → deploy worker locally with .env
  • bun run deploy:cf → apply remote D1 migrations, then deploy Worker for Cloudflare Builds
  • bun run deploy:dry-run → validate the Worker bundle without deploying
  • bun run cf-typegen → regenerate worker-configuration.d.ts
  • bun run typecheck → TypeScript check
  • bun run db:generate → generate Drizzle SQL
  • bun run db:apply:local / db:apply:remote → apply D1 migrations

CI/CD

Cloudflare Workers Builds deploys pushes to main. The deploy command should apply D1 migrations before deploying the Worker:

bun run deploy:cf

Drizzle only generates SQL migrations. Wrangler applies them to D1:

bun run db:generate
bun run db:apply:remote

Gateway forwarder

The main bot runs as a Cloudflare Worker. Gateway events are forwarded by the Bun app in forwarder/, usually running on Krill's machine.

Forwarder setup:

cd forwarder
bun install
bun run dev

Forwarder production start:

cd forwarder
bun run start

Forwarder env:

BASE_URL=
DEPLOY_SECRET=
DISCORD_CLIENT_ID=
DISCORD_PUBLIC_KEY=
DISCORD_BOT_TOKEN=
FORWARDER_PRIVATE_KEY=

The Worker must have the matching public key:

bunx wrangler secret put FORWARDER_PUBLIC_KEY

Notes

  • Answer Overflow base URL is hardcoded to https://www.answeroverflow.com.
  • Helper thread monitor runs via Worker cron (wrangler.jsonc triggers.crons).
  • The old Cloudflare Gateway Durable Object path is not the active gateway setup.

About

No description, website, or topics provided.

Resources

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Contributors