← Portfolio Showcase Open Source — Maintained

Disclaude Sesh

A two-bot Discord bridge for running Claude Code on a headless server — start, drive, and supervise AI sessions from a phone, from anywhere. MIT-licensed and published with full documentation and versioned releases.

The Gap

The missing start button.

The problem

Claude Code's remote interfaces — Remote Control, the mobile app, channel plugins — can only attach to a session that is already running. That's fine on a laptop. On an always-on server, where the CLI and the workspace live and every other machine is just a window into them, it becomes the lockout: forget to start a session before leaving, let one crash or time out, or reboot the box, and the AI is unreachable until you can SSH back in. There is no native way to start a session remotely on a headless server.

The answer

A supervisor bot that is deliberately dumb: four fixed commands mapped straight to systemd, a single-user allowlist, and no shell passthrough by design. Send !start from a phone and the session comes up on the server; the official channel plugin then carries the whole conversation — including tool-approval buttons — inside Discord. Everything conversational goes to one bot, everything operational to the other.

How It Works

Two bots, split on purpose.

Supervisor Bot

Bun + discord.js, roughly a hundred lines — !start !stop !restart !status drive a systemd user unit; strangers are silently dropped by a user-ID allowlist

Channel Plugin

The official Claude Code Discord plugin carries messages into the live session and replies back out — DM or channel, no @-mention needed once paired

Approvals on the Phone

Tool permission prompts arrive as Allow/Deny buttons in Discord; an optional patch moves them from DMs into the ops channel without granting anyone else approval power

Unattended Resilience

systemd user units with linger survive reboots, tmux survives dropped connections, a restart loop survives crashes — proven with an unattended reboot test before release

Security Model

Zero inbound ports — both bots are outbound gateway clients. Tokens live in one chmod-600 config file; sender allowlists gate both bots; permission prompts stay on by default

Auto-Repatcher

Plugin updates silently revert local patches — a pre-launch check re-applies the channel-buttons patch, verifies it still compiles, and posts a Discord notice either way

On GitHub

Built to be installed by strangers.

aerwk/disclaude-sesh

Published under the MIT licence with semver releases. The README documents two installation paths: a full manual tutorial for humans who want to understand every step, and a single copy-paste prompt that hands the entire server-side setup to Claude Code — the human only does the two things it can't: click through the Discord Developer Portal and send a pairing DM.

MITDiscordTypeScriptBunsystemdtmuxClaude Code

Docs

Installation (manual and AI-assisted), usage and commands, security notes, troubleshooting, uninstall — plus a full write-up of the optional channel-buttons patch and its safety model

Defaults

The risky conveniences are opt-in flags, not out-of-the-box behaviour: permission prompts stay on, the plugin patch stays off, and every identifier in the repo is a placeholder

View the repository → Read the build story →