I started LawyerCord in July because I wanted a Discord client that did what I wanted by default. It has grown into something much bigger than that, and it's now the project I'm most attached to.
It began as a fork of ProtonnCord, which is built on Equicord, which is built on Vencord. I never set out to write a Discord client from scratch. Upstream has years of work in it. I wanted that work, with different defaults and a few things of my own on top.
The defaults came first
A Discord client does a lot of things you never asked it to. LawyerCord ships with NoTrack switched on, which kills Discord's analytics, metrics, and Sentry reporting. Cloud settings sync is off. Source auto-updates are off. So are the riskier plugins I wrote, including the MCP bridge, secure messaging, and voice transcription. If something reaches outside my machine, I want to have turned it on myself.
None of that makes a client mod safe. It just means nothing is running in the background that I didn't choose.
Then automations happened
This is the part I did not plan and now can't work without.
LawyerCord has a visual automation builder. You pick a trigger, then drag together the blocks that run when it fires. There are five triggers: a schedule, a mention, any message, a DM, or client startup. From there you get around fifty blocks, grouped into messages, commands, client actions, data, AI, waits, interactions, flow, and variables.
That means you can do things like:
- Wait for a reply in a specific channel, then react to it and pin it
- Fetch your unread mentions on startup and summarise them
- Run a slash command on a schedule
- Read a value out of a JSON response, branch on it, and loop a few times
- Click a button or submit a modal in someone else's message flow
Flow control is real too. There are conditionals, repeats, breaks, and a chance block that runs a branch a percentage of the time, which is more fun than it sounds.
The AI blocks are the one piece that leaves the machine. They go through OpenRouter, so you need your own API key, and the key lives in the operating system's credential vault rather than in a config file. Those blocks can prompt a model, summarise text, classify something, or pull structured JSON out of a mess. Everything else in the automation engine runs locally in the client, using Discord's own internal stores.
I put limits in because runaway automations are the obvious failure mode. Fetches cap at 100 messages. Waits time out and fail the run instead of hanging forever. Logs cap at 100 entries. You can export an automation to a file and import it somewhere else.
The control panel
The other thing I lean on constantly is the control panel. It only binds to 127.0.0.1, it needs a capability token in the URL, and CORS is off.
Inside it, there's a local semantic search index over the channels I explicitly approve, encrypted at rest through Electron's safeStorage. There's an evidence export that redacts personal data, hashes every file with SHA-256, and chains the manifest, so if I ever need to show that a screenshot wasn't edited after the fact, I can. And there's a generated inventory of every installed plugin: which external domains it touches, what it stores, what capabilities it wants. That last one is mostly for my own peace of mind.
The rest of it
Along the way I added the features I kept wishing existed. My own Fake Nitro implementation. A Roblox activity plugin, because I spend most of my time in Roblox Studio and wanted that on my profile. Local voice message transcription, where the model actually runs on your machine. An optional secure messaging layer that encrypts message bodies and attachments before Discord sees them, though Discord still sees who you talked to and when, and I'm upfront about that.
It's TypeScript and Electron, built with esbuild, released through GitHub Actions on nightly, beta, and stable channels. CI scans the release artifacts for anything token-shaped before they go out.
It's still a fork, and that matters
The foundation is upstream work. ProtonnCord, Equicord, and Vencord did the hard part, the license stays GPL-3.0, and the attribution stays in the repo.
One thing I'll say plainly, the same way the README does: client mods violate Discord's terms of service. Running one puts your account at risk. I run mine anyway, but that's my choice to make and I'm not going to pretend the risk isn't there.