Gyred
Gyred wires together the tools AI agents actually work in: Claude Code and Codex as session engines, repositories through vulp and gh, notifications on Discord, Telegram and Web Push, and an MCP server the sessions use themselves. A plugin adds a notification channel, a tool for sessions, a screen or an account usage reader, and the Discord bridge gives every session its own text channel.
Overview
Gyred is a control room for running many AI agent sessions at once. It does not write code itself: it sits between the tools where the work actually happens and ties them into one place. The model engine, the repository, the account with a token limit, the messenger where a person learns that something is waiting, and an MCP server the sessions use themselves.
One rule shapes every one of these integrations: Gyred is never a gate. Every session it shows can be opened, answered and stopped without it, and anything you start yourself in a terminal shows up in it without being moved or renamed.
Two engines, one session list
Gyred finds Claude Code sessions with claude agents, reads the conversation from their transcripts and writes into a live session by attaching to it, so the session stays open in your terminal. A stopped one is resumed rather than replaced. Codex threads are read and started through the CLI's own app-server protocol, and messages are queued into a running thread the same way its own client does it.
Both engines keep credentials in a separate directory per account, and Gyred watches each one on its own. Every account gets a usage ceiling and a daily share, and when an account nears its limit, new sessions go to an account with headroom.

Repositories through vulp and gh
Gyred reads repository state where the repositories actually live, on the machine with the session. Before a commit it shows a file-by-file review with the full diff, lets you revert one file and check which session changed it. Pull requests, issues and build state go through the tools the machine names: vulp for the whole workspace and gh for GitHub by default.
A machine running a model needs no fixed address and no open port. The Gyred node dials out to the server itself, so sessions on a laptop, a build server and a staging box land on one list.
An MCP server for the sessions themselves
Sessions need to know what is going on around them too, so Gyred gives them an MCP server. Through it an agent asks about things it would otherwise have to guess or be told again in every message.
which project this is and what the work plan says right now.
other sessions in the same project, so two of them do not change the same file.
a port from the range set for sessions and a secret given by name, without pasting it into the conversation.
a question that lands in the queue of things waiting for a decision.
anything touching production waits for a person and leaves a trace behind.
Notifications
Gyred notices when a session is waiting for a person, when it has gone quiet, when it has used the tokens it was given and when an account is nearly full. It sends that over the channels the instance has configured: Discord, Telegram and Web Push. "In 15 minutes" means the matter really comes back in 15 minutes, several notices can be gathered into one message, and quiet hours hold back everything that is not urgent.

The Discord bridge
A separate bridge connects Gyred to the owner's Discord server. The assistant has its own channel where you talk to it like in a chat, and every other session can get its own text channel named after the session title, with its state as the channel topic.
In offer mode a session's first output posts a proposal, and the channel is opened only after the owner reacts. Channels of ended sessions move to an archive and come back when the session does. Only the owner's messages are passed to Gyred, and a config with a typo stops the bridge at start-up instead of being quietly ignored.
Plugins and speech
A plugin is a directory with a manifest and an address. It can add a notification channel, a tool for sessions, a screen in the app, a reader that says how full an account is, and a subscription to everything that happens. Whatever it changes, it changes through the same API a client uses, with its own token.
Voice messages are turned into text by a command set in the settings: Gyred writes the recording to a temporary file, runs the command, takes its output and deletes the file. That can be a local Whisper, a small model on a CPU or any service that prints text.
Questions about Gyred
More projects
More work from the same category - see how we tackle similar challenges.
Have a similar project?
Get in touch - a quote is free and comes back within an hour.



