<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>agents.cli | Blog</title><description/><link>https://www.agentscli.com/</link><language>en</language><item><title>Write it down once. Every AI coding tool reads the same kind of file.</title><link>https://www.agentscli.com/blog/write-it-down-once/</link><guid isPermaLink="true">https://www.agentscli.com/blog/write-it-down-once/</guid><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You’ve told Copilot “we use pnpm, not npm” a hundred times. Once per session. Maybe more if the session is long enough that it forgets.&lt;/p&gt;
&lt;p&gt;The fix is older than agents themselves: write it down. In one file. Check it in. Let the tool read it.&lt;/p&gt;
&lt;p&gt;Every major AI coding tool added this primitive in the same year — and they’re all essentially the same file under different names:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;.github/copilot-instructions.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cursor&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;.cursorrules&lt;/code&gt; (single file) or &lt;code dir=&quot;auto&quot;&gt;.cursor/rules/*.mdc&lt;/code&gt; (multiple, scoped)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;CLAUDE.md&lt;/code&gt; (project root, with imports for &lt;code dir=&quot;auto&quot;&gt;@AGENTS.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Codex&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; (the open spec, &lt;a href=&quot;https://agents.md/&quot;&gt;agents.md&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;opencode&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; (same open spec)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Same idea. Different filenames. Convergence on a pattern that should embarrass anyone who said this would never standardise.&lt;/p&gt;
&lt;p&gt;What goes in it? Whatever the agent gets wrong twice. Real examples from real teams:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;“Tests live in &lt;code dir=&quot;auto&quot;&gt;__tests__/&lt;/code&gt;, not next to source.”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;“All DB calls go through &lt;code dir=&quot;auto&quot;&gt;db/repo/&lt;/code&gt;. Never direct queries from route handlers.”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;“Use &lt;code dir=&quot;auto&quot;&gt;pnpm validate&lt;/code&gt; before declaring done. Never push to &lt;code dir=&quot;auto&quot;&gt;main&lt;/code&gt;.”&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;“The auth flow is in &lt;code dir=&quot;auto&quot;&gt;docs/auth.md&lt;/code&gt; — read it before touching anything under &lt;code dir=&quot;auto&quot;&gt;services/auth&lt;/code&gt;.”&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The test: if you’ve corrected the agent on the same thing twice across two sessions, that’s a candidate for the file. The cost of writing one line of context now is much smaller than the cost of correcting the agent for the next year.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The portability move:&lt;/strong&gt; Codex and opencode read &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; natively. Claude Code reads &lt;code dir=&quot;auto&quot;&gt;CLAUDE.md&lt;/code&gt; but can &lt;code dir=&quot;auto&quot;&gt;@import&lt;/code&gt; &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt;. Cursor and Copilot read their own files. The clean pattern, if you’re using multiple tools, is one canonical &lt;code dir=&quot;auto&quot;&gt;AGENTS.md&lt;/code&gt; at your repo root, then minimal tool-specific files that import or reference it. One source of truth; every agent in your stack walks in already knowing.&lt;/p&gt;
&lt;p&gt;For the full mechanics — layering, path-scoping, nested files, the differences between how each tool merges multiple sources — see &lt;a href=&quot;https://www.agentscli.com/foundations/rules/&quot;&gt;Rules&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>context-engineering</category><category>rules</category></item><item><title>Your AI agent can&apos;t read your Jira. MCP is how you fix that.</title><link>https://www.agentscli.com/blog/your-agent-cant-read-your-jira/</link><guid isPermaLink="true">https://www.agentscli.com/blog/your-agent-cant-read-your-jira/</guid><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The agent writes the function flawlessly. The function calls a column that doesn’t exist.&lt;/p&gt;
&lt;p&gt;You sigh, open &lt;code dir=&quot;auto&quot;&gt;psql&lt;/code&gt;, run &lt;code dir=&quot;auto&quot;&gt;\d users&lt;/code&gt;, copy the actual schema back into the chat. The agent apologises. The function is now correct. You did the integration by hand, again, like you’ve done a hundred times this year. Open a tab, copy something, paste it back. Switch to Jira, find the ticket, paste the title in. Open Figma, screenshot the frame, drag it in.&lt;/p&gt;
&lt;p&gt;The agent is brilliant at the code. The agent is &lt;em&gt;blind&lt;/em&gt; to every system your code talks to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MCP — the Model Context Protocol — is the fix.&lt;/strong&gt; It’s a wire format for letting agents call typed tools that talk to external systems. Instead of you copy-pasting the Postgres schema, the agent runs &lt;code dir=&quot;auto&quot;&gt;postgres.describe_table(&quot;users&quot;)&lt;/code&gt; itself, sees the result, and writes a function against the &lt;em&gt;actual&lt;/em&gt; columns. Instead of you reading the Jira ticket, it runs &lt;code dir=&quot;auto&quot;&gt;jira.get_ticket(&quot;AUTH-412&quot;)&lt;/code&gt; and reads the title, description, and acceptance criteria directly.&lt;/p&gt;
&lt;p&gt;This isn’t theoretical anymore. Every major AI coding tool added MCP support this year — Claude Code, Codex, opencode, Copilot, Cursor. Whatever you use, the protocol is the same. The MCP server you install for Jira works across all of them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What people actually run:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Issue trackers&lt;/strong&gt; — Jira, Linear, GitHub Issues. The agent reads the ticket it’s working on, posts updates, closes it on merge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Databases&lt;/strong&gt; — Postgres, MySQL, SQLite. “Check the actual schema before you write this query.” No more guessing column names.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud consoles&lt;/strong&gt; — AWS, Cloudflare, Vercel. List buckets, check deployment status, read logs without leaving the editor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design tools&lt;/strong&gt; — Figma. The agent reads the component spec directly instead of you describing it in prose.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Browser automation&lt;/strong&gt; — Playwright. The agent navigates a staging site, fills a form, screenshots the result.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The test: if the answer to “&lt;em&gt;why did you do it that way?&lt;/em&gt;” is “&lt;em&gt;I had to guess because I couldn’t see the source,&lt;/em&gt;” there’s probably an MCP server that closes the gap. The integration moves from “you, by hand” to “the agent, in-flow.”&lt;/p&gt;
&lt;p&gt;For the per-tool setup (where servers are configured, scopes, transport options) see &lt;a href=&quot;https://www.agentscli.com/foundations/mcp-servers/&quot;&gt;MCP servers&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>context-engineering</category><category>mcp</category></item><item><title>Your AI agent is smarter than you. And knows less than you.</title><link>https://www.agentscli.com/blog/the-gap/</link><guid isPermaLink="true">https://www.agentscli.com/blog/the-gap/</guid><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The AI agent you’re using has read more code than you have. More languages, more frameworks, more decades of open source. It can sketch a React app, refactor a Rust crate, write a SQL query against a schema it’s never seen. Pattern-matched against a corpus larger than any single human will ever encounter.&lt;/p&gt;
&lt;p&gt;It also doesn’t know that your team uses &lt;code dir=&quot;auto&quot;&gt;pnpm&lt;/code&gt;, not &lt;code dir=&quot;auto&quot;&gt;npm&lt;/code&gt;. It doesn’t know the auth service moved out of &lt;code dir=&quot;auto&quot;&gt;services/auth&lt;/code&gt; six months ago. It doesn’t know which of the five “utils” folders is actually authoritative, or that the &lt;code dir=&quot;auto&quot;&gt;Logger&lt;/code&gt; class is preferred over &lt;code dir=&quot;auto&quot;&gt;console.log&lt;/code&gt;, or that your migrations have an unwritten rule about never being edited after merge.&lt;/p&gt;
&lt;p&gt;That asymmetry is the gap. The agent is &lt;strong&gt;broad and shallow&lt;/strong&gt;. The SME — you, your tech lead, the engineer who wrote the original module — is &lt;strong&gt;narrow and deep&lt;/strong&gt;. The agent’s failures aren’t usually intelligence failures. They’re context failures. It chose a reasonable pattern; it just wasn’t the pattern your team uses. It picked a perfectly good library; it just wasn’t the one already vendored in your repo.&lt;/p&gt;
&lt;p&gt;A smarter model doesn’t fix this. A bigger model doesn’t fix this. The next generation of agent will still walk into your codebase blind to the things that aren’t written down.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context engineering is the practice of closing that gap.&lt;/strong&gt; Writing down what only you know, in a form the agent can read. Connecting the agent to the systems your team’s knowledge actually lives in (Jira, Postgres, Figma). Encoding the rules that can’t be inferred from the code alone. Isolating the agent’s context so one bad thread doesn’t pollute the next.&lt;/p&gt;
&lt;p&gt;Every chapter on this site is a technique for it. Rules. Skills. MCP servers. Subagents. Hooks. Permissions. Plan mode. They’re not features to admire — they’re levers for closing the gap between what the agent is capable of and what it actually knows about &lt;em&gt;your&lt;/em&gt; work.&lt;/p&gt;
&lt;p&gt;Start with &lt;a href=&quot;https://www.agentscli.com/foundations/rules/&quot;&gt;Rules&lt;/a&gt; — the simplest lever, the one every major AI coding tool added in the same year. We’ll cover the rest from there.&lt;/p&gt;</content:encoded><category>context-engineering</category><category>thesis</category></item></channel></rss>