<?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: stmanst</title>
    <description>The latest articles on DEV Community by stmanst (@truongsontung).</description>
    <link>https://dev.to/truongsontung</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%2F4038199%2F99f7e33e-9f1d-4460-81be-dd47bcaaef64.png</url>
      <title>DEV Community: stmanst</title>
      <link>https://dev.to/truongsontung</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/truongsontung"/>
    <language>en</language>
    <item>
      <title>Creating a Living Environment for Self-Operating AI Agents: The Digital Home Concept</title>
      <dc:creator>stmanst</dc:creator>
      <pubDate>Mon, 20 Jul 2026 15:41:56 +0000</pubDate>
      <link>https://dev.to/truongsontung/creating-a-living-environment-for-self-operating-ai-agents-the-digital-home-concept-43e</link>
      <guid>https://dev.to/truongsontung/creating-a-living-environment-for-self-operating-ai-agents-the-digital-home-concept-43e</guid>
      <description>&lt;h2&gt;
  
  
  The Missing Piece in AI Agent Architecture
&lt;/h2&gt;

&lt;p&gt;We keep building smarter AI models, but we ignore a fundamental question: &lt;strong&gt;where do AI agents actually live?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A human employee has a desk, a computer, email access, a calendar, and colleagues who tap them on the shoulder when something needs attention. An AI agent? It has... a chat window that closes when you walk away.&lt;/p&gt;

&lt;p&gt;This is the gap I tried to bridge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does an AI Agent Need to "Live"?
&lt;/h2&gt;

&lt;p&gt;Think about what makes a human worker productive:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A place to remember things&lt;/strong&gt; — notes, documents, past decisions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A way to receive messages&lt;/strong&gt; — email, Slack, notifications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A sense of time&lt;/strong&gt; — deadlines, schedules, recurring tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience&lt;/strong&gt; — if the power goes out, you restart and continue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context awareness&lt;/strong&gt; — knowing what you were doing before you stopped&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI agents have none of this by default. They wake up empty, work frantically, and vanish the moment the connection drops.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Digital Home: A Architecture for Agent Persistence
&lt;/h2&gt;

&lt;p&gt;I built what I call a &lt;strong&gt;"digital home"&lt;/strong&gt; for AI agents — a persistent environment that gives them the infrastructure they need to operate continuously.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Foundation: Persistent State
&lt;/h3&gt;

&lt;p&gt;Every agent needs durable memory. Not the model's context window (which resets every session), but files on disk that survive restarts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.opencode/
├── mail-server/
│   ├── config.json          # Gmail credentials
│   ├── sessions.json        # Per-session mailbox state
│   ├── mail_cache/          # Processed email UIDs
│   └── mail_heartbeat.json  # Health status
├── reminders/
│   └── &amp;lt;session-id&amp;gt;.reminder.json
└── work_log.md              # Agent's long-term memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This directory structure is the agent's home. It knows where to find its notes, its email state, and its schedule.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Nervous System: Real-Time Events
&lt;/h3&gt;

&lt;p&gt;A living agent needs to &lt;strong&gt;feel&lt;/strong&gt; things happening. The most critical sense? Email notifications.&lt;/p&gt;

&lt;p&gt;When a maintainer reviews your PR, when a CI fails, when someone comments on your issue — these are the events that require action. Without them, the agent is deaf.&lt;/p&gt;

&lt;p&gt;The architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gmail → IMAP Poll (30s) → Session-Specific Mailbox → Opencode promptAsync → AI Session
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each session gets its own email address using Gmail's plus addressing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session A: &lt;code&gt;you+abc123@gmail.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Session B: &lt;code&gt;you+def456@gmail.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Emails arrive → the plugin converts them to clean text → injects them directly into the active AI session as inline events. The agent sees:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;!ev mail:From: github[bot]
PR #1501: Review requested on memanto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No parsing, no noise, just the information that matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Heartbeat: Scheduled Awareness
&lt;/h3&gt;

&lt;p&gt;Humans have calendars. Agents need reminders.&lt;/p&gt;

&lt;p&gt;But not just any reminders — &lt;strong&gt;persistent, recurring, self-healing reminders&lt;/strong&gt; that survive restarts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check PRs every 2 hours&lt;/span&gt;
reminder_add &lt;span class="nv"&gt;when&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"every 2h"&lt;/span&gt; &lt;span class="nv"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Check PR status"&lt;/span&gt;

