<?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: Moclaw | AI Personal Computer</title>
    <description>The latest articles on DEV Community by Moclaw | AI Personal Computer (@chen_ju_96488593b0d002dc0).</description>
    <link>https://dev.to/chen_ju_96488593b0d002dc0</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%2F4009208%2Fac7c13f5-66dc-448f-b70b-293dbae1957e.png</url>
      <title>DEV Community: Moclaw | AI Personal Computer</title>
      <link>https://dev.to/chen_ju_96488593b0d002dc0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chen_ju_96488593b0d002dc0"/>
    <language>en</language>
    <item>
      <title>A task feed should distinguish a reference from a result</title>
      <dc:creator>Moclaw | AI Personal Computer</dc:creator>
      <pubDate>Tue, 13 Oct 2026 03:45:06 +0000</pubDate>
      <link>https://dev.to/chen_ju_96488593b0d002dc0/a-task-feed-should-distinguish-a-reference-from-a-result-4740</link>
      <guid>https://dev.to/chen_ju_96488593b0d002dc0/a-task-feed-should-distinguish-a-reference-from-a-result-4740</guid>
      <description>&lt;p&gt;When a task library exposes an API, downstream readers can lose qualifications that were obvious on the original page. A title such as “Prepare a school supply cart” can become a capability claim if the consuming application drops the source and evidence label.&lt;/p&gt;

&lt;p&gt;I maintain &lt;a href="https://musetaskhub.com/" rel="noopener noreferrer"&gt;Muse Task Hub&lt;/a&gt;, an independent, unofficial guide. Its public feed is at the &lt;code&gt;/api/tasks&lt;/code&gt; path on the guide’s domain. The records include taskId, title, summary, category, evidenceType, url, sources, version, contentVersion, publishedAt, modifiedAt and withdrawn. The response envelope includes the snapshot identifier and pagination cursor.&lt;/p&gt;

&lt;p&gt;Those fields do different jobs. The task ID identifies a record. The page URL points to the fuller explanation. The source URLs identify the material behind it. The evidence type distinguishes a community report from a product-maker example. Version and modification metadata help a consumer recognize updates. The withdrawn flag should not be discarded merely because an old title remains recognizable.&lt;/p&gt;

&lt;p&gt;A reader interface should keep the title, source class and qualification together. It should link to the guide page for context and to the original source for verification. It should never relabel an official example as an independently verified outcome.&lt;/p&gt;

&lt;p&gt;The October 10 snapshot contains 279 unique records collected across 14 paginated responses. Four records are labeled official and 275 are user reports. This distribution says something about the collection's provenance. It says nothing about how often an assistant succeeds or which task category is most popular among all users.&lt;/p&gt;

&lt;p&gt;For a local consumer, a useful starting point is to filter withdrawn records, show the source class, and make the task-page link available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="n"&gt;snapshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tasks.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read_text&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;withdrawn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Evidence:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evidenceType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Context:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sources:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dated export is available at &lt;a href="https://github.com/1021ju/muse-task-hub" rel="noopener noreferrer"&gt;https://github.com/1021ju/muse-task-hub&lt;/a&gt;. It is reference metadata, not a benchmark dataset. The guide has not independently reproduced the examples and is not affiliated with Meta. Third-party source rights remain with their owners; the repository does not assert a blanket license over them.&lt;/p&gt;

</description>
      <category>api</category>
      <category>architecture</category>
      <category>backend</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Exporting a paginated task feed without losing provenance</title>
      <dc:creator>Moclaw | AI Personal Computer</dc:creator>
      <pubDate>Tue, 13 Oct 2026 03:44:06 +0000</pubDate>
      <link>https://dev.to/chen_ju_96488593b0d002dc0/exporting-a-paginated-task-feed-without-losing-provenance-5dke</link>
      <guid>https://dev.to/chen_ju_96488593b0d002dc0/exporting-a-paginated-task-feed-without-losing-provenance-5dke</guid>
      <description>&lt;p&gt;A JSON endpoint is easy to download. A complete, attributable snapshot takes a little more care.&lt;/p&gt;

