<?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: Mohamed Ashraf Elsaed</title>
    <description>The latest articles on DEV Community by Mohamed Ashraf Elsaed (@mohameedelsaeid).</description>
    <link>https://dev.to/mohameedelsaeid</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%2F373753%2F180e2723-5c4e-4af0-b0c4-9250f2e336fa.jpg</url>
      <title>DEV Community: Mohamed Ashraf Elsaed</title>
      <link>https://dev.to/mohameedelsaeid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohameedelsaeid"/>
    <language>en</language>
    <item>
      <title>Aletheia 0.1.13: start the MCP server from npm, and a fix for the MCP Registry entry</title>
      <dc:creator>Mohamed Ashraf Elsaed</dc:creator>
      <pubDate>Tue, 03 Nov 2026 01:56:40 +0000</pubDate>
      <link>https://dev.to/mohameedelsaeid/aletheia-0113-start-the-mcp-server-from-npm-and-a-fix-for-the-mcp-registry-entry-13pn</link>
      <guid>https://dev.to/mohameedelsaeid/aletheia-0113-start-the-mcp-server-from-npm-and-a-fix-for-the-mcp-registry-entry-13pn</guid>
      <description>&lt;p&gt;Aletheia (npm: &lt;code&gt;aletheia-mem&lt;/code&gt;) is a free, local memory and rules hub for AI coding tools. Each coding agent forgets between sessions and keeps its own rules file. Aletheia keeps one SQLite store on your machine. Tools read it over MCP, REST or a CLI, and one rule set is synced into &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;GEMINI.md&lt;/code&gt;, Cursor and Windsurf rules, and Copilot and Aider files.&lt;/p&gt;

&lt;p&gt;Version 0.1.13 is a patch release. Here is what changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start the MCP server from npm
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;aletheia mcp&lt;/code&gt; runs the MCP server over stdio. It is the same server as the &lt;code&gt;aletheia-mcp&lt;/code&gt; command. With no checkout and no global install, an MCP client can start it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"aletheia"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"aletheia-mem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bun 1.1 or newer must be on the PATH. &lt;code&gt;bunx aletheia-mem mcp&lt;/code&gt; works too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP Registry entry starts the server
&lt;/h2&gt;

&lt;p&gt;Aletheia is listed in the official MCP Registry as &lt;code&gt;io.github.mohamed-ashraf-elsaed/aletheia-mem&lt;/code&gt;. A registry client runs an npm package by its name, so it ran &lt;code&gt;npx aletheia-mem&lt;/code&gt;. That is the CLI, and with no argument it only printed its help. Up to 0.1.12, a registry install got the help text instead of a server.&lt;/p&gt;

&lt;p&gt;The manifest now passes the package argument &lt;code&gt;mcp&lt;/code&gt;, so the client runs &lt;code&gt;npx aletheia-mem mcp&lt;/code&gt;. The published package answered &lt;code&gt;initialize&lt;/code&gt; and listed its 13 tools through &lt;code&gt;npx -y aletheia-mem@0.1.13 mcp&lt;/code&gt;. No registry client has installed it from the new entry yet, so that part is not tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  A new docs layout
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://aletheia.mohamedashrafelsaed.com/docs/" rel="noopener noreferrer"&gt;docs site&lt;/a&gt; has a new layout: a sidebar of collapsible groups, an "On this page" column, and dark code blocks with a copy button. Every page has search (Ctrl K, Cmd K on a Mac, or &lt;code&gt;/&lt;/code&gt;) and a light and dark theme switch. The pages still load no script file and nothing from another origin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; aletheia-mem
aletheia-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It needs Bun 1.1 or newer. The server binds to loopback only. There is no account and no telemetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;Alpha. Hooks have run in real sessions of Claude Code, Command Code and Codex CLI, on one machine. Cursor, Gemini CLI and Windsurf configs are written from their docs and not yet tested on a real install.&lt;/p&gt;