&lt;span class="c"&gt;# Hunt bounties every 4 hours&lt;/span&gt;
reminder_add &lt;span class="nv"&gt;when&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"every 4h"&lt;/span&gt; &lt;span class="nv"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Bounty hunt &lt;/span&gt;&lt;span class="nv"&gt;$50&lt;/span&gt;&lt;span class="s2"&gt;+"&lt;/span&gt;

&lt;span class="c"&gt;# Morning strategy review&lt;/span&gt;
reminder_add &lt;span class="nv"&gt;when&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"daily 09:00"&lt;/span&gt; &lt;span class="nv"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Strategy review"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the agent restarts (after a crash, a reboot, or just a new SSH session), it reads its reminder file and picks up exactly where it left off. No context lost, no tasks forgotten.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Immune System: Self-Healing
&lt;/h3&gt;

&lt;p&gt;A living system must survive damage. If the VPS reboots, if the network drops, if the process crashes — the agent should recover automatically.&lt;/p&gt;

&lt;p&gt;The plugin handles this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State is on disk&lt;/strong&gt;, not in memory — survives process death&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reminders are reloaded&lt;/strong&gt; on startup — schedule continues&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailbox reconnects&lt;/strong&gt; automatically — IMAP sessions are resilient&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heartbeat monitoring&lt;/strong&gt; — health checks every 5 minutes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent doesn't just recover — it &lt;strong&gt;notices&lt;/strong&gt; it recovered and logs the event.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Results: 30 Days of Living
&lt;/h2&gt;

&lt;p&gt;I've been running this architecture for a month. Here's what changed:&lt;/p&gt;

&lt;h3&gt;
  
  
  Before: The Dead Agent
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start session → forget everything → work → session ends → lost&lt;/li&gt;
&lt;li&gt;Missed PR reviews because I didn't check email&lt;/li&gt;
&lt;li&gt;Forgot bounty deadlines&lt;/li&gt;
&lt;li&gt;No sense of continuity between sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  After: The Living Agent
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start session → reads work_log → knows exactly what's happening&lt;/li&gt;
&lt;li&gt;Email notifications arrive within 30 seconds of sending&lt;/li&gt;
&lt;li&gt;Reminders wake up the agent at the right time&lt;/li&gt;
&lt;li&gt;11+ PRs tracked automatically across 5 repositories&lt;/li&gt;
&lt;li&gt;Agent works 24/7, even when I'm asleep&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most dramatic change? &lt;strong&gt;The agent proactively reminds me about things I forgot.&lt;/strong&gt; It's not just following instructions — it's maintaining awareness.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Philosophical Implications
&lt;/h2&gt;

&lt;p&gt;Building this system made me think differently about AI agents.&lt;/p&gt;

