<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: zfy0701</title>
    <description>The latest articles on DEV Community by zfy0701 (@zfy0701).</description>
    <link>https://dev.to/zfy0701</link>
    <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%2Fuser%2Fprofile_image%2F4088666%2F7ac79517-118d-47e7-b67a-54f50ab7bbd6.jpg</url>
      <title>DEV Community: zfy0701</title>
      <link>https://dev.to/zfy0701</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zfy0701"/>
    <language>en</language>
    <item>
      <title>Introducing Gitea support</title>
      <dc:creator>zfy0701</dc:creator>
      <pubDate>Tue, 15 Sep 2026 13:04:27 +0000</pubDate>
      <link>https://dev.to/agentconnect/introducing-gitea-support-4pa1</link>
      <guid>https://dev.to/agentconnect/introducing-gitea-support-4pa1</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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’s run state and links to its session.&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gitea 1.23 or later is required. For setup and configuration, see the &lt;a href="https://docs.agentconnect.md/docs/gitea" rel="noopener noreferrer"&gt;Gitea integration guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.agentconnect.md/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/agentconnect-md/agentconnect" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gitea</category>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Grep beats LSP? Why coding agents ignore your fancier tools</title>
      <dc:creator>zfy0701</dc:creator>
      <pubDate>Mon, 31 Aug 2026 04:28:09 +0000</pubDate>
      <link>https://dev.to/agentconnect/grep-beats-lsp-why-coding-agents-ignore-your-fancier-tools-2gbo</link>
      <guid>https://dev.to/agentconnect/grep-beats-lsp-why-coding-agents-ignore-your-fancier-tools-2gbo</guid>
      <description>&lt;p&gt;Why would a coding agent ignore a retrieval interface that returns more precise results?&lt;/p&gt;

&lt;p&gt;I explored this question in a small study comparing lexical search with &lt;code&gt;grep&lt;/code&gt; against LSP-backed semantic navigation. I expected semantic navigation to reduce noise and save tokens. Instead, agents often stayed with &lt;code&gt;grep&lt;/code&gt;. When I forced them to use the semantic path first, task success sometimes fell.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;In this post, I describe how code retrieval affected both code-finding and editing tasks, why &lt;code&gt;grep&lt;/code&gt; had an advantage in some conditions, and what this means for agent platforms.&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A model and its familiar tool loop act as one capability surface.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparing two code retrieval interfaces
&lt;/h2&gt;

&lt;p&gt;I compared two ways for an agent to retrieve code context. &lt;code&gt;grep&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;grep&lt;/code&gt;, 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model doesn't blindly prefer grep — it routes by task&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Share of semantic (LSP) tool calls when both grep and LSP are available and the agent chooses freely.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Legend: Opus 4.8 (blue), Sonnet 4.6 (magenta), Haiku 4.5 (green).&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Same models, same free choice — 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.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Opus 4.8&lt;/th&gt;
&lt;th&gt;Sonnet 4.6&lt;/th&gt;
&lt;th&gt;Haiku 4.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Localization&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reference-completeness&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;
&lt;td&gt;57%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-file rename&lt;/td&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codebase noise determines the value of semantic navigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Accuracy gain from semantic retrieval on reference-completeness (ΔF1 = LSP − grep). Bar colour encodes how noisy &lt;code&gt;grep&lt;/code&gt; is on that repo; &lt;em&gt;prec&lt;/em&gt; = grep’s precision there.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Legend: blue means grep is clean here; magenta means grep is noisy here.&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Two repositories in the same language, opposite verdicts. On clean &lt;code&gt;remeda&lt;/code&gt; the LSP adds nothing — &lt;code&gt;grep&lt;/code&gt; already resolves every reference correctly, so semantic retrieval is pure overhead. On noisy &lt;code&gt;hono&lt;/code&gt; it adds +0.246 F1. The predictor is how badly &lt;code&gt;grep&lt;/code&gt;'s precision degrades on that codebase, not whether the language is statically typed.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Repo&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;grep precision&lt;/th&gt;
&lt;th&gt;ΔF1 (LSP − grep)&lt;/th&gt;
&lt;th&gt;Token cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;remeda&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;td&gt;+0.000&lt;/td&gt;
&lt;td&gt;+16%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hono&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;0.51&lt;/td&gt;
&lt;td&gt;+0.246&lt;/td&gt;
&lt;td&gt;−12%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;requests&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;0.76&lt;/td&gt;
&lt;td&gt;+0.072&lt;/td&gt;
&lt;td&gt;+19%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These results are conditional rather than categorical. The agents did not simply “always use grep.” Their routing changed with the task, and the value of LSP-backed navigation changed with the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tool interfaces change agent behavior
&lt;/h2&gt;