&lt;p&gt;If you run it with a tool I have not tested, &lt;a href="https://github.com/mohamed-ashraf-elsaed/aletheia-mem/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt; with the tool, its version, the command and the result.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aletheia.mohamedashrafelsaed.com/docs/releases/v0.1.13.html" rel="noopener noreferrer"&gt;Release notes for 0.1.13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aletheia.mohamedashrafelsaed.com/docs/" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mohamed-ashraf-elsaed/aletheia-mem" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt; (Apache-2.0)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Aletheia 0.1.12: docs on their own site, release notes per version, MCP registry publishing</title>
      <dc:creator>Mohamed Ashraf Elsaed</dc:creator>
      <pubDate>Mon, 02 Nov 2026 15:09:19 +0000</pubDate>
      <link>https://dev.to/mohameedelsaeid/aletheia-0112-docs-on-their-own-site-release-notes-per-version-mcp-registry-publishing-2a5j</link>
      <guid>https://dev.to/mohameedelsaeid/aletheia-0112-docs-on-their-own-site-release-notes-per-version-mcp-registry-publishing-2a5j</guid>
      <description>&lt;p&gt;Aletheia (npm: &lt;code&gt;aletheia-mem&lt;/code&gt;) is a free, local memory and rules hub for AI coding tools. Each coding agent forgets between sessions and keeps its own rules file. Aletheia keeps one SQLite store on your machine. Tools read it over MCP, REST or a CLI, and one rule set is synced into &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;GEMINI.md&lt;/code&gt;, Cursor and Windsurf rules, and Copilot and Aider files.&lt;/p&gt;

&lt;p&gt;Version 0.1.12 is a patch release. Here is what changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The docs have their own address
&lt;/h2&gt;

&lt;p&gt;The documentation moved from GitHub Pages to &lt;a href="https://aletheia.mohamedashrafelsaed.com/docs/" rel="noopener noreferrer"&gt;aletheia.mohamedashrafelsaed.com/docs&lt;/a&gt;. Paths are unchanged, and the old address redirects. Each version now has its own release notes page, and an &lt;a href="https://aletheia.mohamedashrafelsaed.com/docs/releases/feed.xml" rel="noopener noreferrer"&gt;Atom feed&lt;/a&gt; lists every release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Published to the MCP registry on every tag
&lt;/h2&gt;

&lt;p&gt;The release workflow bumps &lt;code&gt;server.json&lt;/code&gt; to the tag and publishes it to the official MCP registry with the registry's &lt;code&gt;mcp-publisher&lt;/code&gt; CLI and GitHub OIDC. 0.1.12 is listed there as &lt;code&gt;io.github.mohamed-ashraf-elsaed/aletheia-mem&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Settings shows only what the code reads
&lt;/h2&gt;

&lt;p&gt;The Settings page lists three settings: &lt;code&gt;facts.minConfidence&lt;/code&gt;, &lt;code&gt;context.facts&lt;/code&gt; and &lt;code&gt;rules.reviewDays&lt;/code&gt;. Seven settings that nothing read are gone. Use environment variables for the provider, fact budgets and excluded projects. Redaction is always on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; aletheia-mem
aletheia-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It needs Bun 1.1 or newer. The server binds to loopback only. There is no account and no telemetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;p&gt;Alpha. Hooks have run in real sessions of Claude Code, Command Code and Codex CLI, on one machine. Cursor, Gemini CLI and Windsurf configs are written from their docs and not yet tested on a real install.&lt;/p&gt;

&lt;p&gt;If you run it with a tool I have not tested, &lt;a href="https://github.com/mohamed-ashraf-elsaed/aletheia-mem/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt; with the tool, its version, the command and the result.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aletheia.mohamedashrafelsaed.com/docs/releases/v0.1.12.html" rel="noopener noreferrer"&gt;Release notes for 0.1.12&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aletheia.mohamedashrafelsaed.com/docs/" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mohamed-ashraf-elsaed/aletheia-mem" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt; (Apache-2.0)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Give all your AI coding tools one shared memory (free, local, 3 commands)</title>
      <dc:creator>Mohamed Ashraf Elsaed</dc:creator>
      <pubDate>Tue, 27 Oct 2026 18:03:56 +0000</pubDate>
      <link>https://dev.to/mohameedelsaeid/give-all-your-ai-coding-tools-one-shared-memory-free-local-3-commands-c6a</link>
      <guid>https://dev.to/mohameedelsaeid/give-all-your-ai-coding-tools-one-shared-memory-free-local-3-commands-c6a</guid>
      <description>&lt;p&gt;If you use more than one AI coding tool, you have probably noticed two things.&lt;/p&gt;

&lt;p&gt;First, every tool forgets. Close the session and the decisions, the quirks of your codebase and the "never do it this way" rules are gone.&lt;/p&gt;

&lt;p&gt;Second, every tool wants its own rules file: &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, Cursor rules, and so on. You end up copying the same rules into several places, and they drift apart.&lt;/p&gt;

