oldjard
← the shelf

jardbot

An always-on Discord bot that bridges a channel to Claude Code, with a layered safety system and approval buttons.

running
commits
421
last 30 days
148
first commit
Feb 5, 2026
last commit
Oct 7, 2026
stack
Bun, TypeScript, Discord.js

Counted from git on Oct 15, 2026. Services checked live at the same build.

You message the bot in Discord and it forwards the request to Claude Code’s CLI, so Claude can edit files, run commands and search code from your phone. Every tool use goes through a rules engine: dangerous operations are denied automatically, safe reads are allowed, and everything else shows Approve/Deny buttons in Discord that default to deny after five minutes. Only one authorized user can talk to it.

It also has secret redaction, an append-only audit log, directory scoping, a two-hour limit on unattended runs, optional semantic memory, cron jobs, and an observability dashboard. It has since grown a phone app and web inbox. It runs in production on my home server as systemd user services (gateway, bridge, speech transcription), with a health watchdog. The source repo is private, so there is no link.

Draft for Jard to edit — written from repo evidence

What I learned / would do differently

  • Putting the safety layer first (deny, allow, ask) is what made it comfortable to run unattended; it’s the part I’d keep in anything similar.
  • The docs directory has several overlapping roadmaps and plans (autonomy, security, mobile, pocket-ai). One current roadmap would be easier to keep honest.
  • It outgrew “a Discord bot” into a small platform. Naming and structure that reflected that earlier would have helped.