&lt;p&gt;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. &lt;code&gt;grep&lt;/code&gt;, by contrast, usually returned the matching line immediately: &lt;code&gt;src/auth.ts:42: return validateToken(token)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Returning source context improves semantic navigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Multi-file rename, Opus 4.8, pyright with a pre-warmed index. Same semantic backend in both LSP arms — only the &lt;em&gt;output shape&lt;/em&gt; differs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Legend: grep (blue), LSP — locations only (magenta), LSP + inline context (green).&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Returning locations forces the agent to go read each site; returning the line inline does not. Attaching ±2 lines of source to every reference cut follow-up file reads 15.2 → 3.2 — below grep's own 4.3 — and lifted pass@1 from 0.67 to 0.83. The retrieval backend never changed; only the shape of what came back.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Arm&lt;/th&gt;
&lt;th&gt;pass@1&lt;/th&gt;
&lt;th&gt;Site recall&lt;/th&gt;
&lt;th&gt;Tokens&lt;/th&gt;
&lt;th&gt;Follow-up reads&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;grep&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;td&gt;1.000&lt;/td&gt;
&lt;td&gt;2,451&lt;/td&gt;
&lt;td&gt;4.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LSP — locations only&lt;/td&gt;
&lt;td&gt;0.67&lt;/td&gt;
&lt;td&gt;0.930&lt;/td&gt;
&lt;td&gt;4,131&lt;/td&gt;
&lt;td&gt;15.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LSP + inline context&lt;/td&gt;
&lt;td&gt;0.83&lt;/td&gt;
&lt;td&gt;0.958&lt;/td&gt;
&lt;td&gt;3,336&lt;/td&gt;
&lt;td&gt;3.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This result illustrates a principle that Anthropic also emphasizes in &lt;a href="https://www.anthropic.com/engineering/writing-tools-for-agents" rel="noopener noreferrer"&gt;Writing effective tools for agents&lt;/a&gt;: 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.&lt;/p&gt;

&lt;p&gt;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 “tool use” in the abstract. A familiar loop—prompt, tool call, readable result, next action—can be part of the capability observed in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why lexical search had an advantage
&lt;/h2&gt;

&lt;p&gt;Interface familiarity is only part of the explanation. Lexical search also had a real structural advantage for some tasks.&lt;/p&gt;

&lt;p&gt;A semantic reference is only one kind of text match. A rename may also need to update comments, docstrings, configuration, or strings. &lt;code&gt;find_references&lt;/code&gt; will not return those by design, while &lt;code&gt;grep&lt;/code&gt; can.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;semantic references ⊂ textual occurrences&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For text-wide edits, &lt;code&gt;grep&lt;/code&gt; can be the better retrieval tool even for a model with perfect training on LSP-backed navigation.&lt;/p&gt;

&lt;p&gt;This gives us two explanations for the observed behavior:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Structure:&lt;/strong&gt; some tasks need textual completeness, which the tested semantic-navigation methods do not provide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distribution:&lt;/strong&gt; the model may have more practice with familiar tools and result shapes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Structure explains when grep is better. Distribution explains why familiar paths still win.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The harness is part of the system
&lt;/h2&gt;

&lt;p&gt;Here, I use &lt;em&gt;harness&lt;/em&gt; 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.&lt;/p&gt;

&lt;p&gt;This surrounding system can materially change behavior. Anthropic’s work on &lt;a href="https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents" rel="noopener noreferrer"&gt;effective harnesses for long-running agents&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;edit&lt;/code&gt;, and &lt;code&gt;bash&lt;/code&gt; may learn policies that depend on those interfaces. Moving the same model into a different tool layer can therefore change its effective capability.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;agent capability = model × harness&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserving native runtimes with ACP
&lt;/h2&gt;

&lt;p&gt;This is one reason my team and I built &lt;a href="https://docs.agentconnect.md/docs/getting-started" rel="noopener noreferrer"&gt;AgentConnect&lt;/a&gt; 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’s own machine, where each runtime keeps its native tools and normal prompt-to-tool workflow.&lt;/p&gt;