&lt;p&gt;I maintain &lt;a href="https://instincttasks.com/" rel="noopener noreferrer"&gt;Instinct Tasks&lt;/a&gt;, an independent, unofficial guide. Its public &lt;code&gt;/api/tasks&lt;/code&gt; endpoint returns an envelope containing protocolVersion, snapshot, items, nextCursor and checkpoint. In the October 10 export, the first response contained 20 items. Treating that response as the whole library would have missed most of the 128 records.&lt;/p&gt;

&lt;p&gt;The export therefore follows nextCursor until it is empty. Every response must have the same snapshot identifier. If that identifier changes, the export should stop and be investigated or restarted rather than silently mixing versions.&lt;/p&gt;

&lt;p&gt;There are three useful integrity checks after pagination:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Task IDs are unique across the collected responses.&lt;/li&gt;
&lt;li&gt;Each task URL belongs to the expected guide domain.&lt;/li&gt;
&lt;li&gt;Each record retains its source URLs and evidence type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first check catches duplicate pages. The second catches a wrong-domain export. The third preserves the distinction between a community report and an example published by the product maker. None of these checks proves that the underlying task works; they verify the structure and provenance of the export.&lt;/p&gt;

&lt;p&gt;Here is a small local inspection of the completed snapshot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Counter&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="n"&gt;snapshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tasks.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read_text&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;tasks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;taskId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evidenceType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this export, the evidence labels were 124 user reports and four official examples. They are counts of published records, not trial results or adoption statistics.&lt;/p&gt;

&lt;p&gt;The snapshot also records its retrieval time, original endpoint and snapshot ID. A checksum in the README identifies the exact file. That makes it possible to discuss a fixed version even as the website changes.&lt;/p&gt;

&lt;p&gt;The resulting reference repository is &lt;a href="https://github.com/1021ju/instinct-tasks" rel="noopener noreferrer"&gt;https://github.com/1021ju/instinct-tasks&lt;/a&gt;. It contains published metadata, not private tasks or execution logs. Source links are retained, and no blanket open-source license is asserted for third-party materials. The guide is not affiliated with Instinct and has not independently reproduced the source examples.&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>What Should an AI Personal Computer Actually Do?</title>
      <dc:creator>Moclaw | AI Personal Computer</dc:creator>
      <pubDate>Tue, 30 Jun 2026 08:11:48 +0000</pubDate>
      <link>https://dev.to/chen_ju_96488593b0d002dc0/what-should-an-ai-personal-computer-actually-do-38mp</link>
      <guid>https://dev.to/chen_ju_96488593b0d002dc0/what-should-an-ai-personal-computer-actually-do-38mp</guid>
      <description>&lt;p&gt;AI agents are often described as tools that can browse the web, use apps, and complete tasks on behalf of users. But in practice, many agent products still feel like chatbots with extra steps.&lt;/p&gt;

&lt;p&gt;A useful AI personal computer should do more than answer questions. It should help users move across websites, understand context, complete repetitive workflows, and turn open-ended goals into concrete actions.&lt;/p&gt;

&lt;p&gt;For example, instead of only asking an AI model to summarize information, a user may want an agent to research a topic, compare sources, organize findings, and prepare the next step. Instead of manually switching between tabs and tools, the user should be able to describe the task and let the agent handle the workflow.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://moclaw.ai/" rel="noopener noreferrer"&gt;Moclaw&lt;/a&gt;, we are exploring this direction: a general AI agent and AI personal computer for browsing, research, automation, and daily web tasks.&lt;/p&gt;

&lt;p&gt;The bigger question is not whether AI agents can click buttons or fill forms. The real question is whether they can become a reliable interface for everyday computer work.&lt;/p&gt;

&lt;p&gt;That is the part we are most interested in building.&lt;/p&gt;

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