I Shipped My First Open Source Project
Vinay Patankar · 22 May, 2026 · Technology
I shipped my first open-source project.
It is called Threadkeep. It is a persistent Discord conversation orchestrator for Claude Code.
I built it over the last six weeks for my own setup, and only made it public after I had been running it on my own machine long enough to trust it.
The problem it solves is small but annoying. Anthropic’s official Claude Code Channels plugin gives you a single Discord channel for your agent. It works, but the session does everything inline. If a conversation takes five minutes, the listener is dead for five minutes. Anything inbound during that window queues up behind the active task.
For me, that broke the whole point of having an agent on Discord in the first place.
So I separated the listening from the working.
Threadkeep treats every top-level Discord post as a new thread. Each thread spawns its own background Claude Code subagent that does the actual work and replies inside the thread. The listener stays free, picking up new messages, while the subagents grind on the longer tasks in parallel.
A few things ended up inside the repo as a result:
A Discord gateway client and interaction router so native buttons work, not just text.
Conversation transcripts stored as markdown with YAML frontmatter, so the whole history is greppable, diffable, and easy to back up.
A sha-matched outbound approval gate. When the agent wants to send a message that touches the outside world, it shows me the exact draft with a button. I click approve. The marker-watcher daemon picks up the approval and sends. No typed tokens, no copy-paste.
A per-skill P0 rules layer so workers do not ship anything outbound without explicit approval, even when they think the instruction told them to.
None of this is novel as a category. The novel part for me was the decision to separate listening from working, and the discipline of treating every outbound action as a gate, not a permission.
Two things I learned shipping this:
First, the gap between “works for me” and “safe to share publicly” is mostly sanitization, not code. Pulling out the secrets, the personal channel IDs, the half-finished scripts, and the things I built around my specific setup took longer than I expected.
Second, an open-source release forces you to write the README you should have written for yourself six weeks ago. The act of explaining the system to a stranger surfaced three small bugs I had been quietly working around.
The repo is up at Threadkeep on GitHub. MIT license. If you are running Claude Code through Discord and the inline blocking thing bothers you the way it bothered me, take a look.
This is the first time I have ever put something I built on GitHub for anyone to use. I am sure version one is rough in ways I will only learn from people running it. That is fine. The point right now is the start.