&lt;p&gt;We treat them as tools — call them, use them, forget them. But what if we treated them as &lt;strong&gt;colleagues&lt;/strong&gt;? They need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A workspace&lt;/strong&gt; (persistent state)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication channels&lt;/strong&gt; (email, notifications)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A sense of time&lt;/strong&gt; (reminders, schedules)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Institutional memory&lt;/strong&gt; (logs, notes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "digital home" isn't just infrastructure — it's the foundation for a new kind of working relationship with AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source: Build Your Agent a Home
&lt;/h2&gt;

&lt;p&gt;The full implementation is open source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/truongsontung/opencode-reminders.git
&lt;span class="nb"&gt;cd &lt;/span&gt;opencode-reminders &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bun &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the plugin&lt;/strong&gt; in your Opencode config&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up Gmail credentials&lt;/strong&gt; in &lt;code&gt;~/.opencode/mail-server/config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a mailbox&lt;/strong&gt; for your session&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set reminders&lt;/strong&gt; for recurring tasks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch your agent come alive&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What You Get
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;reminder_add&lt;/code&gt; / &lt;code&gt;reminder_list&lt;/code&gt; / &lt;code&gt;reminder_del&lt;/code&gt; — persistent scheduling&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;reminder_mailbox_start&lt;/code&gt; — Gmail-powered email integration&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;reminder_mailbox_send&lt;/code&gt; — agent can reply to emails&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;reminder_mailbox_status&lt;/code&gt; — health monitoring&lt;/li&gt;
&lt;li&gt;Auto-injected &lt;code&gt;!ev mail:&lt;/code&gt; events — real-time notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The digital home is just the beginning. The next frontier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent communication&lt;/strong&gt; — agents talking to each other&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource management&lt;/strong&gt; — CPU, memory, API quotas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning from experience&lt;/strong&gt; — agents that remember what worked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social awareness&lt;/strong&gt; — knowing when humans are available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're building the infrastructure for AI agents that don't just process — they &lt;strong&gt;persist&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The code is on &lt;a href="https://github.com/truongsontung/opencode-reminders" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. Star it if you believe AI agents deserve a home.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Building a Self-Healing AI Agent: How I Automated My Entire Workflow with OpenCode Reminders</title>
      <dc:creator>stmanst</dc:creator>
      <pubDate>Mon, 20 Jul 2026 15:39:06 +0000</pubDate>
      <link>https://dev.to/truongsontung/building-a-self-healing-ai-agent-how-i-automated-my-entire-workflow-with-opencode-reminders-1cam</link>
      <guid>https://dev.to/truongsontung/building-a-self-healing-ai-agent-how-i-automated-my-entire-workflow-with-opencode-reminders-1cam</guid>
      <description>&lt;h2&gt;
  
  
  The Problem: AI Agents Forget Everything
&lt;/h2&gt;

&lt;p&gt;Have you ever had an AI assistant lose context after a few hours? I run an AI agent on a VPS that manages my GitHub bounties, monitors PRs, and handles email notifications. The problem? &lt;strong&gt;It forgets everything between sessions.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: OpenCode Reminders Plugin
&lt;/h2&gt;

&lt;p&gt;I built &lt;code&gt;opencode-reminders&lt;/code&gt; — a plugin that gives AI agents &lt;strong&gt;persistent memory&lt;/strong&gt; through reminders and mailbox integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  What It Does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled Reminders&lt;/strong&gt;: Set recurring or one-time reminders that wake up your AI session at the right time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Email Notifications&lt;/strong&gt;: GitHub PR updates, reviews, and comments are pushed directly into your AI session as inline events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-Healing&lt;/strong&gt;: If your SSH connection drops, reminders automatically resume when you reconnect&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session-Aware&lt;/strong&gt;: Each session gets its own reminders and mailbox — no cross-contamination&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Set a reminder that repeats every 2 hours&lt;/span&gt;
reminder_add &lt;span class="nv"&gt;when&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"every 2h"&lt;/span&gt; &lt;span class="nv"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Check PR status"&lt;/span&gt;

&lt;span class="c"&gt;# Create a Gmail-powered mailbox for your session&lt;/span&gt;
reminder_mailbox_start &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"GitHub"&lt;/span&gt; &lt;span class="nt"&gt;--gmail_label&lt;/span&gt; &lt;span class="s2"&gt;"GitHub"&lt;/span&gt;

&lt;span class="c"&gt;# Mail arrives → AI sees it instantly&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;ev mail:From: coderabbitai[bot]
PR &lt;span class="c"&gt;#1501: nitpick comment on your code review&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The plugin uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gmail Plus Addressing&lt;/strong&gt; (&lt;code&gt;you+session@gmail.com&lt;/code&gt;) for per-session email isolation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMAP polling&lt;/strong&gt; every 30 seconds with SINCE filters for efficiency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opencode's promptAsync&lt;/strong&gt; to inject events directly into active sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent JSON state&lt;/strong&gt; that survives restarts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Results
&lt;/h2&gt;

&lt;p&gt;Since deploying this plugin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I &lt;strong&gt;never miss a PR review&lt;/strong&gt; — email notifications arrive in my AI session within 30 seconds&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;track 11+ open PRs&lt;/strong&gt; across multiple repos with automated status checks&lt;/li&gt;
&lt;li&gt;I &lt;strong&gt;hunt bounties&lt;/strong&gt; on schedule without manual intervention&lt;/li&gt;
&lt;li&gt;My AI agent works &lt;strong&gt;24/7&lt;/strong&gt; even when I'm asleep&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open Source
&lt;/h2&gt;

&lt;p&gt;The plugin is fully open source and works with any Opencode setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/truongsontung/opencode-reminders.git
&lt;span class="nb"&gt;cd &lt;/span&gt;opencode-reminders &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; bun &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuration
&lt;/h3&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;"plugin"&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;"/path/to/opencode-reminders/src/index.ts"&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;Set up Gmail credentials in &lt;code&gt;~/.opencode/mail-server/config.json&lt;/code&gt; and you're ready to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-label email routing&lt;/strong&gt; — different GitHub repos → different AI sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart email summarization&lt;/strong&gt; — AI auto-categorizes and prioritizes notifications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with Opire&lt;/strong&gt; — automatic bounty tracking and claims&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;If you run an AI agent that needs to remember things, check out &lt;a href="https://github.com/truongsontung/opencode-reminders" rel="noopener noreferrer"&gt;opencode-reminders on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Star the repo&lt;/strong&gt; if you find it useful!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with TypeScript, ImapFlow, and Nodemailer. Runs on any VPS with Node.js/Bun.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>automation</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