&lt;p&gt;I wanted one place for both. So I made &lt;strong&gt;Aletheia&lt;/strong&gt;: a free, local memory and rules hub for AI coding tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keeps memory in &lt;strong&gt;one SQLite database on your machine&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Lets any tool read it over &lt;strong&gt;MCP, REST or the command line&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Writes your &lt;strong&gt;rules once&lt;/strong&gt; and syncs them into each tool's own instruction file.&lt;/li&gt;
&lt;li&gt;Exports and imports, so you can move between tools.&lt;/li&gt;
&lt;li&gt;Has a small local web app to search, edit, pin and review what was stored.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No account. No telemetry. It listens on &lt;code&gt;127.0.0.1&lt;/code&gt; only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it in three commands
&lt;/h2&gt;

&lt;p&gt;You need &lt;a href="https://bun.sh" rel="noopener noreferrer"&gt;Bun&lt;/a&gt; 1.1 or newer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; aletheia-mem
aletheia-server
&lt;span class="c"&gt;# open http://127.0.0.1:37790&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the whole setup. There are no runtime dependencies to install.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up a tool
&lt;/h2&gt;

&lt;p&gt;Aletheia can write the config for the tools it knows. By default it only shows you what it would do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aletheia &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--list&lt;/span&gt;          &lt;span class="c"&gt;# what it can set up, per tool&lt;/span&gt;
aletheia &lt;span class="nb"&gt;install &lt;/span&gt;claude-code     &lt;span class="c"&gt;# dry run: prints every file it would change&lt;/span&gt;
aletheia &lt;span class="nb"&gt;install &lt;/span&gt;claude-code &lt;span class="nt"&gt;--write&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without &lt;code&gt;--write&lt;/code&gt; nothing is written. With it, every changed file gets a timestamped backup first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two details I care about
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Secrets stay out.&lt;/strong&gt; Before anything is stored, capture hooks redact secrets and anything inside &lt;code&gt;&amp;lt;private&amp;gt;&lt;/code&gt; blocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory is treated as untrusted.&lt;/strong&gt; A stored note could contain text like "ignore your instructions". So when Aletheia hands memory back to a model, it wraps it in a marked block and tells the model it is data, not instructions. Tags inside notes are neutralised so a note cannot close the block early.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest status
&lt;/h2&gt;

&lt;p&gt;It is &lt;strong&gt;alpha&lt;/strong&gt;. The memory engine and the installers pass their tests. But I have not yet opened a real host app with a generated config, so I do not claim it "works with" any specific tool. I also measure retrieval, not answer accuracy, and I say so in the README.&lt;/p&gt;

&lt;p&gt;I built it with Claude Code: agents did most of the implementation in separate git worktrees, one task per commit, and I wrote the specs, reviewed the results and decided what counted as done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Help wanted
&lt;/h2&gt;

&lt;p&gt;The most useful thing you can do is try it with the tool you use and tell me what happens. Open an issue with the tool, its version, the command you ran and what the tool did.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/mohamed-ashraf-elsaed/aletheia-mem" rel="noopener noreferrer"&gt;https://github.com/mohamed-ashraf-elsaed/aletheia-mem&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/aletheia-mem" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/aletheia-mem&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docs: &lt;a href="https://aletheia.mohamedashrafelsaed.com/" rel="noopener noreferrer"&gt;https://aletheia.mohamedashrafelsaed.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What would you want your tools to remember?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I am Mohamed Ashraf Elsaed, a technical lead in Cairo. Aletheia's page, with the docs and numbers: &lt;a href="https://mohamedashrafelsaed.com/projects/aletheia/" rel="noopener noreferrer"&gt;https://mohamedashrafelsaed.com/projects/aletheia/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building AI Agents in Laravel with Claude Code SDK</title>
      <dc:creator>Mohamed Ashraf Elsaed</dc:creator>
      <pubDate>Sun, 22 Feb 2026 18:59:20 +0000</pubDate>
      <link>https://dev.to/mohameedelsaeid/building-ai-agents-in-laravel-with-claude-code-sdk-33l</link>
      <guid>https://dev.to/mohameedelsaeid/building-ai-agents-in-laravel-with-claude-code-sdk-33l</guid>
      <description>&lt;p&gt;I just released an open-source Laravel package that lets you build AI agents powered by Claude Code directly in your PHP applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Claude Code is an incredibly powerful agent — it can read files, edit code, run bash commands, search the web, and delegate to subagents. But it's a CLI tool. If you want those capabilities inside a Laravel app (automated code reviews, AI-powered admin tools, agentic workflows), you need a programmatic interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Agent SDK for Laravel&lt;/strong&gt; wraps the Claude Code CLI and gives you a fluent PHP API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require mohamed-ashraf-elsaed/claude-agent-sdk-laravel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentSDK\Facades\ClaudeAgent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'What files are in this directory?'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;       &lt;span class="c1"&gt;// Final text result&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;costUsd&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;    &lt;span class="c1"&gt;// Cost in USD&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// Session ID for resuming&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Fluent Options Builder
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentSDK\Options\ClaudeAgentOptions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'Read'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Edit'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Bash'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Grep'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Glob'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;permission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'acceptEdits'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;maxTurns&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'claude-sonnet-4-5-20250929'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;cwd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;base_path&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Find and fix the bug in auth.php'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-Time Streaming
&lt;/h2&gt;