&lt;p&gt;AgentConnect communicates with these runtimes through the open &lt;a href="https://agentclientprotocol.com/get-started/architecture" rel="noopener noreferrer"&gt;Agent Client Protocol&lt;/a&gt; (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.&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One open boundary. Each agent stays on its home turf.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical guidance for adding tools
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;My recommendation is to start with the native tool surface, then apply the following checks when adding a new capability:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Test real tasks at equal accuracy.&lt;/strong&gt; Do not celebrate lower token use if success also fell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure whether the agent calls it.&lt;/strong&gt; Availability is not adoption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Return enough context for the next decision.&lt;/strong&gt; A result like &lt;code&gt;path:line:content&lt;/code&gt; may work better than a bare location object.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep a native fallback.&lt;/strong&gt; Semantic and lexical search solve different problems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route by the task and the codebase.&lt;/strong&gt; A noisy repository may benefit from semantic navigation. A text-wide search may still need &lt;code&gt;grep&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reinforce the new trajectory when it matters.&lt;/strong&gt; A prompt can introduce a tool, but it may not create a reliable policy for using it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As Anthropic notes in &lt;a href="https://www.anthropic.com/engineering/building-effective-agents" rel="noopener noreferrer"&gt;Building effective agents&lt;/a&gt;, 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’s workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The study shows why “better retrieval” 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;For the full experimental setup, task definitions, and results, see &lt;a href="https://github.com/agentconnect-md/lsp-vs-grep-token-study" rel="noopener noreferrer"&gt;Does a Language Server Save Tokens for Coding Agents?&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/agentconnect-md/agentconnect" rel="noopener noreferrer"&gt;Star AgentConnect on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.agentconnect.md/docs/getting-started" rel="noopener noreferrer"&gt;Get started with AgentConnect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;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 &lt;code&gt;textDocument/rename&lt;/code&gt;, diagnostics, or code actions. A rename-capable LSP might perform differently on the refactoring tasks where &lt;code&gt;grep&lt;/code&gt; 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.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>AgentConnect — the open-source, multi-agent alternative to Claude Tag</title>
      <dc:creator>zfy0701</dc:creator>
      <pubDate>Wed, 26 Aug 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/agentconnect/agentconnect-the-open-source-multi-agent-alternative-to-claude-tag-20cn</link>
      <guid>https://dev.to/agentconnect/agentconnect-the-open-source-multi-agent-alternative-to-claude-tag-20cn</guid>
      <description>&lt;p&gt;AI agents have gotten genuinely good at the work itself—writing 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?&lt;/p&gt;

&lt;p&gt;Today, we’re introducing &lt;a href="https://github.com/agentconnect-md/agentconnect" rel="noopener noreferrer"&gt;AgentConnect&lt;/a&gt;: an open-source platform where teams and multiple AI agents work together across Slack, Telegram, Discord, GitHub, and GitLab.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Here are a few highlights:&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Multiple agents, one team
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Run multiple ACP-compatible agents side by side.&lt;/li&gt;
&lt;li&gt;Let agents collaborate through shared conversations and agent-to-agent calls.&lt;/li&gt;
&lt;li&gt;Configure models, workspaces, memory, MCP servers, skills, and sandbox policies per agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💬 Work where your team already works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Trigger work from code reviews in GitHub or GitLab, webhooks, or schedules.&lt;/li&gt;
&lt;li&gt;Connect agents to Slack, Telegram, and Discord.&lt;/li&gt;
&lt;li&gt;Continue conversations across platforms—even between Slack and Telegram.&lt;/li&gt;
&lt;li&gt;Configure and follow your agents from one console.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔐 Fine-grained access control
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Control agent access separately from session visibility.&lt;/li&gt;
&lt;li&gt;Sync permissions with GitHub and Slack.&lt;/li&gt;
&lt;li&gt;Decide which repositories, tools, and other agents each agent may access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏠 Open source and self-hosted
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;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"&gt;&lt;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"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both the open-source and hosted versions of AgentConnect are available today. We’d 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.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub → &lt;a href="https://github.com/agentconnect-md/agentconnect" rel="noopener noreferrer"&gt;https://github.com/agentconnect-md/agentconnect&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website → &lt;a href="https://agentconnect.md" rel="noopener noreferrer"&gt;https://agentconnect.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation → &lt;a href="https://docs.agentconnect.md" rel="noopener noreferrer"&gt;https://docs.agentconnect.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video → &lt;a href="https://www.youtube.com/watch?v=KA7xHF5JbJc" rel="noopener noreferrer"&gt;Watch the two-minute introduction&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>slack</category>
      <category>codereview</category>
    </item>
    <item>
      <title>Why we built AgentConnect</title>
      <dc:creator>zfy0701</dc:creator>
      <pubDate>Tue, 25 Aug 2026 17:39:24 +0000</pubDate>
      <link>https://dev.to/agentconnect/why-we-built-agentconnect-4bfb</link>
      <guid>https://dev.to/agentconnect/why-we-built-agentconnect-4bfb</guid>
      <description>&lt;h2&gt;
  
  
  It started with writing code
&lt;/h2&gt;

&lt;p&gt;Like most teams, we started simple: everyone ran Claude Code or Codex in their own terminal and used it to write code.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Somewhere along the way, our agents crossed the line from “coding tool” to something much closer to a working member of the team.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An agent is not “an API call to a model.” The model may run at a provider — the agent itself is a real process that checks out your repos, runs commands, and holds your credentials.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Where that process runs, who can see it, and who can direct it — that’s where the real questions start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the personal-terminal model breaks down
&lt;/h2&gt;

&lt;p&gt;The problem showed up quickly. Our agents were doing team work, but they still lived like personal tools — in one person’s terminal. Teammates couldn’t see what an agent was doing, couldn’t take over a session, couldn’t review its output, and whatever context it had built up stayed on one laptop.&lt;/p&gt;

&lt;p&gt;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 — we were all writing nearly identical code.&lt;/p&gt;

&lt;p&gt;Most teams using agents hit this stage sooner or later: the agent capability is ready-made; what’s missing is the layer that connects it to how a team actually works. And everyone keeps rebuilding that layer from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three requirements we couldn't compromise on
&lt;/h2&gt;

&lt;p&gt;We looked hard at the existing tools — 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:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Team-level collaboration and permissions.&lt;/strong&gt; Multiple people and multiple agents in shared conversations — with per-member visibility and separate trust boundaries where needed. The agent analyzing production errors and the agent answering customer questions shouldn’t have to run on the same machine or share the same privileges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work stays where work already happens.&lt;/strong&gt; Our alerts, CI notifications, customers, and integrations live in Slack and Discord. A separate workspace for agent collaboration — however well designed — means a second IM and a migration. We wanted agents to join our channels, not the other way around.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control over runtimes and infrastructure.&lt;/strong&gt; Which model, which runtime, which machine — 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.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So we built AgentConnect: an open-source platform for teams to run and manage agents together. The principle behind it: &lt;strong&gt;we don’t invent a new place for collaboration — we bring the agents to where it already happens.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What that looks like in practice
&lt;/h2&gt;

&lt;p&gt;Here’s the kind of workflow this enables — and the reason we say “AI team” rather than “AI tool”:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A customer reports a payment failure in the &lt;code&gt;#customers&lt;/code&gt; channel.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;support-agent&lt;/code&gt;, running on Claude Code, triages the problem and hands the incident off in the same thread.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;payments-agent&lt;/code&gt;, running on Codex on a different machine, reproduces the bug and opens a pull request.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;support-agent&lt;/code&gt; closes the loop in the original thread.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The workflow remains visible in one thread from start to finish, including the handoff and the machine boundary.&lt;/p&gt;

&lt;p&gt;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 — 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 — and which agents — 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Execution stays on your infrastructure
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Established sessions keep running at the edge during a Control Plane outage; new assignments and orchestration resume when it reconnects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Where this is going
&lt;/h2&gt;

&lt;p&gt;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’t have to reconstruct the same context every time. That layer should be open source and provider-neutral — a team’s context shouldn’t be entrusted to any single vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;If your team is at the “everyone is writing their own agent glue” stage — we turned that glue into a platform. Open source under Apache 2.0, self-hostable today.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/agentconnect-md/agentconnect" rel="noopener noreferrer"&gt;GitHub — a star helps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.agentconnect.md/docs/getting-started" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.agentconnect.md/waitlist" rel="noopener noreferrer"&gt;Hosted Cloud waitlist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>slack</category>
      <category>codereview</category>
    </item>
  </channel>
</rss>
