{"@attributes":{"version":"2.0"},"channel":{"title":"DEV Community: AgentConnect","description":"The latest articles on DEV Community by AgentConnect (agentconnect).","link":"https:\/\/dev.to\/agentconnect","image":{"url":"https:\/\/media2.dev.to\/dynamic\/image\/width=90,height=90,fit=cover,gravity=auto,format=auto\/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14461%2F09640725-59d8-47af-bb3e-9887b6402707.png","title":"DEV Community: AgentConnect","link":"https:\/\/dev.to\/agentconnect"},"language":"en","item":[{"title":"How we moved our agents from personal terminals into team channels","pubDate":"Fri, 06 Nov 2026 00:44:17 +0000","link":"https:\/\/dev.to\/agentconnect\/how-we-moved-our-agents-from-personal-terminals-into-team-channels-1h8a","guid":"https:\/\/dev.to\/agentconnect\/how-we-moved-our-agents-from-personal-terminals-into-team-channels-1h8a","description":"<p>In six months, a team of under ten went from editor autocomplete to about thirty agents with standing jobs, from cluster checks and code review to releases, fork maintenance and customer support, plus the permissions and context sharing around them.<\/p>\n\n<p>Over the past few months, AI has fundamentally changed how our team works. Much of our recurring work is now genuinely automated by agents: the daily cluster inspection and alert analysis, pull request review, maintenance of an upstream fork, release notes, and answering questions in customer groups. We are an engineering team of fewer than ten people.<\/p>\n\n<h2>\n  \n  \n  A year ago\n<\/h2>\n\n<p>A year ago, \"using AI\" meant an editor with AI in it: completions, rewriting a function, explaining unfamiliar code. Everyone used it, and nothing about how the team worked changed. The output was still a diff on someone's machine. Nobody else saw the conversation, and there was nothing in it worth seeing.<\/p>\n\n<p>We did not build anything around it. The models were not yet at the point where you could hand them a task and walk away.<\/p>\n\n<p>The turning point was Claude Opus 4.6. It was the first model we used that was worth building around: give it a task and it runs commands, reads the results and keeps going. Within weeks Claude Code and Codex were everyone's daily tools.<\/p>\n\n<p>Then people started giving them work other than code. A production error: let an agent take the first look. An upstream release: let an agent upgrade our fork. Inspect the cluster every morning. Take customer questions. Within a month every engineer had accumulated a pile of their own glue: shell scripts, cron entries, a bot token in a dotfile, a prompt that stitched together the context the agent needed.<\/p>\n\n<h2>\n  \n  \n  Two problems\n<\/h2>\n\n<p>The first was duplication. When we compared what each of us had written, it was nearly the same: how messages get in and out, how to schedule, where credentials live, how to assemble context. Everyone had done it once, and each copy only ran on its owner's machine.<\/p>\n\n<p>The second was lost context. The most useful part of a session is usually not the final diff but the process in the middle: what was tried, what failed, why this fix over that one, which dashboard had the answer. All of it sat in one person's terminal and was gone when the session ended. When someone else needed it, the only way to get it was a meeting.<\/p>\n\n<h2>\n  \n  \n  Two weeks of Slack bots\n<\/h2>\n\n<p>In June we tried the most direct approach: a set of Slack bots built on the open-source OpenACP, changed so that each thread in an existing channel became one session.<\/p>\n\n<p>Someone mentioned an agent in an incident thread, the rest of the team watched what it was checking, and asked follow-up questions in the same thread. Colleagues outside engineering started using the bots too; a mention in Slack is all it takes.<\/p>\n\n<p>Then came two weeks of patches, all about threads: carrying the earlier thread into a mid-thread mention, backfilling messages the bot had missed, stopping bots from triggering each other in a loop. The software had no concept of \"a conversation with several people and several bots in it\", and we were bolting one on.<\/p>\n\n<ul>\n<li><p>One platform app with several agents behind it, instead of one process, one Slack app and one set of tokens per bot<\/p><\/li>\n<li><p>Separate identities for several users, instead of one shared login on one machine<\/p><\/li>\n<li><p>A real control plane, instead of a bot that ran operational shell commands from the chat<\/p><\/li>\n<li><p>Versioned daemons with controlled upgrades<\/p><\/li>\n<li><p>Sessions that survive a restart, each with its own workspace, instead of one directory shared by every thread<\/p><\/li>\n<li><p>Conversations and threads as core concepts, not adapter patches<\/p><\/li>\n<\/ul>\n\n<p>We also tried replacing the whole thing with Hermes. Its demo covered most of what we wanted: loops, proactive messages, a kanban board and memory, all built in. We moved a rebase bot onto it and ran it for a day. The biggest problem was that it had no team layer: who may use which agent, who may see its sessions, which repositories and tools an agent may touch. There was no permission model; the whole thing assumed one user. Beyond that, its own harness and Claude Code ran interleaved inside one task, and without the coding agent's cache and resume, every turn re-sent the full context, so latency and cost were both high. When something failed, we could not tell which layer had failed. This describes the version we tried at the time; Hermes has changed a great deal since.<\/p>\n\n<p>Two decisions from that time have not changed: permissions are part of the platform, not a feature to add later; and we keep the harness engineers already run locally, so that any behaviour seen in a channel can be reproduced in a terminal.<\/p>\n\n<p>We built the connecting layer ourselves, on ACP, and open-sourced it a month later as AgentConnect.<\/p>\n\n<h2>\n  \n  \n  What the agents do now\n<\/h2>\n\n<p>The production organization was created on a Sunday in July. By Tuesday six agents were running, the same jobs people had been running from personal scripts, now each with a name, a channel and a machine. Today:<\/p>\n\n<ul>\n<li><p>About thirty agents: one generalist, the rest specialists<\/p><\/li>\n<li><p>Running on seven of our own machines plus a managed pool<\/p><\/li>\n<li><p>Connected to Slack, Telegram, Discord and Linear<\/p><\/li>\n<li><p>Twenty-odd scheduled jobs<\/p><\/li>\n<\/ul>\n\n<p>The generalist is connected to the development channel, direct messages and Linear. It can check out the team's repositories on demand, and anyone can mention it. Small changes are done right in the Slack thread: describe the problem, it edits the code, opens a pull request and runs the checks, and a person glances at it in the thread and merges, without opening a terminal.<\/p>\n\n<p>Each specialist owns one kind of work, with its own repositories, tools, channels and schedules, and permissions scoped to that work.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvto2n52e8zg5ceahkca.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvto2n52e8zg5ceahkca.png\" alt=\"The agent list in the console: each agent's runtime and model, the machine it runs on, and its repositories and integrations. Agent and repository names replaced with example values\" width=\"800\" height=\"415\"><\/a><\/p>\n\n<p><strong>Design documents and meetings.<\/strong> One agent owns documentation. Design discussions mention it in the development channel; it reads the current system and the existing design documents and proposes a path, colleagues add constraints in the thread, and it revises. Once the discussion settles, it opens a pull request that writes the conclusion into the matching design document under <code>docs\/<\/code>, reviewed together with the implementation. Every meeting is transcribed. We do not use the transcription service's own summaries; the raw transcript goes into a separate repository, the agent writes the summary there, and then updates the related issues and design documents in the other repositories.<\/p>\n\n<p>The documentation repository is organized by project, and each project has two parts, design documents and meetings:<br>\n<\/p>\n\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>agentconnect\/\n\u251c\u2500\u2500 design-docs\/                                   # reviewed as PRs\n\u2502   \u251c\u2500\u2500 agents-collaboration-design.md\n\u2502   \u2514\u2500\u2500 daemon-centric-architecture.md\n\u2514\u2500\u2500 meetings\/                                      # one pair per meeting\n    \u251c\u2500\u2500 2026-06-12-agents-collaboration-kickoff.txt          # raw transcript\n    \u2514\u2500\u2500 2026-06-12-agents-collaboration-kickoff-summary.md   # written by the agent\n<\/code><\/pre>\n\n<\/div>\n\n\n\n<p><strong>Inspection and alerts.<\/strong> One agent walks the cluster every morning and posts a report to the alerts channel. A few others each watch one class of service in a business area for latency and versions. When an alert lands in the channel, the on-call agent picks it up in the same thread: it checks Grafana metrics, looks at pods and logs, and compares against recent changes in the repository. Kubernetes and Grafana are MCP services, registered once at the organization level and enabled per agent. How each class of event should be handled is written as a skill in the repository: which metrics to check first, the common causes, what it may handle on its own and when it must call a person. When the procedure changes, the skill changes, and every on-call agent uses the new one from the next run. Whether it is an incident is the engineer's call.<\/p>\n\n<p><strong>Cross-model code review.<\/strong> Every pull request gets a first pass from the review bot, which leaves inline comments and posts its own check. The same review bot can switch runtime and model per pull request, and different models notice different things. Running on Codex, it reproduced a bug in <a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\/pull\/3453\" rel=\"noopener noreferrer\">one pull request<\/a>: editing a scheduled task's time before saving dropped the saved task's identity. It requested changes, and approved once the fix landed. Running on Claude, it approved <a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\/pull\/3347\" rel=\"noopener noreferrer\">another pull request<\/a> and listed exactly what it had not verified and was leaving to CI. For a deeper look, someone mentions a reviewer on a stronger model.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzarfme1bajp41kkg66af.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzarfme1bajp41kkg66af.png\" alt=\"The same review bot: running on Codex above, requesting changes; running on Claude below, approving and listing what it did not verify\" width=\"799\" height=\"433\"><\/a><\/p>\n\n<p><strong>Releases.<\/strong> Every merge to main produces a release candidate; a stable release points the release branch at a chosen commit. What happens after the release is the agent's job: confirm the release succeeded, read the pull requests between the two stable versions, group related pull requests into one feature entry, call out behaviour changes and upgrade notes separately, write that as the Summary at the top of the release page, and then comment on and close each issue the release fully fixed. The Summary on <a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\/releases\/tag\/v2.8.0\" rel=\"noopener noreferrer\">v2.8.0<\/a> came from this; the Features list below it is the generated changelog. The procedure is a skill, so the rules are the same whichever agent runs it.<\/p>\n\n<p><strong>The upstream fork.<\/strong> We maintain a fork of an upstream runtime adapter: the upstream tag plus a pile of our own patches. The patches carry logic, so when upstream refactors, the job is not resolving a few lines of conflict. It is understanding what upstream changed and what our patch was for, then re-implementing the intent on the new base. The whole thing goes to a coding agent: an upstream release or a schedule starts it, it reads both sides' changes, decides which patches are still needed, which upstream has absorbed and can be dropped, and which need rewriting, makes the changes in its own worktree, runs typecheck, tests and build, opens a pull request, and posts what needs a human judgement to the channel. That repository now has fourteen rebase branches, one per upstream version, with the check results beside each. Merging and publishing are done by a person.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0pyhiemhhpqkrmo1coer.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0pyhiemhhpqkrmo1coer.png\" alt=\"The rebase pull request the agent opened on the fork: which upstream changes it kept, how it adjusted each patch, which checks it ran, and the linked pull request that bumps the pin in the product repository\" width=\"800\" height=\"462\"><\/a><\/p>\n\n<p><strong>Customer group support.<\/strong> A support agent answers questions in customers' Telegram groups and escalates what it cannot answer to an engineering channel in Slack. The groups get a lot of spam, so each message is scored first; only messages under the threshold reach the support agent, and the rest go to a moderator agent. Replies about a specific account are confirmed by a person before they go out.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcypbcjgbjh2u08fq0uhl.webp\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcypbcjgbjh2u08fq0uhl.webp\" alt=\"The support agent hands a payment incident to the payments agent in Slack; the payments agent reproduces it and opens a pull request with the fix\" width=\"799\" height=\"530\"><\/a><\/p>\n\n<p>The generalist can reach many repositories and sits in public channels, private channels and direct messages at once, so permissions cannot be skipped. We handle them in three layers.<\/p>\n\n<p>The agent itself: who may change its configuration, which repositories and tools it may touch, who may use it in which channels, and which agents may call it or be called by it, each set separately.<\/p>\n\n<p>Sessions: who may read a session follows the membership of the place the conversation happened. A session in a private channel is readable only by people currently in that channel; whoever leaves the channel can no longer read it. Direct messages stay private. There is no separate list to maintain.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4n0sfak4m7pazoogljw.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd4n0sfak4m7pazoogljw.png\" alt=\"Session access in the organization settings: three switches make session visibility follow Slack, GitHub or Feishu\/Lark membership\" width=\"799\" height=\"214\"><\/a><\/p>\n\n<p>Memory is layered by where the conversation happened: what was said somewhere is remembered there. What an agent learns in a public channel goes into the shared layer, a private or external group gets its own layer, and a direct message gets that person's layer. When it answers, the agent loads only the memory the current conversation is allowed to read.<\/p>\n\n<p>Operations that need approval send an approval card by direct message to the agent's editors, rather than letting anyone in the channel approve.<\/p>\n\n<h2>\n  \n  \n  Where the context lives\n<\/h2>\n\n<p>What an agent produces has to be kept somewhere the team and the other agents can find later, with access still controlled by where it came from.<\/p>\n\n<p>Design documents live in the same repository as the code, under <code>docs\/<\/code>, with implementation status and links to issues and pull requests. The project instructions file says where the documents are and that a change to a design and its implementation go in the same pull request. The product repository has gone from 35 design documents at open-sourcing to 100 now. A reviewer reads the linked design document directly instead of asking the author to explain it in a meeting. Anything beyond a single repository, runbooks and architecture decisions, goes into the organization's knowledge library: owners publish it, it is versioned, and agents look it up on demand.<\/p>\n\n<p>How to handle a class of alert, how to write a release description, how to rebase the fork: each is a skill file, imported once and enabled per agent. Once, after the agent that checks the price list every day posted its report, a colleague asked in the thread whether it had failed to find the matching skill. It confirmed it had not found it and had instead done a read-only comparison following the channel's earlier practice. The colleague pointed out the skill was in the repository. The agent found it, confirmed its earlier search had skipped hidden directories by default, and recorded the problem in its working conventions for later runs.<\/p>\n\n<p>An agent's workspace is a Git repository, so what one agent writes, any agent's next session can read; the daemons on colleagues' own machines use the same repositories. Tickets are maintained by the agent doing the work: updated as it progresses, closed when done, linked to the documents and pull requests.<\/p>\n\n<p>The local Claude Code and Codex memory mechanism is unchanged; we only point the memory directory at a Git repository, with hooks that pull at session start and push at session end, so it is the same memory across machines and harnesses. The platform agents' memory is a separate system, layered by conversation source as described above. Merging the two is something we may do later.<\/p>\n\n<h2>\n  \n  \n  What's next\n<\/h2>\n\n<p>Today's agents are triggered by a mention, a schedule, a pull request or issue event, a webhook, or a judgement (is this spam, which agent should take it), and they do the one thing the trigger specifies.<\/p>\n\n<p>Proactive agents. Make the agent more like a teammate: it checks the things it is responsible for and proposes before acting. For example, it notices that a just-merged pull request changed behaviour and the matching design document was not updated, and proposes a documentation pull request in the development channel; or the same question has come up three times this week in a customer group, and it proposes writing the answer into the docs. It acts only once a person approves. This is in preview.<\/p>\n\n<p>Computer use. Some things have no API, only a desktop app or a browser. Register a machine as a Computer, grant it to specific agents, and they can take screenshots, click and type; a person watches the live screen in the console and can take over at any time. Also in preview.<\/p>\n\n<p>Joining meetings. Today a meeting is recorded, transcribed and processed afterwards by the documentation agent. Further out, the agent joins the meeting as a participant: it can be asked questions during the meeting, and decisions get written back to design documents and issues on the spot rather than afterwards. This has not started.<\/p>\n\n<p>AgentConnect is open source under Apache 2.0 and deploys with Docker Compose or Kubernetes. If you hit a problem, open an issue; if you find it useful, you are welcome to star the repository.<\/p>\n\n<p><a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">https:\/\/github.com\/agentconnect-md\/agentconnect<\/a><\/p>\n\n<p><a href=\"https:\/\/docs.agentconnect.md\/\" rel=\"noopener noreferrer\">https:\/\/docs.agentconnect.md<\/a><\/p>\n\n","category":["ai","agents","opensource","productivity"]},{"title":"AgentConnect vs. Claude Tag: comparing the two ways to bring agents into team chat","pubDate":"Tue, 06 Oct 2026 05:15:11 +0000","link":"https:\/\/dev.to\/agentconnect\/agentconnect-vs-claude-tag-comparing-the-two-ways-to-bring-agents-into-team-chat-npa","guid":"https:\/\/dev.to\/agentconnect\/agentconnect-vs-claude-tag-comparing-the-two-ways-to-bring-agents-into-team-chat-npa","description":"<p>Since we launched, the question we get more than any other is how AgentConnect differs from Claude Tag. It's a fair question, and worth answering properly.<\/p>\n\n<p>We started building AgentConnect before Claude Tag was announced. Arriving independently at the same idea \u2014 that an agent belongs in the shared conversation where a team actually works, not in a private chat window one person can see \u2014 was, if anything, reassuring. Great minds think alike: when a team at Anthropic builds toward the same pattern you're building toward, it's decent evidence the pattern is right.<\/p>\n\n<p>But agreeing on the pattern isn't the same as building the same product. Underneath that shared starting point, the two differ on questions that matter quite a lot in practice: which agent runs, where it can be triggered from, how many agents work together, and who operates the infrastructure. This post walks through those differences honestly, based on Anthropic's <a href=\"https:\/\/www.anthropic.com\/news\/introducing-claude-tag\" rel=\"noopener noreferrer\">Claude Tag announcement<\/a>, its <a href=\"https:\/\/claude.com\/docs\/claude-tag\/overview\" rel=\"noopener noreferrer\">current product documentation<\/a>, and <a href=\"https:\/\/docs.agentconnect.md\/\" rel=\"noopener noreferrer\">AgentConnect's public documentation<\/a>, checked on September 22, 2026. Both products are moving fast \u2014 Claude Tag is still in beta \u2014 so check the primary sources if you're reading this later.<\/p>\n\n<h2>\n  \n  \n  The short version\n<\/h2>\n\n<div class=\"table-wrapper-paragraph\"><table>\n<thead>\n<tr>\n<th><\/th>\n<th>Claude Tag<\/th>\n<th>AgentConnect<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Built by<\/td>\n<td>Anthropic<\/td>\n<td>Open-source project (<a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">Apache 2.0<\/a>)<\/td>\n<\/tr>\n<tr>\n<td>Model \/ runtime<\/td>\n<td>Supported Claude models, including Opus and Sonnet, subject to organization policy<\/td>\n<td>Any ACP-compatible runtime \u2014 Claude Code, Codex, Grok Build, DeepSeek, Pi, others<\/td>\n<\/tr>\n<tr>\n<td>Where it works<\/td>\n<td>Slack (beta), with plans to expand; subscriptions to individual GitHub pull requests<\/td>\n<td>Slack, Telegram, Discord, Lark\/Feishu, plus GitHub, GitLab, and Gitea triggers and Linear issue assignment<\/td>\n<\/tr>\n<tr>\n<td>Agent collaboration<\/td>\n<td>Shared Claude in each channel; identities with scoped tools and memory<\/td>\n<td>Agents with separate runtimes, tools, and permissions that can call one another<\/td>\n<\/tr>\n<tr>\n<td>Hosting<\/td>\n<td>Anthropic-hosted SaaS<\/td>\n<td>Self-hosted (Docker Compose or Kubernetes) or AgentConnect Cloud<\/td>\n<\/tr>\n<tr>\n<td>Access control<\/td>\n<td>Admin-scoped channel\/tool identities, org and channel spend limits<\/td>\n<td>Separate agent access and session visibility, synced with GitHub\/Slack roles, per-agent repo and tool scoping<\/td>\n<\/tr>\n<tr>\n<td>Availability<\/td>\n<td>Beta, Claude Enterprise and Team customers only<\/td>\n<td>Open source today; hosted Cloud available<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n\n<p>If your team is already fully on Slack and Claude Enterprise or Team, and you want one well-integrated Claude that learns your channels, Claude Tag is a short path to that. If you want to choose runtimes from different vendors, work across more than Slack, configure repository-wide event triggers or issue assignments, or keep the whole stack in infrastructure you control, that's the problem AgentConnect is built around.<\/p>\n\n<h2>\n  \n  \n  What Claude Tag is\n<\/h2>\n\n<p>Claude Tag, announced by Anthropic in June 2026, brings Claude into a Slack channel as a standing team member. An admin grants it access to specific channels, tools, data, and codebases; from there, anyone in the channel can tag <code>@Claude<\/code> and delegate a task while they do something else. A few things define how it works, per Anthropic's own description:<\/p>\n\n<ul>\n<li>\n<strong>It's multiplayer.<\/strong> There's one Claude per channel, shared by everyone in it \u2014 not a private session per person. Anyone can see what it's doing and pick up where the last person left off.<\/li>\n<li>\n<strong>It learns over time.<\/strong> Claude builds context from the channels it's in, and can pull in context from other channels and data sources it's been granted access to (it doesn't report from private channels).<\/li>\n<li>\n<strong>It takes initiative.<\/strong> With \"ambient\" mode on, Claude proactively surfaces relevant updates and follows up on threads that have gone quiet, without being asked.<\/li>\n<li>\n<strong>It works asynchronously.<\/strong> You hand it a task and move on; it can also schedule and pursue work autonomously over hours or days.<\/li>\n<\/ul>\n\n<p>Access is scoped per admin-defined \"Claude identity\" \u2014 a model set up for sales work doesn't share memory or data access with one set up for engineering. Admins set organization- and channel-level spend limits and can audit everything Claude has done and who asked for it.<\/p>\n\n<p>Claude Tag replaces the previous Claude in Slack app and is in beta for Claude Enterprise and Team customers, starting on Slack with Anthropic's stated intent to expand to more places over time. Its <a href=\"https:\/\/claude.com\/docs\/claude-tag\/users\/models\" rel=\"noopener noreferrer\">model choices<\/a> include Opus and Sonnet, subject to Anthropic's available models and organization policy. Users can switch models within a thread or set a channel default, where permitted. Claude Tag can also <a href=\"https:\/\/claude.com\/docs\/claude-tag\/users\/proactivity\" rel=\"noopener noreferrer\">subscribe to an individual GitHub pull request<\/a> and respond to comments, failed checks, or merges on that PR.<\/p>\n\n<h2>\n  \n  \n  What AgentConnect is\n<\/h2>\n\n<p>AgentConnect is an open-source platform (Apache 2.0) for the same underlying job \u2014 letting a team delegate work to agents in the conversations and tools they already use \u2014 built around three choices that Claude Tag, being a single-vendor Slack feature, doesn't need to make: which agent, which channel, and who hosts it.<\/p>\n\n<ul>\n<li>\n<strong>Any ACP-compatible agent.<\/strong> Configure agents to run Claude Code, Codex, Grok Build, DeepSeek, Pi, or any other agent that speaks the <a href=\"https:\/\/agentclientprotocol.com\/get-started\/introduction\" rel=\"noopener noreferrer\">Agent Client Protocol<\/a>. Choose the runtime and model per agent across supported providers.<\/li>\n<li>\n<strong>More than one place to work.<\/strong> Connect agents to Slack, Telegram, Discord, and Lark\/Feishu, and trigger them directly from GitHub, GitLab, and Gitea pull requests and issues, or from a Linear issue assignment \u2014 in addition to webhooks and schedules.<\/li>\n<li>\n<strong>Specialized agents that collaborate.<\/strong> Give each agent its own role, runtime, model, workspace, memory, tools, and skills, and let agents <a href=\"https:\/\/docs.agentconnect.md\/docs\/multi-agent-work-modes\" rel=\"noopener noreferrer\">call one another<\/a> as part of a shared workflow. For example, a support agent can ask a payments specialist to inspect an incident, then use the findings to respond in the shared conversation.<\/li>\n<li>\n<strong>Boundaries that separate access from visibility.<\/strong> Decide who can use an agent, who can see its sessions, and which repositories, tools, and other agents it can reach \u2014 synced with your existing GitHub and Slack roles rather than managed as a separate system.<\/li>\n<li>\n<strong>Self-hosted or hosted.<\/strong> Run the whole stack \u2014 including agent execution and workspaces \u2014 in infrastructure you operate using Docker Compose or Kubernetes, or use AgentConnect Cloud's console while still pointing it at daemons you run.<\/li>\n<\/ul>\n\n<p>We build AgentConnect, so take the framing with that in mind \u2014 but every claim above is drawn directly from the <a href=\"https:\/\/docs.agentconnect.md\/\" rel=\"noopener noreferrer\">public documentation<\/a> linked throughout, not from how we'd like it to be read.<\/p>\n\n<h2>\n  \n  \n  Where the two overlap\n<\/h2>\n\n<p>Both products are built around the same basic shift: an agent that lives in a shared conversation rather than a private chat window, that teammates can see and pick up after each other on, and that an admin can scope down to specific tools and data. Both let an agent work asynchronously and report back where the team is already looking. If your team hasn't tried this pattern yet, either product will feel like a meaningfully different way of working than a personal chatbot tab.<\/p>\n\n<h2>\n  \n  \n  Where they differ\n<\/h2>\n\n<p><strong>Model and runtime choice.<\/strong> Claude Tag lets teams choose among supported Claude models, including Opus and Sonnet, within their organization's policy. AgentConnect lets you choose both the runtime and model per agent across providers, and run different runtimes side by side. This matters if you already have a runtime preference, want to compare providers on the same workflow, or don't want a single vendor's roadmap to be your team's roadmap.<\/p>\n\n<p><strong>Where agents can be triggered from.<\/strong> Claude Tag's user-facing interface is Slack. Its <a href=\"https:\/\/claude.com\/docs\/claude-tag\/users\/proactivity\" rel=\"noopener noreferrer\">PR subscriptions<\/a> wake on activity on an individual GitHub pull request, but do not provide repository-wide triggers such as every newly opened PR. AgentConnect connects the same agent roster to Slack, Telegram, Discord, and Lark, and \u2014 separately \u2014 starts agents from configured GitHub, GitLab, and Gitea pull request and issue events, and from Linear issue assignment. The difference is the available entry points and event scope for starting work.<\/p>\n\n<p><strong>How agents collaborate.<\/strong> Claude Tag shares one Claude within each channel, and administrators can configure <a href=\"https:\/\/www.anthropic.com\/news\/introducing-claude-tag\" rel=\"noopener noreferrer\">separate identities with scoped memory and tools<\/a> for different uses. AgentConnect lets teams bring several specialized agents into the same conversation or configure <a href=\"https:\/\/docs.agentconnect.md\/docs\/multi-agent-work-modes\" rel=\"noopener noreferrer\">agent-to-agent calls<\/a> across separately configured runtimes, tools, and permissions. That flexibility adds configuration and coordination; teams whose work fits a shared Claude in each channel may prefer the simpler setup.<\/p>\n\n<p><strong>Access control shape.<\/strong> Claude Tag scopes a Claude \"identity\" to a set of channels and tools, with organization- and channel-level spend limits and an audit log. AgentConnect separates who can use an agent from who can see its sessions, and separately scopes which repositories, tools, and other agents each agent can reach \u2014 synced with roles your team already manages in GitHub and Slack, rather than a parallel permission system.<\/p>\n\n<p><strong>Deployment and openness.<\/strong> Claude Tag is a hosted feature of Claude Enterprise and Team \u2014 there's no self-hosted option, and the source isn't open. AgentConnect is Apache-2.0 licensed; agent execution and workspaces stay in the environment you operate whether you self-host the full stack or use AgentConnect Cloud's console.<\/p>\n\n<h2>\n  \n  \n  Where Claude Tag has the edge\n<\/h2>\n\n<p>If your team is already standardized on Slack and Claude Enterprise or Team, Claude Tag is close to zero setup \u2014 no infrastructure to run, no daemon to install, and it's the most tightly integrated route to Anthropic's own models and ambient behavior tuned specifically for them. For a team that has no interest in running infrastructure, wants one well-supported agent rather than a roster to configure, and works entirely inside Slack, that's a legitimate and simpler answer.<\/p>\n\n<h2>\n  \n  \n  Where AgentConnect has the edge\n<\/h2>\n\n<p>AgentConnect is built for teams that don't want to make Claude Tag's implicit choices for them: teams that want to compare or mix agents and models, that work across more than Slack, that trigger agents from pull requests, issues, or Linear tickets as often as from chat, that need agents on different runtimes to call one another with distinct tools and permissions, or that need to keep agent execution inside infrastructure they control for compliance or data-residency reasons. None of that requires giving up the core pattern \u2014 an agent working in a shared, visible conversation \u2014 that made Claude Tag worth building in the first place.<\/p>\n\n<h2>\n  \n  \n  Getting started\n<\/h2>\n\n<p>Both are worth trying against your team's actual workflows rather than deciding from a comparison alone. AgentConnect is open source and self-hostable today, with a hosted Cloud console if you'd rather not run the daemon yourself.<\/p>\n\n<ul>\n<li>GitHub \u2192 <a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">https:\/\/github.com\/agentconnect-md\/agentconnect<\/a> \u2014 if you find this useful, a star helps others find it too.<\/li>\n<li>Website \u2192 <a href=\"https:\/\/agentconnect.md\" rel=\"noopener noreferrer\">https:\/\/agentconnect.md<\/a>\n<\/li>\n<li>Documentation \u2192 <a href=\"https:\/\/docs.agentconnect.md\" rel=\"noopener noreferrer\">https:\/\/docs.agentconnect.md<\/a>\n<\/li>\n<\/ul>\n\n","category":["ai","opensource","productivity","discuss"]},{"title":"Reusable, testable decisions for agent orchestration with Jev","pubDate":"Tue, 29 Sep 2026 11:11:52 +0000","link":"https:\/\/dev.to\/agentconnect\/reusable-testable-decisions-for-agent-orchestration-with-jev-14mh","guid":"https:\/\/dev.to\/agentconnect\/reusable-testable-decisions-for-agent-orchestration-with-jev-14mh","description":"<p>Choose when agents act, which agent handles the task, and which model to use.<\/p>\n\n<p>A support channel has questions, bug reports, follow-ups, and the occasional \u201cthanks, that worked.\u201d With several agents available, your team needs to decide which messages deserve a response and who should handle them. The same judgment comes up when assigning an issue, choosing a reviewer, or picking a model for a new task.<\/p>\n\n<p><a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">AgentConnect<\/a> now supports <a href=\"https:\/\/docs.typesafe.ai\/introduction\" rel=\"noopener noreferrer\">Jev<\/a>, TypeSafe\u2019s judgment model, as a general decision engine for your agents. You define a question and the criteria for answering it. Jev evaluates the context, and AgentConnect uses the answer according to the rules you configure.<\/p>\n\n<p>We call these reusable questions <strong>Decisions<\/strong>. A Decision can return Yes or No, choose a category you define, or score something on your scale. For example: does this message need a reply, is this a technical or billing question, or how complex is this task? You can reuse the same Decision in several places, with each place choosing what to do with its answer.<\/p>\n\n<p>\n  <a href=\"https:\/\/dev-to-uploads.s3.us-east-2.amazonaws.com\/uploads\/articles\/ekwz18yjf3ljkc4vxzqd.png\" rel=\"noopener noreferrer\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fekwz18yjf3ljkc4vxzqd.png\" alt=\"The Decision editor with a Support category question, its criteria, and an example result showing each answer's probability.\" width=\"800\" height=\"464\"><\/a>\n<\/p>\n\n<p>For a support agent, you can configure a \u201cNeeds reply\u201d Decision to trigger on requests for help and skip greetings and acknowledgments. It considers the earlier conversation as well as the latest message. You can add it from the channel row in the agent\u2019s <strong>Integrations<\/strong> tab and choose which answers should trigger a response.<\/p>\n\n<p>A category Decision can limit responses to technical questions, as in this example:<\/p>\n\n<p>\n  <a href=\"https:\/\/dev-to-uploads.s3.us-east-2.amazonaws.com\/uploads\/articles\/mgunn23zkaynyfzfcjpf.png\" rel=\"noopener noreferrer\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmgunn23zkaynyfzfcjpf.png\" alt=\"A channel rule triggers the support agent when the technical category reaches 30 percent, with a sample message showing Would trigger.\" width=\"800\" height=\"811\"><\/a>\n<\/p>\n\n<p>With shared-bot routing in Slack, a \u201cSupport category\u201d Decision can send new conversations to different agents. Technical questions can go to an engineering agent, and billing questions to a support agent. Your team defines the categories and who handles each one. You can also chain Decisions: check the category first, then judge the customer\u2019s frustration before bringing in a specialist.<\/p>\n\n<p>We use this in the <strong>Ask AI<\/strong> panel on our <a href=\"https:\/\/www.agentconnect.md\/docs\/getting-started\" rel=\"noopener noreferrer\">documentation site<\/a>, too. It connects to an agent through the <a href=\"https:\/\/www.agentconnect.md\/docs\/connect-automate\/agent-chat-api#decision-gate\" rel=\"noopener noreferrer\">agent chat API<\/a>, with a Decision that judges whether a visitor\u2019s question is about AgentConnect. When the Decision declines a question, the panel explains what it can help with. You can use the same setup for a documentation assistant or support widget on your own site.<\/p>\n\n<p>\n  <a href=\"https:\/\/dev-to-uploads.s3.us-east-2.amazonaws.com\/uploads\/articles\/rlnaworo9tn8v56byhdw.png\" rel=\"noopener noreferrer\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frlnaworo9tn8v56byhdw.png\" alt=\"The docs Ask AI panel declines requests for a pancake recipe and a poem, then answers a question about agents in AgentConnect.\" width=\"800\" height=\"982\"><\/a>\n<\/p>\n\n<p><em>The docs assistant declines two unrelated requests, then answers a question about AgentConnect.<\/em><\/p>\n\n<p>That same approach works across other parts of your team\u2019s work:<\/p>\n\n<ul>\n<li>\n<strong>Issue triage and code review.<\/strong> In GitHub, GitLab, or Gitea, choose which watching agents handle an issue or pull request (merge request on GitLab). A question about the review focus can select a security reviewer for authentication changes or an architecture reviewer for a data model change.<\/li>\n<li>\n<strong>Runtime and model selection.<\/strong> Choose an agent\u2019s runtime and model when a new session starts. Map task complexity scores to your preferred models, or use the \u201cPR author\u201d example for cross-model review: have Codex review a PR written by Claude, and Claude review one written by Codex. Existing sessions keep their original selection.<\/li>\n<\/ul>\n\n<p>\n  <a href=\"https:\/\/dev-to-uploads.s3.us-east-2.amazonaws.com\/uploads\/articles\/hqkpr68mscd0rb4vop6u.png\" rel=\"noopener noreferrer\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhqkpr68mscd0rb4vop6u.png\" alt=\"Runtime rules use the PR author Decision to select a review model, with a fallback model when no rule matches.\" width=\"800\" height=\"471\"><\/a>\n<\/p>\n\n<p>Agents can also ask Decisions themselves while working. Attach a Decision under <strong>Tools &amp; Skills \u2192 Decisions<\/strong>, and the agent can supply context and use the answer\u2014for example, classify a ticket before choosing how to handle it. Its existing permissions still determine which actions it can take.<\/p>\n\n<p>To create your first Decision, open a Playground conversation with one agent and describe what you want to judge. The request below asks for the same judgment as the built-in Needs reply example, and the same flow works for any question your team needs:<\/p>\n\n<blockquote>\n<p>Create a Decision called Support requests. Use Jev to answer Yes when someone asks for help, and No for greetings, thanks, or casual conversation.<\/p>\n<\/blockquote>\n\n<p>\n  <a href=\"https:\/\/dev-to-uploads.s3.us-east-2.amazonaws.com\/uploads\/articles\/so9ol3olgk4stac5jvpt.png\" rel=\"noopener noreferrer\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fso9ol3olgk4stac5jvpt.png\" alt=\"Playground showing a Support requests Decision summary and the createDecision approval card, with proposed arguments and Deny and Approve and run buttons.\" width=\"800\" height=\"728\"><\/a>\n<\/p>\n\n<p><em>Review the proposed Decision and its arguments before choosing Approve and run.<\/em><\/p>\n\n<p>The agent drafts the Decision and submits it for your approval. Review its name, model, question, and criteria in the proposed arguments, then choose <strong>Approve and run<\/strong> to save it or <strong>Deny<\/strong> to reject it. Nothing is applied until you approve. Once saved, open the Decision from the <strong>Decisions<\/strong> page and use <strong>Try with an example<\/strong> to test it against a sample conversation. You can inspect the answer and probabilities, adjust the criteria, and try again. The channel and routing editors also let you preview what your rules would do with a sample message. You can create Decisions manually or start with examples such as Needs reply, Support category, PR focus, and Task complexity.<\/p>\n\n<p>Agents running on AgentConnect Cloud can evaluate Decisions using organization credits. For your own daemons, add a TypeSafe (Jev) API key under <strong>Infra \u2192 Provider keys<\/strong>.<\/p>\n\n<p>Explore the <a href=\"https:\/\/www.agentconnect.md\/docs\/getting-started\" rel=\"noopener noreferrer\">documentation<\/a>, and <a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">star AgentConnect on GitHub<\/a> to support the project.<\/p>\n\n","category":["ai","agents","opensource","devtools"]},{"title":"Introducing Linear support","pubDate":"Fri, 18 Sep 2026 11:59:17 +0000","link":"https:\/\/dev.to\/agentconnect\/introducing-linear-support-b40","guid":"https:\/\/dev.to\/agentconnect\/introducing-linear-support-b40","description":"<p>AgentConnect now supports Linear. Bring Claude Code, Codex, and your other agents into the issues where your team tracks its work.<\/p>\n\n<p>Open an issue and choose AgentConnect from the Assignee menu. Your agent picks up the issue description and starts working. Its plan, tool calls, and progress stream back into Linear.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzt03t6pu74bm0na2oqnz.gif\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzt03t6pu74bm0na2oqnz.gif\" alt=\"Assign an issue to AgentConnect and follow its progress in Linear.\" width=\"600\" height=\"307\"><\/a><\/p>\n\n<p>Your agent can post results as issue comments and update the issue\u2019s status.<\/p>\n\n<p>You can reply in the same session to add context, ask a follow-up, or stop the work from Linear.<\/p>\n\n<p>One agent can work across multiple Linear teams, and one workspace can have several agents with different tools and instructions.<\/p>\n\n<p>For setup and configuration, see the <a href=\"https:\/\/docs.agentconnect.md\/docs\/linear\" rel=\"noopener noreferrer\">Linear integration guide<\/a>.<\/p>\n\n<h2>\n  \n  \n  Resources\n<\/h2>\n\n<ul>\n<li><a href=\"https:\/\/www.agentconnect.md\/\" rel=\"noopener noreferrer\">Website<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">GitHub<\/a><\/li>\n<\/ul>\n\n","category":["ai","opensource","productivity","devtools"]},{"title":"Introducing Gitea support","pubDate":"Tue, 15 Sep 2026 13:04:27 +0000","link":"https:\/\/dev.to\/agentconnect\/introducing-gitea-support-4pa1","guid":"https:\/\/dev.to\/agentconnect\/introducing-gitea-support-4pa1","description":"<p>AgentConnect now supports Gitea (GitHub and GitLab are already supported). Bring Claude Code, Codex, and your other agents into issues and pull requests on gitea.com or a self-hosted Gitea instance.<\/p>\n\n<p>Choose which repositories an agent should follow and when it should start: on new issues or pull requests, on updates, or when mentioned. Several agents can work in the same repository. Mention an agent by name to give it a task, or request the bot as a pull request reviewer.<\/p>\n\n<p>Agents reply in the issue or pull request. For code review, they can comment on specific lines, approve a pull request, or request changes. A commit status on the pull request shows the agent\u2019s run state and links to its session.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsiwj260etwuic15dctre.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsiwj260etwuic15dctre.png\" alt=\"An agent requests changes on a Gitea pull request and leaves a comment on the affected line.\" width=\"800\" height=\"413\"><\/a><\/p>\n\n<p>Gitea 1.23 or later is required. For setup and configuration, see the <a href=\"https:\/\/docs.agentconnect.md\/docs\/gitea\" rel=\"noopener noreferrer\">Gitea integration guide<\/a>.<\/p>\n\n<h2>\n  \n  \n  Resources\n<\/h2>\n\n<ul>\n<li><a href=\"https:\/\/www.agentconnect.md\/\" rel=\"noopener noreferrer\">Website<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">GitHub<\/a><\/li>\n<\/ul>\n\n","category":["gitea","ai","opensource","programming"]},{"title":"Grep beats LSP? Why coding agents ignore your fancier tools","pubDate":"Mon, 31 Aug 2026 04:28:09 +0000","link":"https:\/\/dev.to\/agentconnect\/grep-beats-lsp-why-coding-agents-ignore-your-fancier-tools-2gbo","guid":"https:\/\/dev.to\/agentconnect\/grep-beats-lsp-why-coding-agents-ignore-your-fancier-tools-2gbo","description":"<p>Why would a coding agent ignore a retrieval interface that returns more precise results?<\/p>\n\n<p>I explored this question in a small study comparing lexical search with <code>grep<\/code> against LSP-backed semantic navigation. I expected semantic navigation to reduce noise and save tokens. Instead, agents often stayed with <code>grep<\/code>. When I forced them to use the semantic path first, task success sometimes fell.<\/p>\n\n<p>This is a question of LLM-friendliness. A tool is not friendly to a model merely because its results are precise. It must return enough context for the next step and present that context in an interface and output shape the model can use directly. Familiarity may also matter: the model may have learned similar action paths during training. The interface properties can be evaluated directly. Training support is a hypothesis consistent with these results, not something this study proves.<\/p>\n\n<p>The result is not a general argument against LSP. The protocol includes capabilities far beyond code navigation, and this study tested only a small subset. Instead, the results point to a broader engineering problem: a model does not use tools in isolation. It uses them through a harness that defines the available actions, their names, their inputs, and the context returned to the model.<\/p>\n\n<p>In this post, I describe how code retrieval affected both code-finding and editing tasks, why <code>grep<\/code> had an advantage in some conditions, and what this means for agent platforms.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8wc3x45y30j0sbubmw8g.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8wc3x45y30j0sbubmw8g.png\" alt=\"Agent capability equals model times native harness\" width=\"800\" height=\"273\"><\/a><\/p>\n\n<p><em>A model and its familiar tool loop act as one capability surface.<\/em><\/p>\n\n<h2>\n  \n  \n  Comparing two code retrieval interfaces\n<\/h2>\n\n<p>I compared two ways for an agent to retrieve code context. <code>grep<\/code> performs lexical search: it finds matching text. The tested LSP-backed tools perform semantic navigation through references, definitions, and document symbols, allowing them to distinguish a real function call from the same word in a comment.<\/p>\n\n<p>The pilot covered three Claude models, several Python and TypeScript repositories, and multiple task types. I measured token use only when both approaches completed the task successfully. This controls for a common evaluation error: a failed run can appear efficient simply because it stopped early.<\/p>\n\n<p>On simple code-location tasks, all three models chose the semantic tool only 0% to 6% of the time when both tools were available. Forcing a semantic-first path reduced success from 100% to 89% in that arm.<\/p>\n\n<p>Reference-completeness tasks produced a different result. When asked to find every caller, the models chose semantic navigation 45% to 57% of the time. The LSP-backed path reached 1.00 precision, compared with 0.76 for <code>grep<\/code>, by removing false matches. However, recall stayed near 0.66 in both arms. Semantic navigation did not find more true calls. The remaining limit came from how thoroughly the agent worked, not from retrieval precision. For the stronger models, the precision gain also came with higher token use rather than a saving.<\/p>\n\n<p><strong>The model doesn't blindly prefer grep \u2014 it routes by task<\/strong><\/p>\n\n<p><em>Share of semantic (LSP) tool calls when both grep and LSP are available and the agent chooses freely.<\/em><\/p>\n\n<p>Legend: Opus 4.8 (blue), Sonnet 4.6 (magenta), Haiku 4.5 (green).<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8f9z1t3j1vdl63x7z4p.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8f9z1t3j1vdl63x7z4p.png\" alt=\"Semantic tool use by task: near zero on localization and rename, but 45% to 57% on reference-completeness\" width=\"800\" height=\"400\"><\/a><\/p>\n\n<p><em>Same models, same free choice \u2014 the routing flips with the task. On localization and rename the agent almost always reaches for grep; on reference-shaped work it reaches for the LSP about half the time, unprompted. The action distribution is task-shaped, not a blind habit.<\/em><\/p>\n\n<div class=\"table-wrapper-paragraph\"><table>\n<thead>\n<tr>\n<th>Task<\/th>\n<th>Opus 4.8<\/th>\n<th>Sonnet 4.6<\/th>\n<th>Haiku 4.5<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Localization<\/td>\n<td>0%<\/td>\n<td>4%<\/td>\n<td>6%<\/td>\n<\/tr>\n<tr>\n<td>Reference-completeness<\/td>\n<td>45%<\/td>\n<td>50%<\/td>\n<td>57%<\/td>\n<\/tr>\n<tr>\n<td>Multi-file rename<\/td>\n<td>3%<\/td>\n<td>\u2014<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n\n<p>The codebase was also important. On a clean TypeScript repository, LSP-backed navigation produced no F1 gain and used 16% more tokens. On a noisy TypeScript repository, it improved F1 by 0.246 and used 12% fewer tokens. The useful predictor was lexical noise, not whether the language had strong static types.<\/p>\n\n<p><strong>Codebase noise determines the value of semantic navigation<\/strong><\/p>\n\n<p><em>Accuracy gain from semantic retrieval on reference-completeness (\u0394F1 = LSP \u2212 grep). Bar colour encodes how noisy <code>grep<\/code> is on that repo; <em>prec<\/em> = grep\u2019s precision there.<\/em><\/p>\n\n<p>Legend: blue means grep is clean here; magenta means grep is noisy here.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpbibdyg2fn1m68jdt032.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpbibdyg2fn1m68jdt032.png\" alt=\"Delta F1 from LSP: remeda TypeScript clean plus 0.000, hono TypeScript noisy plus 0.246, and requests Python noisy plus 0.072\" width=\"799\" height=\"345\"><\/a><\/p>\n\n<p><em>Two repositories in the same language, opposite verdicts. On clean <code>remeda<\/code> the LSP adds nothing \u2014 <code>grep<\/code> already resolves every reference correctly, so semantic retrieval is pure overhead. On noisy <code>hono<\/code> it adds +0.246 F1. The predictor is how badly <code>grep<\/code>'s precision degrades on that codebase, not whether the language is statically typed.<\/em><\/p>\n\n<div class=\"table-wrapper-paragraph\"><table>\n<thead>\n<tr>\n<th>Repo<\/th>\n<th>Language<\/th>\n<th>grep precision<\/th>\n<th>\u0394F1 (LSP \u2212 grep)<\/th>\n<th>Token cost<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>remeda<\/td>\n<td>TypeScript<\/td>\n<td>1.00<\/td>\n<td>+0.000<\/td>\n<td>+16%<\/td>\n<\/tr>\n<tr>\n<td>hono<\/td>\n<td>TypeScript<\/td>\n<td>0.51<\/td>\n<td>+0.246<\/td>\n<td>\u221212%<\/td>\n<\/tr>\n<tr>\n<td>requests<\/td>\n<td>Python<\/td>\n<td>0.76<\/td>\n<td>+0.072<\/td>\n<td>+19%<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n\n<p>These results are conditional rather than categorical. The agents did not simply \u201calways use grep.\u201d Their routing changed with the task, and the value of LSP-backed navigation changed with the repository.<\/p>\n\n<h2>\n  \n  \n  Tool interfaces change agent behavior\n<\/h2>\n\n<p>The tested LSP-backed tools initially returned only a location: a file path, line, and column. The agent then had to open the file to inspect the code. <code>grep<\/code>, by contrast, usually returned the matching line immediately: <code>src\/auth.ts:42: return validateToken(token)<\/code>.<\/p>\n\n<p>I changed the semantic-navigation response to include source text in a similar shape. The semantic backend and the set of references stayed the same; only the information returned to the model changed. Pass@1 on the rename tasks rose from 0.67 to 0.83, while follow-up file reads fell from 15.2 to 3.2 per episode.<\/p>\n\n<p><strong>Returning source context improves semantic navigation<\/strong><\/p>\n\n<p><em>Multi-file rename, Opus 4.8, pyright with a pre-warmed index. Same semantic backend in both LSP arms \u2014 only the <em>output shape<\/em> differs.<\/em><\/p>\n\n<p>Legend: grep (blue), LSP \u2014 locations only (magenta), LSP + inline context (green).<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ikg6sm2xtqupan98dcx.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ikg6sm2xtqupan98dcx.png\" alt=\"Pass at 1 and follow-up file reads for grep, LSP locations only, and LSP with inline context\" width=\"800\" height=\"382\"><\/a><\/p>\n\n<p><em>Returning locations forces the agent to go read each site; returning the line inline does not. Attaching \u00b12 lines of source to every reference cut follow-up file reads 15.2 \u2192 3.2 \u2014 below grep's own 4.3 \u2014 and lifted pass@1 from 0.67 to 0.83. The retrieval backend never changed; only the shape of what came back.<\/em><\/p>\n\n<div class=\"table-wrapper-paragraph\"><table>\n<thead>\n<tr>\n<th>Arm<\/th>\n<th>pass@1<\/th>\n<th>Site recall<\/th>\n<th>Tokens<\/th>\n<th>Follow-up reads<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>grep<\/td>\n<td>1.00<\/td>\n<td>1.000<\/td>\n<td>2,451<\/td>\n<td>4.3<\/td>\n<\/tr>\n<tr>\n<td>LSP \u2014 locations only<\/td>\n<td>0.67<\/td>\n<td>0.930<\/td>\n<td>4,131<\/td>\n<td>15.2<\/td>\n<\/tr>\n<tr>\n<td>LSP + inline context<\/td>\n<td>0.83<\/td>\n<td>0.958<\/td>\n<td>3,336<\/td>\n<td>3.2<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n\n<p>This result illustrates a principle that Anthropic also emphasizes in <a href=\"https:\/\/www.anthropic.com\/engineering\/writing-tools-for-agents\" rel=\"noopener noreferrer\">Writing effective tools for agents<\/a>: tools are interfaces for non-deterministic agents, so the context they return is part of the design. A semantically correct tool can still create a poor agent workflow if each result requires several extra actions to interpret.<\/p>\n\n<p>The output change does not prove that post-training data caused the improvement. It may also have helped simply because each response contained more useful information. However, the result is consistent with a broader hypothesis: models learn concrete action patterns, not \u201ctool use\u201d in the abstract. A familiar loop\u2014prompt, tool call, readable result, next action\u2014can be part of the capability observed in practice.<\/p>\n\n<h2>\n  \n  \n  Why lexical search had an advantage\n<\/h2>\n\n<p>Interface familiarity is only part of the explanation. Lexical search also had a real structural advantage for some tasks.<\/p>\n\n<p>A semantic reference is only one kind of text match. A rename may also need to update comments, docstrings, configuration, or strings. <code>find_references<\/code> will not return those by design, while <code>grep<\/code> can.<\/p>\n\n<blockquote>\n<p><code>semantic references \u2282 textual occurrences<\/code><\/p>\n<\/blockquote>\n\n<p>For text-wide edits, <code>grep<\/code> can be the better retrieval tool even for a model with perfect training on LSP-backed navigation.<\/p>\n\n<p>This gives us two explanations for the observed behavior:<\/p>\n\n<ol>\n<li>\n<strong>Structure:<\/strong> some tasks need textual completeness, which the tested semantic-navigation methods do not provide.<\/li>\n<li>\n<strong>Distribution:<\/strong> the model may have more practice with familiar tools and result shapes.<\/li>\n<\/ol>\n\n<p>The first explanation follows directly from what the tools retrieve. The second is a hypothesis consistent with the routing and output-format results, but this study did not manipulate training data and therefore cannot prove it.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmzua2gltu3nt3gxrng0.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmzua2gltu3nt3gxrng0.png\" alt=\"The structural and distributional causes behind grep's result\" width=\"800\" height=\"324\"><\/a><\/p>\n\n<p><em>Structure explains when grep is better. Distribution explains why familiar paths still win.<\/em><\/p>\n\n<h2>\n  \n  \n  The harness is part of the system\n<\/h2>\n\n<p>Here, I use <em>harness<\/em> to mean the runtime around a model: the instructions placed in context, the tools made available, their input schemas, the shape of their results and errors, and the loop that decides what the model sees next.<\/p>\n\n<p>This surrounding system can materially change behavior. Anthropic\u2019s work on <a href=\"https:\/\/www.anthropic.com\/engineering\/effective-harnesses-for-long-running-agents\" rel=\"noopener noreferrer\">effective harnesses for long-running agents<\/a> shows the same idea at a longer time scale: the model alone is not enough to make reliable progress across sessions. Environment setup, progress artifacts, and verification routines affect what the agent can accomplish.<\/p>\n\n<p>The same principle applies within a single tool loop. When post-training includes agent trajectories, the harness defines the prompts, tool calls, results, and recovery paths in those examples. A model trained through repeated use of <code>read<\/code>, <code>grep<\/code>, <code>edit<\/code>, and <code>bash<\/code> may learn policies that depend on those interfaces. Moving the same model into a different tool layer can therefore change its effective capability.<\/p>\n\n<blockquote>\n<p><code>agent capability = model \u00d7 harness<\/code><\/p>\n<\/blockquote>\n\n<p>This is why benchmark results for a model do not always transfer unchanged to a different runtime. Supporting the same model is not necessarily the same as reproducing the same agent. Tool selection, signatures, output formats, and error behavior can all affect the policy the model follows.<\/p>\n\n<h2>\n  \n  \n  Preserving native runtimes with ACP\n<\/h2>\n\n<p>This is one reason my team and I built <a href=\"https:\/\/docs.agentconnect.md\/docs\/getting-started\" rel=\"noopener noreferrer\">AgentConnect<\/a> around native coding-agent runtimes. AgentConnect does not place Claude or Codex models inside a shared, generic tool loop. It runs runtimes such as Claude Code and Codex on the user\u2019s own machine, where each runtime keeps its native tools and normal prompt-to-tool workflow.<\/p>\n\n<p>AgentConnect communicates with these runtimes through the open <a href=\"https:\/\/agentclientprotocol.com\/get-started\/architecture\" rel=\"noopener noreferrer\">Agent Client Protocol<\/a> (ACP). ACP standardizes the boundary between a client and a coding agent, including session setup, prompts, streaming updates, tool-call updates, cancellation, and permission requests. It does not require every runtime to expose the same internal tools.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmjekorq14sui5eyowy7i.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmjekorq14sui5eyowy7i.png\" alt=\"AgentConnect connects native coding agents through ACP\" width=\"800\" height=\"324\"><\/a><\/p>\n\n<p><em>One open boundary. Each agent stays on its home turf.<\/em><\/p>\n\n<p>This separates two concerns. At the outside boundary, a common protocol lets AgentConnect provide team channels, triggers, schedules, session history, collaboration, and control across multiple agents. Inside that boundary, Claude Code can continue to work like Claude Code, and Codex can continue to work like Codex.<\/p>\n\n<p>The goal is not vendor lock-in. ACP provides an open boundary across runtimes. Our design principle is to preserve the tool surface each model already uses well, then add coordination around it.<\/p>\n\n<h2>\n  \n  \n  Practical guidance for adding tools\n<\/h2>\n\n<p>These findings do not mean that teams should avoid LSP, MCP, or new agent skills. The study found a clear precision gain from LSP-backed navigation in noisy code, and a small response-format change removed most follow-up reads. The practical lesson is to evaluate a new retrieval interface as part of the full agent loop.<\/p>\n\n<p>My recommendation is to start with the native tool surface, then apply the following checks when adding a new capability:<\/p>\n\n<ol>\n<li>\n<strong>Test real tasks at equal accuracy.<\/strong> Do not celebrate lower token use if success also fell.<\/li>\n<li>\n<strong>Measure whether the agent calls it.<\/strong> Availability is not adoption.<\/li>\n<li>\n<strong>Return enough context for the next decision.<\/strong> A result like <code>path:line:content<\/code> may work better than a bare location object.<\/li>\n<li>\n<strong>Keep a native fallback.<\/strong> Semantic and lexical search solve different problems.<\/li>\n<li>\n<strong>Route by the task and the codebase.<\/strong> A noisy repository may benefit from semantic navigation. A text-wide search may still need <code>grep<\/code>.<\/li>\n<li>\n<strong>Reinforce the new trajectory when it matters.<\/strong> A prompt can introduce a tool, but it may not create a reliable policy for using it.<\/li>\n<\/ol>\n\n<p>As Anthropic notes in <a href=\"https:\/\/www.anthropic.com\/engineering\/building-effective-agents\" rel=\"noopener noreferrer\">Building effective agents<\/a>, successful agent systems often rely on simple, composable patterns. More tools do not automatically produce a more capable agent; tools must be distinct, understandable, and useful within the model\u2019s workflow.<\/p>\n\n<h2>\n  \n  \n  Conclusion\n<\/h2>\n\n<p>The study shows why \u201cbetter retrieval\u201d cannot be evaluated outside the full agent system. An interface can be more precise and still use more tokens. It can return correct locations and still create unnecessary reads. A small change in output shape can make the same semantic result much easier for the model to use.<\/p>\n\n<p>For teams building agent platforms, the implication is straightforward: evaluate the model and harness together. Preserve the interfaces that already support reliable behavior, and test changes against real tasks before assuming that a more sophisticated abstraction will help.<\/p>\n\n<p>For the full experimental setup, task definitions, and results, see <a href=\"https:\/\/github.com\/agentconnect-md\/lsp-vs-grep-token-study\" rel=\"noopener noreferrer\">Does a Language Server Save Tokens for Coding Agents?<\/a>.<\/p>\n\n<p>This is the product principle behind AgentConnect: use an open protocol to connect agents, while keeping each model together with its native runtime and tool loop.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">Star AgentConnect on GitHub<\/a><\/li>\n<li><a href=\"https:\/\/docs.agentconnect.md\/docs\/getting-started\" rel=\"noopener noreferrer\">Get started with AgentConnect<\/a><\/li>\n<\/ul>\n\n<blockquote>\n<p>This is a preliminary pilot with small task sets, a few repositories, three Claude models, and two to three rollouts per cell. I tested LSP-backed navigation through references, definitions, and document symbols; I did not test <code>textDocument\/rename<\/code>, diagnostics, or code actions. A rename-capable LSP might perform differently on the refactoring tasks where <code>grep<\/code> did best. The edit tasks were local and are not standard SWE-bench scores. These findings are useful signals, not a final verdict across all models, tools, and codebases.<\/p>\n<\/blockquote>\n\n","category":["ai","agents","llm","softwareengineering"]},{"title":"AgentConnect \u2014 the open-source, multi-agent alternative to Claude Tag","pubDate":"Wed, 26 Aug 2026 12:00:00 +0000","link":"https:\/\/dev.to\/agentconnect\/agentconnect-the-open-source-multi-agent-alternative-to-claude-tag-20cn","guid":"https:\/\/dev.to\/agentconnect\/agentconnect-the-open-source-multi-agent-alternative-to-claude-tag-20cn","description":"<p>AI agents have gotten genuinely good at the work itself\u2014writing code, chasing down bugs, reviewing pull requests. The hard part is teamwork: whose machine is the agent running on? How does anyone else chime in? Who can see how far the work has gotten? And how do multiple agents work with each other?<\/p>\n\n<p>Today, we\u2019re introducing <a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">AgentConnect<\/a>: an open-source platform where teams and multiple AI agents work together across Slack, Telegram, Discord, GitHub, and GitLab.<\/p>\n\n<p>AgentConnect lets you bring Claude Code, Codex, and other ACP-compatible agents into the tools your team already uses. Give each agent a role, configure what it needs, and start work from a conversation, code review, webhook, or schedule.<\/p>\n\n<p>Here are a few highlights:<\/p>\n\n<h2>\n  \n  \n  \ud83e\udd1d Multiple agents, one team\n<\/h2>\n\n<ul>\n<li>Run multiple ACP-compatible agents side by side.<\/li>\n<li>Let agents collaborate through shared conversations and agent-to-agent calls.<\/li>\n<li>Configure models, workspaces, memory, MCP servers, skills, and sandbox policies per agent.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8n3hwuplnr61hf10hzue.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8n3hwuplnr61hf10hzue.png\" alt=\"Multiple ACP-compatible agents configured with distinct roles, workspaces, memory, tools, skills, and sandbox policies.\" width=\"800\" height=\"450\"><\/a><\/p>\n\n<h2>\n  \n  \n  \ud83d\udcac Work where your team already works\n<\/h2>\n\n<ul>\n<li>Trigger work from code reviews in GitHub or GitLab, webhooks, or schedules.<\/li>\n<li>Connect agents to Slack, Telegram, and Discord.<\/li>\n<li>Continue conversations across platforms\u2014even between Slack and Telegram.<\/li>\n<li>Configure and follow your agents from one console.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frow4p2v1y0dvdlg63mse.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frow4p2v1y0dvdlg63mse.png\" alt=\"AgentConnect connects agents with team conversations in Slack, Telegram, Discord, GitHub, and GitLab workflows.\" width=\"800\" height=\"450\"><\/a><\/p>\n\n<h2>\n  \n  \n  \ud83d\udd10 Fine-grained access control\n<\/h2>\n\n<ul>\n<li>Control agent access separately from session visibility.<\/li>\n<li>Sync permissions with GitHub and Slack.<\/li>\n<li>Decide which repositories, tools, and other agents each agent may access.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feyhkn9h0smndsjnoe4n3.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feyhkn9h0smndsjnoe4n3.png\" alt=\"Agent and session access configured separately, with permissions synchronized from Slack and GitHub.\" width=\"800\" height=\"450\"><\/a><\/p>\n\n<h2>\n  \n  \n  \ud83c\udfe0 Open source and self-hosted\n<\/h2>\n\n<p>AgentConnect is licensed under Apache 2.0 and can be deployed with Docker Compose or Kubernetes. Agent execution and workspaces stay in the environment you operate, while one console helps your team manage agents, integrations, access, and sessions.<\/p>\n\n<p><a href=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8u0vaas53lckad6xkv0h.png\" class=\"article-body-image-wrapper\"><img src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8u0vaas53lckad6xkv0h.png\" alt=\"The open-source AgentConnect stack running in an environment operated by the team.\" width=\"800\" height=\"450\"><\/a><\/p>\n\n<p>Both the open-source and hosted versions of AgentConnect are available today. We\u2019d be grateful to hear what you build with it and how your team approaches multi-agent collaboration. And if you like what you see, give AgentConnect a star on GitHub.<\/p>\n\n<ul>\n<li>GitHub \u2192 <a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">https:\/\/github.com\/agentconnect-md\/agentconnect<\/a>\n<\/li>\n<li>Website \u2192 <a href=\"https:\/\/agentconnect.md\" rel=\"noopener noreferrer\">https:\/\/agentconnect.md<\/a>\n<\/li>\n<li>Documentation \u2192 <a href=\"https:\/\/docs.agentconnect.md\" rel=\"noopener noreferrer\">https:\/\/docs.agentconnect.md<\/a>\n<\/li>\n<li>Video \u2192 <a href=\"https:\/\/www.youtube.com\/watch?v=KA7xHF5JbJc\" rel=\"noopener noreferrer\">Watch the two-minute introduction<\/a>\n<\/li>\n<\/ul>\n\n","category":["ai","agents","slack","codereview"]},{"title":"Why we built AgentConnect","pubDate":"Tue, 25 Aug 2026 17:39:24 +0000","link":"https:\/\/dev.to\/agentconnect\/why-we-built-agentconnect-4bfb","guid":"https:\/\/dev.to\/agentconnect\/why-we-built-agentconnect-4bfb","description":"<h2>\n  \n  \n  It started with writing code\n<\/h2>\n\n<p>Like most teams, we started simple: everyone ran Claude Code or Codex in their own terminal and used it to write code.<\/p>\n\n<p>The agents kept getting better, so we started giving them other jobs. A production error? Let an agent do the first pass of analysis. An upstream dependency shipped a new release? Let an agent upgrade our binaries. Daily health checks. First-pass review on incoming PRs. A customer question in the chat? Let an agent draft the answer.<\/p>\n\n<p>Somewhere along the way, our agents crossed the line from \u201ccoding tool\u201d to something much closer to a working member of the team.<\/p>\n\n<blockquote>\n<p>An agent is not \u201can API call to a model.\u201d The model may run at a provider \u2014 the agent itself is a real process that checks out your repos, runs commands, and holds your credentials.<\/p>\n<\/blockquote>\n\n<p>Where that process runs, who can see it, and who can direct it \u2014 that\u2019s where the real questions start.<\/p>\n\n<h2>\n  \n  \n  Where the personal-terminal model breaks down\n<\/h2>\n\n<p>The problem showed up quickly. Our agents were doing team work, but they still lived like personal tools \u2014 in one person\u2019s terminal. Teammates couldn\u2019t see what an agent was doing, couldn\u2019t take over a session, couldn\u2019t review its output, and whatever context it had built up stayed on one laptop.<\/p>\n\n<p>So everyone wrote ad-hoc glue for their own use case: message channels, cron jobs, credential handling, context stitching. Then one day we compared notes \u2014 we were all writing nearly identical code.<\/p>\n\n<p>Most teams using agents hit this stage sooner or later: the agent capability is ready-made; what\u2019s missing is the layer that connects it to how a team actually works. And everyone keeps rebuilding that layer from scratch.<\/p>\n\n<h2>\n  \n  \n  Three requirements we couldn't compromise on\n<\/h2>\n\n<p>We looked hard at the existing tools \u2014 personal assistants like OpenClaw, agent workspaces like Raft, and Claude Tag. Each is good at what it aims for. But we kept coming back to three requirements, and nothing satisfied all three at once:<\/p>\n\n<ol>\n<li>\n<strong>Team-level collaboration and permissions.<\/strong> Multiple people and multiple agents in shared conversations \u2014 with per-member visibility and separate trust boundaries where needed. The agent analyzing production errors and the agent answering customer questions shouldn\u2019t have to run on the same machine or share the same privileges.<\/li>\n<li>\n<strong>Work stays where work already happens.<\/strong> Our alerts, CI notifications, customers, and integrations live in Slack and Discord. A separate workspace for agent collaboration \u2014 however well designed \u2014 means a second IM and a migration. We wanted agents to join our channels, not the other way around.<\/li>\n<li>\n<strong>Control over runtimes and infrastructure.<\/strong> Which model, which runtime, which machine \u2014 those choices should stay ours. And the platform itself should be open source, so we can extend it for our own use cases instead of waiting on a vendor.<\/li>\n<\/ol>\n\n<p>So we built AgentConnect: an open-source platform for teams to run and manage agents together. The principle behind it: <strong>we don\u2019t invent a new place for collaboration \u2014 we bring the agents to where it already happens.<\/strong><\/p>\n\n<h2>\n  \n  \n  What that looks like in practice\n<\/h2>\n\n<p>Here\u2019s the kind of workflow this enables \u2014 and the reason we say \u201cAI team\u201d rather than \u201cAI tool\u201d:<\/p>\n\n<ol>\n<li>A customer reports a payment failure in the <code>#customers<\/code> channel.<\/li>\n<li>\n<code>support-agent<\/code>, running on Claude Code, triages the problem and hands the incident off in the same thread.<\/li>\n<li>\n<code>payments-agent<\/code>, running on Codex on a different machine, reproduces the bug and opens a pull request.<\/li>\n<li>\n<code>support-agent<\/code> closes the loop in the original thread.<\/li>\n<\/ol>\n\n<p>The workflow remains visible in one thread from start to finish, including the handoff and the machine boundary.<\/p>\n\n<p>AgentConnect provides the connective tissue: identity, routing, permissions, placement, triggers, and delivery. Each agent has a stable, named identity, backed by the runtime you choose \u2014 Claude Code, Codex, or any ACP-compatible runtime. Agents live in Slack, Discord, Telegram, and Lark; work can also start from GitHub or GitLab events, generic webhooks, and schedules. Permissions decide which members \u2014 and which agents \u2014 can see what. Memory, when enabled, lets an agent retain context across sessions. And through OpenConnector, an open-source connector gateway, agents can act on third-party services without putting provider credentials in the agent process.<\/p>\n\n<h2>\n  \n  \n  Execution stays on your infrastructure\n<\/h2>\n\n<p>Agent execution and workspaces stay on infrastructure you control. The Control Plane never sits on the live message path and never stores message content; callback-based ingress may pass through an optional, non-persisting relay.<\/p>\n\n<blockquote>\n<p>Established sessions keep running at the edge during a Control Plane outage; new assignments and orchestration resume when it reconnects.<\/p>\n<\/blockquote>\n\n<h2>\n  \n  \n  Where this is going\n<\/h2>\n\n<p>We believe the next phase is helping teams carry context forward without flattening access boundaries. An authorized agent can retain and surface relevant decisions from the channels, repositories, and systems it is allowed to access, so teams don\u2019t have to reconstruct the same context every time. That layer should be open source and provider-neutral \u2014 a team\u2019s context shouldn\u2019t be entrusted to any single vendor.<\/p>\n\n<h2>\n  \n  \n  Try it\n<\/h2>\n\n<p>If your team is at the \u201ceveryone is writing their own agent glue\u201d stage \u2014 we turned that glue into a platform. Open source under Apache 2.0, self-hostable today.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/agentconnect-md\/agentconnect\" rel=\"noopener noreferrer\">GitHub \u2014 a star helps<\/a><\/li>\n<li><a href=\"https:\/\/docs.agentconnect.md\/docs\/getting-started\" rel=\"noopener noreferrer\">Getting started<\/a><\/li>\n<li><a href=\"https:\/\/app.agentconnect.md\/waitlist\" rel=\"noopener noreferrer\">Hosted Cloud waitlist<\/a><\/li>\n<\/ul>\n\n","category":["ai","agents","slack","codereview"]}]}}