&lt;p&gt;Perfect for broadcasting progress to your frontend via WebSockets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;streamCollect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'Create a REST API for products'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;onMessage&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nc"&gt;AssistantMessage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;broadcast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AgentProgress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Subagents
&lt;/h2&gt;

&lt;p&gt;Define specialized agents that Claude delegates tasks to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'Read'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Grep'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Task'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'security-reviewer'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AgentDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'Security code review specialist'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'Find vulnerabilities in PHP/Laravel code.'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Read'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Grep'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Glob'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'test-writer'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AgentDefinition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'PHPUnit test writer'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'Write comprehensive PHPUnit tests.'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Read'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Write'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Bash'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Structured Output
&lt;/h2&gt;

&lt;p&gt;Get validated JSON matching a schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;outputFormat&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'object'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'properties'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'issues'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'array'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s1"&gt;'items'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                    &lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'object'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="s1"&gt;'properties'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                        &lt;span class="s1"&gt;'file'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'string'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                        &lt;span class="s1"&gt;'severity'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'string'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                        &lt;span class="s1"&gt;'message'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'string'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                    &lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Find TODOs in src/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;structured&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Session Management
&lt;/h2&gt;

&lt;p&gt;Continue conversations across requests:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$result1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Read the auth module'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$sessionId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$result1&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Later — resume with full context&lt;/span&gt;
&lt;span class="nv"&gt;$result2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'Now add email verification'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;resume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$sessionId&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  MCP Server Integration
&lt;/h2&gt;

&lt;p&gt;Connect external tools via Model Context Protocol:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentSDK\Tools\McpServerConfig&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;mcpServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'database'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;McpServerConfig&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;stdio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'npx'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'@modelcontextprotocol/server-database'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'DB_URL'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'database.url'&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
    &lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Full Feature List
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fluent options builder with IDE autocompletion&lt;/li&gt;
&lt;li&gt;Streaming with real-time message processing&lt;/li&gt;
&lt;li&gt;Subagent delegation&lt;/li&gt;
&lt;li&gt;MCP server integration (stdio + SSE)&lt;/li&gt;
&lt;li&gt;Structured output with JSON schema&lt;/li&gt;
&lt;li&gt;Session resume and fork&lt;/li&gt;
&lt;li&gt;Full message/content block parsing&lt;/li&gt;
&lt;li&gt;Laravel service provider, facade, config publishing&lt;/li&gt;
&lt;li&gt;PHP 8.1-8.4, Laravel 10/11/12&lt;/li&gt;
&lt;li&gt;Full test suite&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/mohamed-ashraf-elsaed/claude-agent-sdk-laravel" rel="noopener noreferrer"&gt;https://github.com/mohamed-ashraf-elsaed/claude-agent-sdk-laravel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packagist:&lt;/strong&gt; &lt;a href="https://packagist.org/packages/mohamed-ashraf-elsaed/claude-agent-sdk-laravel" rel="noopener noreferrer"&gt;https://packagist.org/packages/mohamed-ashraf-elsaed/claude-agent-sdk-laravel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://github.com/mohamed-ashraf-elsaed/claude-agent-sdk-laravel/wiki" rel="noopener noreferrer"&gt;https://github.com/mohamed-ashraf-elsaed/claude-agent-sdk-laravel/wiki&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you have feedback or feature requests, open an issue on GitHub. Contributions welcome!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I am Mohamed Ashraf Elsaed, a technical lead in Cairo. The SDK's page: &lt;a href="https://mohamedashrafelsaed.com/projects/claude-agent-sdk-laravel/" rel="noopener noreferrer"&gt;https://mohamedashrafelsaed.com/projects/claude-agent-sdk-laravel/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
