<?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: Kacper Włodarczyk</title>
    <description>The latest articles on DEV Community by Kacper Włodarczyk (@deenuu1).</description>
    <link>https://dev.to/deenuu1</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%2F997289%2Fb2dc82ab-73d0-4fd4-810a-19fc007c1164.jpg</url>
      <title>DEV Community: Kacper Włodarczyk</title>
      <link>https://dev.to/deenuu1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deenuu1"/>
    <language>en</language>
    <item>
      <title>Build a small LLM wiki in an AgenticOS project</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Thu, 05 Nov 2026 09:30:00 +0000</pubDate>
      <link>https://dev.to/deenuu1/build-a-small-llm-wiki-in-an-agenticos-project-3cmd</link>
      <guid>https://dev.to/deenuu1/build-a-small-llm-wiki-in-an-agenticos-project-3cmd</guid>
      <description>&lt;h1&gt;
  
  
  Build a small LLM wiki in an AgenticOS project
&lt;/h1&gt;

&lt;p&gt;A team accumulates project briefs, meeting notes and product decisions. Answering the same question repeatedly is useful, but it leaves another opportunity: keep a readable set of notes that connects the sources and improves as new material arrives.&lt;/p&gt;

&lt;p&gt;An LLM wiki is a practical scenario for AgenticOS Projects. The project holds shared files and instructions across chats, and an agent can work on those files. The useful output is a knowledge artifact the next colleague can open and maintain. Drafted with AI assistance.&lt;/p&gt;

&lt;p&gt;The walkthrough uses fictional company documents. The screenshots come from a real wiki I built from Hacker News stories on a test instance. I build AgenticOS at Vstorm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose a topic a teammate would ask about
&lt;/h2&gt;

&lt;p&gt;Start with a synthetic product launch. Prepare a launch brief, a meeting note and a later decision that changes part of the plan. Ask a concrete question: "Which launch decision changed, and what source explains why?"&lt;/p&gt;

&lt;p&gt;That question gives the wiki a job. Its value is the connection between the source, the decision and the current summary. A directory of attractive summaries is insufficient if the colleague cannot tell which claim is current.&lt;/p&gt;

&lt;p&gt;Andrej Karpathy's &lt;a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" rel="noopener noreferrer"&gt;LLM Wiki idea file&lt;/a&gt; describes persistent linked Markdown knowledge maintained from preserved sources and a set of working conventions. It is an abstract pattern, not a specific application or an endorsement of AgenticOS. The implementation below uses AgenticOS project files for that purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agree the project with Architect
&lt;/h2&gt;

&lt;p&gt;Ask Architect to plan an LLM wiki for the chosen topic. Describe the material, who will use it and the output you want to maintain. Review the proposed project, its instructions and its audience before approving creation.&lt;/p&gt;

&lt;p&gt;Creating the project creates its shared workspace and instructions. It does not automatically write the planned files or start a scheduled maintenance process. Follow the project link and create a new chat there. An existing chat cannot simply be moved into the newly created project.&lt;/p&gt;

&lt;p&gt;The current &lt;a href="https://vstorm-co.github.io/agenticos/projects/" rel="noopener noreferrer"&gt;Projects documentation&lt;/a&gt; describes this planning path explicitly, including an LLM wiki workflow. That is a useful foundation for a reproducible walkthrough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the files clear responsibilities
&lt;/h2&gt;

&lt;p&gt;Keep original material in &lt;code&gt;sources/&lt;/code&gt;, with provenance such as the source name, author, source date and the date it was retrieved. New material can wait in &lt;code&gt;inbox/&lt;/code&gt; until it has been reviewed and processed.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;notes/&lt;/code&gt; for the maintained topic pages. Keep an &lt;code&gt;index.md&lt;/code&gt; that links to the relevant notes and sources, and a &lt;code&gt;CHANGELOG.md&lt;/code&gt; for updates and checks. These names are a proposed layout for this example, not a mandatory product schema.&lt;/p&gt;

&lt;p&gt;Project instructions should explain those responsibilities. An agent starting a new chat needs to know where to look first and how to distinguish an original source from a generated interpretation. The original files should remain available for review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this layout looks like in practice
&lt;/h2&gt;

&lt;p&gt;I built one from a real feed: Hacker News stories from 21 October to 4 November. The project has &lt;code&gt;inbox/&lt;/code&gt;, &lt;code&gt;notes/&lt;/code&gt; and &lt;code&gt;sources/hn/&lt;/code&gt; folders. Every topic note is linked from &lt;code&gt;index.md&lt;/code&gt;, and the index lists the source files behind each line, so a statement can be traced back to the story it came from. &lt;code&gt;CHANGELOG.md&lt;/code&gt; and &lt;code&gt;state.md&lt;/code&gt; record what changed and where the last update stopped.&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%2Fwng3cqvw2y2gbqygj0rg.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%2Fwng3cqvw2y2gbqygj0rg.png" alt=" " width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The graph view shows the structure at a glance: 33 notes and 80 links, with the index at the centre and the topic notes around 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%2Fzzgazfzuk0yi2zttdzfc.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%2Fzzgazfzuk0yi2zttdzfc.png" alt=" " width="799" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is one wiki on one test instance, not a benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Process the first source into a useful note
&lt;/h2&gt;

&lt;p&gt;Upload the synthetic launch brief into the project's shared files. Ask the agent to read it, create a topic note and link the note to its source. The note should distinguish stated facts from inferences and unresolved questions.&lt;/p&gt;

&lt;p&gt;Inspect the result in the project's Files tab. Open the generated note and its source. Check a specific statement against the original brief. A source link is useful only when it leads to material that supports the nearby claim.&lt;/p&gt;

&lt;p&gt;Then inspect &lt;code&gt;index.md&lt;/code&gt;. It should help another conversation find the topic without knowing the path of every file. Do not assume that a file tree alone gives the agent the conventions the team intended.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a source that changes the answer
&lt;/h2&gt;

&lt;p&gt;Now add the later synthetic decision. Ask the agent to identify which existing note it affects, propose the update and preserve the source of the change. Review the revised note and the change log.&lt;/p&gt;

&lt;p&gt;The result should let a colleague understand both the current decision and why it changed. It should not rewrite the original launch brief as though the earlier plan never existed. If the sources conflict without settling the issue, keep the conflict visible.&lt;/p&gt;

&lt;p&gt;Compare the original source, the new information and the linked note that changes. The saved update should explain how the current answer differs from the earlier plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask from a fresh project conversation
&lt;/h2&gt;

&lt;p&gt;Start a new chat inside the same project. Ask which launch decision changed and where that conclusion comes from. The shared files and project instructions persist across chats. Other chat transcripts are not automatically supplied as context.&lt;/p&gt;

&lt;p&gt;Have the agent read the index and the relevant notes, then inspect the cited source in its answer. This tests whether the workspace carries the knowledge the example is meant to preserve. It avoids relying on the first conversation's temporary context.&lt;/p&gt;

&lt;p&gt;In the HN Wiki project I started a new chat and asked "What's new in AI world?". The agent worked for 17 seconds in 3 steps and answered by topic, with a link on each item. It also said it had read only the headlines, scores and comment counts, not the articles themselves. An answer that states how deep it went is easier to trust than one that does not.&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%2F882xixadur0kkgj7qr1d.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%2F882xixadur0kkgj7qr1d.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A knowledge collection can add indexed retrieval. It does not replace the maintained project files or automatically turn every chat attachment into a wiki. Keep those roles separate when explaining how the example works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make maintenance an explicit task
&lt;/h2&gt;

&lt;p&gt;Ask for a check of the current notes: source support, contradictory statements, stale dates and broken links. Have the result record what was checked and what remains unresolved. A successful file write is not proof that every statement was verified.&lt;/p&gt;

&lt;p&gt;A scheduled update needs a separate routine and the appropriate approval. Do not imply that merely creating the project starts an autonomous maintenance system. First make the manual task useful, then decide which repeated part should run in the background.&lt;/p&gt;

&lt;p&gt;If a maintenance step needs code execution, the project must have a suitable service sandbox and permitted tools. Stored project files can support reading and writing without supplying a shell. The example's requirements should say which behavior it uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share the result as team knowledge
&lt;/h2&gt;

&lt;p&gt;Invite the relevant colleagues using the project's access controls. Ask another person to locate the current decision, open its source and continue the work. Keep simultaneous editing expectations realistic: shared files do not imply automatic merging of two agents' changes or a collaborative document editor.&lt;/p&gt;

&lt;p&gt;The result to check is specific: preserved sources, a linked current note, an index, a recorded update and an answer from a fresh project chat.&lt;/p&gt;

&lt;p&gt;The team can then use a maintained explanation of its work, with the evidence still attached. Another colleague can follow the changed launch decision back to its source.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>AgenticOS workflows and tables: build a first automation</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Tue, 03 Nov 2026 09:30:00 +0000</pubDate>
      <link>https://dev.to/deenuu1/agenticos-workflows-and-tables-build-a-first-automation-5fjh</link>
      <guid>https://dev.to/deenuu1/agenticos-workflows-and-tables-build-a-first-automation-5fjh</guid>
      <description>&lt;h1&gt;
  
  
  AgenticOS workflows and tables: build a first automation
&lt;/h1&gt;

&lt;p&gt;AgenticOS has a visual workflow editor beside its agents. You can draw a known sequence of steps, call an agent where the task needs judgment and keep records in a Virtual Table. The pieces live in the same workspace, so a workflow can become a practical part of the team's work.&lt;/p&gt;

&lt;p&gt;I build AgenticOS at Vstorm. This walkthrough shows how to configure the template, inspect its result and add an agent when a task needs interpretation. Drafted with AI assistance.&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%2F6knt232v4c7qqzbxp6qg.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%2F6knt232v4c7qqzbxp6qg.png" alt=" " width="799" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with an example you can inspect
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Public API → table&lt;/strong&gt; template is a useful first task. It fetches a sample post from JSONPlaceholder and saves the title and body to a table. The result is concrete: a record you can open, with the workflow run behind it.&lt;/p&gt;

&lt;p&gt;This deliberately starts with a deterministic example. You can see the workflow and the table without introducing a model's interpretation. An agent step can be added when a later task needs one.&lt;/p&gt;

&lt;p&gt;You need an AgenticOS deployment and an account allowed to create workflows and create and edit tables. The template does not require a model-provider account, an API key for the sample source or a pre-existing table selection. It does still depend on the deployment being able to reach that external sample API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the workflow from its template
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;Workflows&lt;/strong&gt; and choose &lt;strong&gt;Workflow templates&lt;/strong&gt;. Select &lt;strong&gt;Public API → table&lt;/strong&gt; and complete the creation form. The server prepares the table and a configured draft together. The template starts private unless an explicit audience is chosen. That audience applies to the workflow and its table.&lt;/p&gt;

&lt;p&gt;Check the name and who should be able to use it. Sharing is part of the example, not a detail to postpone until somebody receives a broken link. An ordinary colleague also needs the relevant permissions to see and use the resources.&lt;/p&gt;

&lt;p&gt;The list distinguishes drafts, published workflows and archived ones. If a workflow seems to be missing, inspect the active filter before assuming it was deleted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the canvas before changing it
&lt;/h2&gt;

&lt;p&gt;Open the draft. Follow its connections from the starting point to the table write. Open each relevant step and inspect its configuration, input bindings and expected output fields. A binding explains where a value comes from. It should be possible to identify which response field becomes the record's title and which becomes its body.&lt;/p&gt;

&lt;p&gt;The editor keeps &lt;strong&gt;Runs&lt;/strong&gt;, &lt;strong&gt;Test draft&lt;/strong&gt; and &lt;strong&gt;Publish&lt;/strong&gt; visible. Use the unfinished-setup feedback when a required configuration is missing. The point of this first pass is to understand the example's data path before extending it.&lt;/p&gt;

&lt;p&gt;A canvas can make a sequence visible, but the step configuration carries its actual behavior. Names and notes should help the next person connect the graph to the task it performs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the draft and inspect the expected result
&lt;/h2&gt;

&lt;p&gt;Use &lt;strong&gt;Test draft&lt;/strong&gt; to try the current configuration. The expected result of the template is a sample record containing the fetched title and body. Open the run and the prepared table to check what happened in your deployment.&lt;/p&gt;

&lt;p&gt;Look for the output rather than accepting a green-looking editor as evidence of completed work. If the fetch failed, inspect that step's error. If the fetch succeeded but no record appears, follow the values into the write step. Keep the failure visible until the result is understood.&lt;/p&gt;

&lt;p&gt;Later runs of this template reuse the table and upsert the same example record. Repeating it is therefore a useful way to inspect its defined behavior, rather than assuming every execution should create a new row.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the table as a handover
&lt;/h2&gt;

&lt;p&gt;Virtual Tables provide typed records with a schema, revisions and history. The console, agents, API clients and workflows can interact with those records through the platform's supported paths.&lt;/p&gt;

&lt;p&gt;For the sample task, open the saved record and inspect its title and body. When turning the example into a team process, decide which fields the next person needs. A source reference and review status may matter more than adding another generated summary.&lt;/p&gt;

&lt;p&gt;The current table implementation also records write provenance separately from the authorizing member. New writes can identify whether they came from a person, agent, workflow or API key. That gives the team a useful question to ask when inspecting a record: which process produced this value?&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%2Fwh21gkjglinp93sewaax.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%2Fwh21gkjglinp93sewaax.png" alt=" " width="800" height="407"&gt;&lt;/a&gt;&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%2Fcneutti8g2gs34rdj4mr.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%2Fcneutti8g2gs34rdj4mr.png" alt=" " width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Publish deliberately
&lt;/h2&gt;

&lt;p&gt;A workflow has a draft and published versions. Publishing freezes a version for execution. An edit to the draft is a proposed change to what will run, not proof that every existing execution has adopted that edit.&lt;/p&gt;

&lt;p&gt;Review the example's inputs, audience and relevant settings before publishing. Use version history when investigating a later change. The record should let someone connect the behavior they observed to the version that produced it.&lt;/p&gt;

&lt;p&gt;If the workflow is started by an automatic trigger, its active state matters separately. The editor exposes a way to pause that trigger. Pausing future starts is different from changing what an already-running task has done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add an agent for a task that needs interpretation
&lt;/h2&gt;

&lt;p&gt;Once the sample data path is clear, consider a different example: an incoming request needs a suggested category and a source-linked handover. An agent can handle that interpretation inside a workflow that owns the surrounding sequence.&lt;/p&gt;

&lt;p&gt;Give the agent step a specific responsibility. State its input and expected output, then bind those values to later steps. Use a draft test to check the example before treating the proposed automation as working.&lt;/p&gt;

&lt;p&gt;A human decision can also be an explicit workflow step. When a process requires review, define what the reviewer sees and what happens after approval or rejection. A finished graph does not establish that the reviewer can make a useful decision from the information provided.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose the starting event for the actual job
&lt;/h2&gt;

&lt;p&gt;AgenticOS workflows can start from several supported surfaces and triggers. The current documentation covers manual starts, chat, API calls, webhooks, schedules and table events, alongside additional integrations. Use the current trigger documentation for the one your task needs rather than relying on an old fixed count.&lt;/p&gt;

&lt;p&gt;A good next example is a table record that begins a review process, or a webhook that starts triage. Keep the event, workflow run and resulting record connected so a colleague can follow the work.&lt;/p&gt;

&lt;p&gt;The right follow-up is the next recognizable task, not every available node in one demonstration. Follow the input through the canvas, open its run and inspect the saved record. That connects the configuration to the result the next person will use.&lt;/p&gt;

&lt;p&gt;Documentation: &lt;a href="https://vstorm-co.github.io/agenticos/workflows/" rel="noopener noreferrer"&gt;Workflows&lt;/a&gt; and &lt;a href="https://vstorm-co.github.io/agenticos/virtual-tables/" rel="noopener noreferrer"&gt;Virtual Tables&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Claude Code and Codex as agents on your team</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Wed, 28 Oct 2026 15:11:18 +0000</pubDate>
      <link>https://dev.to/deenuu1/claude-code-and-codex-as-agents-on-your-team-428l</link>
      <guid>https://dev.to/deenuu1/claude-code-and-codex-as-agents-on-your-team-428l</guid>
      <description>&lt;p&gt;A general AI agent with a shell can edit code. It is not very good at it. Coding agents like Claude Code and Codex are much better, because that is the only thing they are built to do: read a repository, plan, edit, run the checks, fix, repeat.&lt;/p&gt;

&lt;p&gt;So instead of teaching every agent to code, we let them hand the code to a coding agent. This article explains how that works in AgenticOS, the open-source system for company agents we build at Vstorm, what it needs, and what a real task looked like. Drafted with AI assistance, edited and verified by the author.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea in one paragraph
&lt;/h2&gt;

&lt;p&gt;In AgenticOS an agent is something your team builds in the browser: instructions, a model, knowledge and a set of tools it may use. The coding agent is one of those tools. When an agent decides a task is software work, it hands the whole task to Claude Code or Codex, which runs in the agent's own sandbox until the task is done. The person in the chat watches it work, step by step, and gets back the answer, every step it took and the files it changed.&lt;/p&gt;

&lt;p&gt;From the agent's side, the coding agent is a colleague it delegates to. From your side, it is Claude Code or Codex working on your files, with your rules, where your team can see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Claude Code and Codex are
&lt;/h2&gt;

&lt;p&gt;If you have not used them: &lt;strong&gt;Claude Code&lt;/strong&gt; is Anthropic's coding agent and &lt;strong&gt;Codex&lt;/strong&gt; is OpenAI's. Both run in a terminal, read and edit the files of a project, run commands and tests, and keep going until a task is done. Developers usually run them on their own laptop. AgenticOS runs them on a server, inside a sandbox, on behalf of an agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Switching it on
&lt;/h2&gt;

&lt;p&gt;The coding agent is a capability in an agent's Toolbox.&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%2Fi6ttj6df7hzk3zemkngi.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%2Fi6ttj6df7hzk3zemkngi.png" alt=" " width="799" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It needs three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A sandbox.&lt;/strong&gt; The coding agent needs a computer to work on, so the agent must have the sandbox capability with shell commands on. Publishing an agent without it is refused. The default runtime has Claude Code and Codex installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A harness and a credential.&lt;/strong&gt; Choose Claude Code or Codex. Claude Code takes an Anthropic API key, or the token &lt;code&gt;claude setup-token&lt;/code&gt; prints for a Claude Pro or Max subscription. Codex takes an OpenAI API key, or a ChatGPT sign-in. The credential lives in AgenticOS's encrypted vault and reaches the task through its environment, never on a command line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A decision about approval.&lt;/strong&gt; By default the coding agent runs without asking. Set Human approval to Always ask and a person confirms each task before it starts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can also pick the model (for example Claude Sonnet or Opus for Claude Code), a timeout for one task (15 minutes by default, up to 60) and, for Claude Code only, read-only access, where it can read the code and answer but not change anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it can work without stopping to ask
&lt;/h2&gt;

&lt;p&gt;When you run Claude Code or Codex on your laptop, they ask permission before running commands. On a server nobody sits at that terminal, so AgenticOS starts them with their own prompts off. That sounds alarming until you look at where it runs: the container is the boundary. The coding agent can change any file and run any command, but only inside the agent's sandbox. Whether a task happens at all is the person's call, through Always ask.&lt;/p&gt;

&lt;p&gt;Read-only mode is enforced by the harness, not by a list of allowed commands. A list of "safe" shell commands does not stay safe: &lt;code&gt;git log --output=&amp;lt;file&amp;gt;&lt;/code&gt; looks like reading and writes a file. So Claude Code in read-only mode runs in plan mode with no tool that writes. Codex has no equivalent that works inside our container, so it only offers edit mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watching it work
&lt;/h2&gt;

&lt;p&gt;The harness runs detached in the sandbox and writes its events to a file, which AgenticOS reads every second and a half. Each step reaches the chat as it happens, in a panel under the Claude Code or Codex mark: the file it reads, the edit, the command, what it says between them. If you stop it, or it runs past its timeout, its whole process group is stopped.&lt;/p&gt;

&lt;p&gt;Tasks in one conversation continue one session. The second task in a chat knows what the first one read. A chat never continues another chat's session, even in a sandbox several chats share.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real task
&lt;/h2&gt;

&lt;p&gt;Here is one run, from a demo organization I set up with a synthetic US team. The project is called Fall launch, and it holds a brief, a brand book, a channel plan and a launch plan another agent wrote earlier the same day.&lt;/p&gt;

&lt;p&gt;Jordan, in the project chat, asks the Coder agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build the launch page from launch-plan.md with &lt;a class="mentioned-user" href="https://dev.to/coding"&gt;@coding&lt;/a&gt; agent: one HTML file in the project, Ledgerly colors from brand-book.md, the headline from brief.md and a sign-up button.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The agent writes the brief
&lt;/h3&gt;

&lt;p&gt;The Coder agent does not forward that sentence. It reads the project's files first and writes Codex a proper brief: one self-contained HTML file, the three colors from the brand book with a contrast check, the voice rules, the sections, and one important constraint it found in the brief. Every time-saved claim needs a customer quote, and there is none in the workspace, so "Close the month in two days, not ten" must not appear on the page.&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%2Fugqkkza07myixbmn6zd3.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%2Fugqkkza07myixbmn6zd3.png" alt=" " width="800" height="1333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The constraint was in a file the person never mentioned. The agent found it and passed it on.&lt;/p&gt;

&lt;h3&gt;
  
  
  What came back
&lt;/h3&gt;

&lt;p&gt;Codex worked through eight actions and wrote &lt;code&gt;launch-page.html&lt;/code&gt; into the project.&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%2Fhlwk154xjofgzv60zfwe.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%2Fhlwk154xjofgzv60zfwe.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Coder agent then reported back to Jordan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Colors:&lt;/strong&gt; only the three brand colors, with the button text at a 4.65:1 contrast ratio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headline:&lt;/strong&gt; the product description from the brief, "Ledgerly Autopilot reconciles invoices, payments and bank lines on its own."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Left out:&lt;/strong&gt; budget, channels, internal goals and any made-up stats or testimonials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checks:&lt;/strong&gt; the HTML is well-formed, only the brand colors appear, none of the banned words.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And two decisions it would not make alone. The brief's own headline is a time-saved claim, so it left it off and marked in the HTML where it goes once someone supplies an approved quote. And the real sign-up URL was not in the workspace, so both buttons point to a placeholder until someone sends it.&lt;/p&gt;

&lt;p&gt;One thing did not work. The agent wanted to screenshot the page to check it visually, and the sandbox ran out of disk space. It said so plainly and called the page a draft until someone opened it in a browser. That is the behaviour you want, and also a reminder that a sandbox needs room.&lt;/p&gt;

&lt;h2&gt;
  
  
  On a subscription
&lt;/h2&gt;

&lt;p&gt;If your team already pays for Claude or ChatGPT, the coding agent can run on that plan instead of a metered API key. For Codex, a person signs in with ChatGPT once in AgenticOS. For a task, that sign-in is written to a Codex home of the task's own, outside the project's files, and removed afterwards. Because whatever Codex runs could read it, the sign-in is only handed over when the person running the agent may see it in the vault themselves. Running an agent is never a way into somebody else's subscription. And it is only handed over in a sandbox nobody else's tasks share. In a project's shared container, another person's task could read it, so there you use an API key. A Claude Pro or Max token, by contrast, is stored like a key and used by every run, whoever asked. Both vendors' plan terms may not allow a personal subscription on a shared deployment, so check them.&lt;/p&gt;

&lt;p&gt;Your other agents do not have to use the same provider. AgenticOS works with 28 model providers (counted at the release that ships the ChatGPT plan), including your own models through Ollama or an OpenAI-compatible server such as vLLM, so a team can keep everyday agents in-house and use a subscription only for the coding work.&lt;/p&gt;

&lt;h2&gt;
  
  
  In a project
&lt;/h2&gt;

&lt;p&gt;A project gives every chat the same container. So the files the team uploaded, the plan another agent wrote and the page Codex built all sit in one place, and the next chat picks up where this one stopped. That is what turned the demo from three separate answers into one piece of work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No sandbox, no coding agent.&lt;/strong&gt; A project that keeps its files without a container has no shell, and the coding agent is left out of runs there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex has no read-only mode&lt;/strong&gt; inside AgenticOS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A subscription belongs to one person.&lt;/strong&gt; For agents the whole company runs, an organization API key is the better fit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It runs your code.&lt;/strong&gt; Edit mode can run any command in the sandbox. Decide who may start a task, and use Always ask where it matters.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;AgenticOS is open source (Apache-2.0) and runs on your own servers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vstorm-co/agenticos" rel="noopener noreferrer"&gt;https://github.com/vstorm-co/agenticos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The coding agent reference: &lt;a href="https://vstorm-co.github.io/agenticos/reference/capabilities/#coding-agent" rel="noopener noreferrer"&gt;https://vstorm-co.github.io/agenticos/reference/capabilities/#coding-agent&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you hand your agents to Claude Code or Codex, I would like to hear what the first task was.&lt;/p&gt;




&lt;p&gt;I'm Kacper, Principal Engineer and Open Source Tech Lead at Vstorm. I build AI agents and open-source tools in the Pydantic AI ecosystem. Find me on &lt;a href="https://www.linkedin.com/in/kacper-wlodarczyk" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://github.com/DEENUU1" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>codex</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AgenticOS Projects: a shared AI chat for your team</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Tue, 20 Oct 2026 09:57:24 +0000</pubDate>
      <link>https://dev.to/deenuu1/agenticos-projects-a-shared-ai-chat-for-your-team-18fd</link>
      <guid>https://dev.to/deenuu1/agenticos-projects-a-shared-ai-chat-for-your-team-18fd</guid>
      <description>&lt;p&gt;A chat with an AI model is a one-person thing. You ask, it answers, and then you copy the answer into Slack so the rest of the team can see it. Somebody asks a follow-up in their own chat, with half the context, and the brief you uploaded an hour ago is not in theirs.&lt;/p&gt;

&lt;p&gt;Projects are how Vstorm AgenticOS handles work that belongs to a team rather than to one person: a launch, a monthly report, a client engagement. This article walks through what a project holds, what changes for the agents working in it, what it looks like when three people and three agents share one chat, and where the limits are. Drafted with AI assistance, edited and verified by the author.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AgenticOS is
&lt;/h2&gt;

&lt;p&gt;AgenticOS is an open-source (Apache-2.0) system for a company's AI agents that you run on your own servers. People build agents in a browser, give them documents and tools, and use them in chat, in Slack and through an API, with the model provider of their choice, including local models through Ollama. I build it at Vstorm.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a project holds
&lt;/h2&gt;

&lt;p&gt;A project is a home for ongoing work, and it holds two things every chat started in it shares.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files, in one container.&lt;/strong&gt; You upload a brief, a spreadsheet or a whole folder once, and every chat in the project, today's and next week's, works on the same copy. A file an agent writes in one chat is there in the next. The Files tab is a tree beside a reader that opens Markdown, PDFs, images, spreadsheets and code in place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instructions.&lt;/strong&gt; Every agent answering in the project reads them after its own instructions: the tone, the deadlines, where the brand guide is. The agent is still what it is. It is just working on this.&lt;/p&gt;

&lt;p&gt;A project also has a default agent, the one a new chat starts with. Any agent can still answer in a project chat, so the default only decides where a chat begins.&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%2F7xurvwwag1yv9naolb1f.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%2F7xurvwwag1yv9naolb1f.png" alt=" " width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the demo I use below, the project is called Fall launch. It holds &lt;code&gt;brief.md&lt;/code&gt; (the launch date, the audience, a $40,000 budget and the rule that every time-saved claim needs a customer quote), &lt;code&gt;channels.csv&lt;/code&gt;, a brand book and a checklist. Its instructions say to read those files before answering, that the budget is in US dollars, and that when a teammate replies to a plan, the agent should say whose change it applied.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes for the agents
&lt;/h2&gt;

&lt;p&gt;Whichever agent answers, a run in a project chat works in the project's container rather than in a workspace of its own.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An agent with no sandbox is given the project's, so a plain chat agent can read and write the project's files.&lt;/li&gt;
&lt;li&gt;An agent with its own sandbox is moved into the project's container. Its approval settings carry over, so an author who set Always ask on the shell keeps that gate.&lt;/li&gt;
&lt;li&gt;The project's name, description and instructions are added after the agent's own instructions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the deployment runs a sandbox service, the container is a real sandbox session, so the files can be run as well as read. That matters for the coding agent: an agent can hand a task to Claude Code or Codex, which then works in the same container, on the same files the team uploaded. I will write about that part next week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working in one chat together
&lt;/h2&gt;

&lt;p&gt;This is the part that makes it feel different. Several people can be in a project's chat at once.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A bar over the transcript shows who else has the chat open.&lt;/li&gt;
&lt;li&gt;While one person writes, the others see "Tom is typing" over their composer.&lt;/li&gt;
&lt;li&gt;A question one of them asks, and the agent's answer, appear for everybody in the chat as they are written. Nobody waits for a reload to see what the agent did.&lt;/li&gt;
&lt;li&gt;Reply works on any message, a person's or an agent's. It quotes the message above the composer, and the quote travels with the reply.&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%2Frwmywo7dpi2ctjfjagh5.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%2Frwmywo7dpi2ctjfjagh5.png" alt=" " width="800" height="755"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the demo, Maya asked the Chief of Staff agent to draft the launch plan from &lt;code&gt;brief.md&lt;/code&gt; and &lt;code&gt;channels.csv&lt;/code&gt;. It wrote the plan into the project as &lt;code&gt;launch-plan.md&lt;/code&gt;, laid out the first week day by day, and finished with questions it could not answer from the files: who has a customer quote, whether the referral credits apply to every sign-up, and which dates it had assumed.&lt;/p&gt;

&lt;p&gt;Tom had the chat open at the same time. He replied to the plan: referral credits only for referrals that convert, cap Google Search at $6k and move $2k to the webinar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who said what
&lt;/h2&gt;

&lt;p&gt;The agent is told the chat may have several people in it, and it reads each person's turn under their name. So when Tom replies, the agent knows the change is Tom's, and it knows what "yes, do that" refers to.&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%2F45dbxdprh8t2swui2out.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%2F45dbxdprh8t2swui2out.png" alt=" " width="800" height="755"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Chief of Staff answered Tom by name, applied his change and the referral rule to &lt;code&gt;launch-plan.md&lt;/code&gt; (now revision 2), asked the Finance Analyst agent to recheck the numbers, and kept the total at the $40,000 cap. Then it listed what was still open and for whom: Julia needs to say what the extra webinar budget buys, and nobody has supplied a customer quote yet.&lt;/p&gt;

&lt;p&gt;That last part is the instruction doing its job. A plan that names whose change it applied, and leaves the decisions it cannot make to the people who can, is a plan a team can keep working on.&lt;/p&gt;

&lt;p&gt;Each message carries its author's name and face, so a thread several people worked on says who asked what. Renaming, archiving or deleting a chat stays with whoever started it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sharing and permissions
&lt;/h2&gt;

&lt;p&gt;A project is private to whoever created it until they share it, with the same Share dialog an agent uses: people, departments or the whole organization, each at a level.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;read&lt;/strong&gt; lets someone see the project, its files and its instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;use&lt;/strong&gt; lets them chat in it, upload files and remove them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;edit&lt;/strong&gt; lets them change the instructions and the default agent, share the project and delete it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A project's chats belong to its members. Whoever can see the project can read every chat in it, and whoever can work in it can continue them. A chat is not shared on its own by link: you share the project. If somebody loses access, their chat stops reaching the project's files on its next turn.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the live part works
&lt;/h2&gt;

&lt;p&gt;The presence bar and the live answer are a view, not the record: the transcript in the database is. Someone who opens the chat halfway through an answer gets everything so far and then the live stream. How that works across several API instances, with Redis, is Friday's article.&lt;/p&gt;

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

&lt;p&gt;A few limits worth knowing before you plan a team around it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without a sandbox service there is no shell.&lt;/strong&gt; The project keeps its files as a stored workspace that reads and writes the same way. Two chats writing to it at once each keep what they wrote, and where both changed one file, the later write stands. The coding agent is left out of runs there, and the agent is told why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Questions an agent asks one person stay with that person.&lt;/strong&gt; If the agent asks Maya to approve a step, the question waits on Maya's session. Somebody else in the room cannot answer it for her.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is not a document editor.&lt;/strong&gt; The shared thing is the conversation and the project's files. Two people do not type into one message together.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deleting a project removes its container and every file in it.&lt;/strong&gt; Its chats survive as ordinary chats outside any project.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Running it yourself
&lt;/h2&gt;

&lt;p&gt;AgenticOS installs with Docker Compose on your own machine or server. It runs with a hosted model provider or with your own models through Ollama or an OpenAI-compatible server such as vLLM. Self-hosted does not mean every part is local: each provider, parser or tool you configure is a destination you choose.&lt;/p&gt;

&lt;p&gt;Projects arrive in the release after this article's date. The repository and the full docs for projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vstorm-co/agenticos" rel="noopener noreferrer"&gt;https://github.com/vstorm-co/agenticos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vstorm-co.github.io/agenticos/projects/" rel="noopener noreferrer"&gt;https://vstorm-co.github.io/agenticos/projects/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it with your team, I would like to hear which part of your work you put in a project first.&lt;/p&gt;




&lt;p&gt;I'm Kacper, Principal Engineer and Open Source Tech Lead at Vstorm. I build AI agents and open-source tools in the Pydantic AI ecosystem. Find me on &lt;a href="https://www.linkedin.com/in/kacper-wlodarczyk" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://github.com/DEENUU1" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>selfhosted</category>
      <category>git</category>
    </item>
    <item>
      <title>Read a run's cost in AgenticOS</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Mon, 12 Oct 2026 16:19:47 +0000</pubDate>
      <link>https://dev.to/deenuu1/read-a-runs-cost-in-agenticos-26b3</link>
      <guid>https://dev.to/deenuu1/read-a-runs-cost-in-agenticos-26b3</guid>
      <description>&lt;p&gt;Most teams learn what an agent costs from the provider's invoice at the end of the month, with no way to tie a number to the task that produced it. AgenticOS puts a run's model, token usage, reported cost and tool events together in Activity. That lets you connect a cost figure to the task that produced it. This guide reads an existing demo record, then explains how to use those fields when testing an agent and setting a budget in the platform we build at Vstorm.&lt;/p&gt;

&lt;p&gt;This article was drafted and revised with AI assistance. The amounts shown are from an existing demo capture. They are not provider invoices, current price recommendations or a benchmark of a representative workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open one run
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxwh8pevbp5773wtenome.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxwh8pevbp5773wtenome.webp" alt=" " width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The record shows Support Copilot answering "how do I rotate a provider key?" through Slack. It names OpenRouter and anthropic/claude-opus-4.5, displays 5,397 input tokens and 170 output tokens, and reports $0.0312. A completed search_documents call appears in the timeline.&lt;/p&gt;

&lt;p&gt;Read those fields together. The amount without the task says little about whether the run was useful. The token counts without the resolved model are not enough to interpret pricing. The successful status tells you the run completed, but the source passage and answer still need a quality check.&lt;/p&gt;

&lt;p&gt;For this example, the screen helps you understand where to look. It does not establish what another document question will cost or how much a model switch would save. Use your own fixed task and inputs for that comparison.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep a comparison tied to the task
&lt;/h2&gt;

&lt;p&gt;Suppose you want to shorten a support agent's prompt. Choose a small set of sample questions and preserve the expected source material. Run the current configuration and the proposed revision with those same cases.&lt;/p&gt;

&lt;p&gt;Keep the configured model, answer, retrieved sources, status and total recorded usage. If fallbacks are enabled, the documented run row can retain the primary profile even when another model answers. Use a no-fallback test profile or separate provider evidence for a controlled model comparison. Check whether the shorter prompt preserves the instructions the task depends on. If the answer drops an important exception, lower usage does not make it an equivalent result.&lt;/p&gt;

&lt;p&gt;Include retries and unsuccessful attempts when evaluating the complete task. Selecting only the cheapest successful run can hide the work needed to obtain that answer. If a model or provider setting changes as well as the prompt, record that change rather than attributing the difference to the prompt alone.&lt;/p&gt;

&lt;p&gt;This is a proposed comparison procedure. No result from that experiment is reported here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Include work performed before failure
&lt;/h2&gt;

&lt;p&gt;A run can fail after it has already made billable model requests. AgenticOS keeps failed runs in history with their recorded usage. That makes failures relevant when reviewing the cost of a workflow, even if the user never received a final answer.&lt;/p&gt;

&lt;p&gt;When inspecting a failed run, locate the stage that stopped. A tool error after model work is different from a request refused before execution. The record can help you connect usage with the progress made before the failure.&lt;/p&gt;

&lt;p&gt;Do not assume that every failure has the same cost or that failures are necessarily more expensive than successful runs. Use the recorded events and usage for the actual task. If you retry, keep the earlier attempt beside the successful one when assessing the resources needed to complete it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the Spend view's coverage
&lt;/h2&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%2Fom60kgdplh2jkwhk1xwp.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%2Fom60kgdplh2jkwhk1xwp.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The existing Spend capture shows a warning about unpriced runs. A missing price is not a zero price: the displayed total can be a floor for the usage in that window.&lt;/p&gt;

&lt;p&gt;Before comparing the dashboard with a provider account, check which model identifiers were priced and whether the provider or proxy adds charges outside that lookup. Also compare the same reporting period. A calendar-month figure and a rolling window can describe different sets of runs even when both appear on the same page.&lt;/p&gt;

&lt;p&gt;Model usage is only one cost component of an agent workflow. External tool services, sandbox compute and storage can have separate bills. Keep those components visible when estimating the cost of operating the whole task rather than treating the model-cost field as the entire invoice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set the budget on the intended configuration
&lt;/h2&gt;

&lt;p&gt;AgenticOS checks accounted spend before model requests. If the applicable limit has already been reached, the next request can be refused. Use the published configuration when checking which limit a run is meant to use; changing a draft setting is not the same as publishing it.&lt;/p&gt;

&lt;p&gt;A useful trial is to use a disposable configuration with a deliberately small limit and inspect the refusal path. Check the run's status and recorded usage, then confirm which setting caused the stop. This establishes the behavior of that trial rather than a universal upper bound on every possible workflow.&lt;/p&gt;

&lt;p&gt;The budget is not a reservation for the full future bill. A request can incur cost after passing its check, and concurrent or already committed work may not yet be reflected in the accounted total. Pricing gaps add another reason that a displayed amount may not describe all usage.&lt;/p&gt;

&lt;p&gt;Keep those conditions beside the cap when deciding how much traffic to allow. A spending limit and a request-rate limit answer different questions, and external-service charges need their own controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Look at the input behind the number
&lt;/h2&gt;

&lt;p&gt;Input usage can include instructions, tool definitions, retrieved material and conversation history. The actual request also depends on runtime behavior such as selection, caching and history processing. Counting the words visible in the chat does not reproduce that request.&lt;/p&gt;

&lt;p&gt;If input grows during a long task, inspect what is being retained. Compaction can summarize history, but the summary may omit details the next step needs and producing it can require work of its own. Compare both the task result and total usage before deciding that the change helped.&lt;/p&gt;

&lt;p&gt;The same approach applies to a smaller model: keep the source inputs and success criteria fixed, inspect the answer and record the whole task's usage. A cheaper individual request is useful only if it still does the work you need or reduces the complete workflow's cost at an acceptable quality level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep a useful run record
&lt;/h2&gt;

&lt;p&gt;For your first trial, retain the task input, published configuration, resolved model, output and usage together. Add unsuccessful attempts and identify any external costs the platform does not count. That gives a later prompt or model change something concrete to compare with.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://vstorm-co.github.io/agenticos/governance/" rel="noopener noreferrer"&gt;governance guide&lt;/a&gt; explains budgets and their accounting limits. The demo screen above shows how to read one run; a workload estimate needs observations from the tasks and traffic you actually intend to support.&lt;/p&gt;

&lt;p&gt;Which of your agents would you want to see a cost for first, and what would you compare it with?&lt;/p&gt;




&lt;p&gt;I'm Kacper, Principal Engineer and Open Source Tech Lead at Vstorm. I build AI agents and open-source tools in the Pydantic AI ecosystem. Find me on &lt;a href="https://www.linkedin.com/in/kacper-wlodarczyk" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://github.com/DEENUU1" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Reverse-engineering a web page into a Claude Code skill</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Fri, 09 Oct 2026 10:41:45 +0000</pubDate>
      <link>https://dev.to/deenuu1/reverse-engineering-a-web-page-into-a-claude-code-skill-1f79</link>
      <guid>https://dev.to/deenuu1/reverse-engineering-a-web-page-into-a-claude-code-skill-1f79</guid>
      <description>&lt;p&gt;I saw a long read on Frontstory, a Polish investigative outlet, that tells its story by scrolling over one large illustrated map. You read a short card, and the map glides to a city. A few cards later it pulls back to show the whole region, then zooms somewhere else. The format is usually called scrollytelling: the text scrolls, and a picture behind it changes with every paragraph.&lt;/p&gt;

&lt;p&gt;I wanted pages like that for explaining how AI systems work, so I asked Claude Code to take the page apart and teach itself to build them. This article follows what it did and where I had to step in. It was drafted and revised with AI assistance. Most examples shown use invented data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The prompt
&lt;/h2&gt;

&lt;p&gt;The whole request, translated from Polish, was this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Analyse the structure of &lt;a href="https://frontstory.pl/sabotaze" rel="noopener noreferrer"&gt;https://frontstory.pl/sabotaze&lt;/a&gt;. It scrolls, content appears, and it's nicely animated. Could you add a skill to our system for creating pages like this in HTML? Analyse the format thoroughly, then make three examples for the Gallery.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The skill was for Content OS, the internal system we use at Vstorm to plan, research, draft and check content. A skill there is the same thing as a Claude Code skill anywhere: a folder with a &lt;code&gt;SKILL.md&lt;/code&gt; that tells the agent how to do one kind of job, plus whatever scripts and references that job needs. Content OS is internal, so there's nothing to install from this article. The approach is the part worth taking.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the agent read
&lt;/h2&gt;

&lt;p&gt;Claude Code downloaded the page and read its HTML. It also opened the page in a headless browser and took screenshots at desktop and phone widths, to see what a reader sees rather than only what the source says. Those copies stayed in a temporary folder. None of the page's text, images or code went into our repository.&lt;/p&gt;

&lt;p&gt;The page turned out to be a single hand-written HTML file with no framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The stage.&lt;/strong&gt; One SVG drawing fixed to the screen: the map as an image, with about fifteen illustrations placed on top of it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Camera targets.&lt;/strong&gt; Fourteen invisible rectangles in the SVG, each drawn around something a shot should show.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steps.&lt;/strong&gt; Thirty-six text cards. Each names a camera target and the illustrations to show while it is on screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The camera.&lt;/strong&gt; When a card becomes active, a script measures its target rectangle and animates the SVG's &lt;code&gt;viewBox&lt;/code&gt; toward it. Changing the &lt;code&gt;viewBox&lt;/code&gt; is what makes the drawing appear to zoom and pan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The trigger.&lt;/strong&gt; An &lt;code&gt;IntersectionObserver&lt;/code&gt; decides which card is active as you scroll.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also noticed the rhythm, which turned out to be the real lesson: an establishing shot of the whole map, a zoom to one place, several cards held on that place while the text continues, a pull back, the next place. Most cards change only the text. The camera moves perhaps every third card.&lt;/p&gt;

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

&lt;p&gt;After a few minutes of reading, the agent went straight to code. In order: a small runtime that moves the camera and shows layers, a stylesheet, a build script, a recorder that films a page, then three examples, and only then the skill. Next to the skill it saved its teardown of the original page as a reference file, with the table of parts above and the rhythm.&lt;/p&gt;

&lt;p&gt;That file ended up being one of the most useful things in the whole skill. It explains the format in plain terms, and every later page starts from it. Asking for that teardown as its own deliverable, before any code, is a cheap way to check that the agent understood the format before it builds on that understanding.&lt;/p&gt;

&lt;p&gt;A single article and a tool that makes many pages have different jobs, so the teardown also lists where our version differs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Any card height works.&lt;/strong&gt; A card becomes active when its top crosses one line on the screen, however long the card is. Long cards on a narrow phone screen were the case that drove this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One camera at a time.&lt;/strong&gt; A new camera move cancels the running one and starts from wherever it got to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing remote.&lt;/strong&gt; The stage is vector, fonts are embedded, and the build refuses anything loaded from another server. The finished page is one HTML file that works offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typos fail loudly.&lt;/strong&gt; A card inherits what it leaves out from the card before, and the build rejects an attribute it doesn't know or an id that points at nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced motion.&lt;/strong&gt; For readers who ask their system for less motion, the camera cuts instead of gliding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scroll-scrubbed animation.&lt;/strong&gt; A card can publish how far through it the reader is, from 0 to 1, so something on the stage can grow or fill as you scroll.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is a criticism of the original. It's what changes when the same idea has to survive in pages written by an agent, for subjects nobody has seen yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the skill works
&lt;/h2&gt;

&lt;p&gt;The skill tells the agent to design the story before drawing anything. First a beat sheet: one row per step, with the sentence the card says, what the stage shows and where the camera is. Then one stage, drawn once in one SVG, with invisible &lt;code&gt;cam-*&lt;/code&gt; rectangles around everything a shot will frame and a &lt;code&gt;.layer&lt;/code&gt; group for everything a step will reveal. Then the cards.&lt;/p&gt;

&lt;p&gt;A card is ordinary HTML with a few data attributes. This one, from the example about agent requests, zooms to the app and shows three parts of the drawing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"step"&lt;/span&gt; &lt;span class="na"&gt;data-camera=&lt;/span&gt;&lt;span class="s"&gt;"#cam-app"&lt;/span&gt; &lt;span class="na"&gt;data-show=&lt;/span&gt;&lt;span class="s"&gt;"#b-request, #p-ask, #b-wrap"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;The app adds what the model needs&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;The model sees nothing but text. The app sends your message together with
     standing instructions and a description of every tool it may use.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A build script turns that &lt;code&gt;story.html&lt;/code&gt; into the finished page. Before writing anything, it checks that every camera and layer a card names exists in the drawing, that the page has a title, a language and alt text, and that nothing loads from the network. Then it opens the page in a headless browser, scrolls to every step and fails if one never becomes active, which no static check can see. With &lt;code&gt;--film&lt;/code&gt; it also records the page as a video at reading pace, for channels that take video and not interactive pages.&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%2Fku1p0y13prcha34jg0tv.jpg" 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%2Fku1p0y13prcha34jg0tv.jpg" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The checks matter because an agent can easily write a card that points at &lt;code&gt;#cam-tools&lt;/code&gt; when the rectangle is called &lt;code&gt;#cam-tool&lt;/code&gt;. Without the check, that card would just do nothing, and nobody would notice until a reader did.&lt;/p&gt;

&lt;h2&gt;
  
  
  My first review, and the apology
&lt;/h2&gt;

&lt;p&gt;The first version came back about half an hour after the prompt. I opened the examples and wrote, roughly: only the text moves and the background doesn't, the point is that the background can change too. Agent request map is nice, but the others are weak.&lt;/p&gt;

&lt;p&gt;Then, in the same message: damn, sorry, I put that badly, the examples are actually nice. Make more of them and vary the style so there's more choice. Five to ten more.&lt;/p&gt;

&lt;p&gt;The agent took both halves seriously. The next round added three more ways for the stage to change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scenes.&lt;/strong&gt; A card can name a mood, and the stylesheet recolours the whole stage for it. In one example a city goes from dusk to night to morning as you read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Depth.&lt;/strong&gt; Parts of the stage can sit at different depths, so every camera move becomes parallax.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rearranging.&lt;/strong&gt; A page script can move the stage's own elements. In another example 400 dots, one per invented support ticket, gather into piles by topic and then stack into a bar chart.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The skill now says it plainly: a page where only the text moves is an article with a picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nine examples in different styles
&lt;/h2&gt;

&lt;p&gt;From the first prompt at 19:49 to the merged pull request with nine examples took about two hours. That includes two review rounds by Codex on the pull request. It found things like a page referring to files that a single-file page would lose, and old video files left behind by an earlier build, and Claude Code fixed them. I merged after the second round. A third round came back after the merge with eight more findings, which are still open.&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%2F22jav1o9haosl2zketfk.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%2F22jav1o9haosl2zketfk.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each one uses a different visual style and a different way of moving the stage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a request travelling through an AI agent, with the camera hopping across one diagram&lt;/li&gt;
&lt;li&gt;a night on call, told across a city that changes from dusk to day&lt;/li&gt;
&lt;li&gt;a week of support tickets as dots that sort themselves&lt;/li&gt;
&lt;li&gt;retrieval in a RAG system, with text chunks turning into points&lt;/li&gt;
&lt;li&gt;seventy years of AI history on one long, newspaper-styled page, citing the real papers&lt;/li&gt;
&lt;li&gt;a conversation between an agent and an MCP server, printed in a terminal as you scroll&lt;/li&gt;
&lt;li&gt;an eval catching a regression, in loud full-colour scenes&lt;/li&gt;
&lt;li&gt;why retries need backoff, on a chart the page computes itself&lt;/li&gt;
&lt;li&gt;a context window filling up and being compacted as you scroll&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They all sit in the Gallery of our panel, where each opens as a live page in a sandboxed frame, with a phone-width toggle.&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%2Fyy4awa2dr9reau8qh56c.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%2Fyy4awa2dr9reau8qh56c.png" alt=" " width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked for different styles so there would be more to choose from. In hindsight they also show something else: one example only proves the agent can reproduce what it saw, while nine in different styles show the technique got separated from its original subject.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing this yourself
&lt;/h2&gt;

&lt;p&gt;This was one evening with Claude Code, but I'd expect the same steps to carry over to other formats and other coding agents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Point the agent at the real thing.&lt;/strong&gt; Ask it to download the page and open it in a browser at desktop and phone width, not just to guess from a screenshot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask for the teardown as its own file.&lt;/strong&gt; A short reference that lists the parts, how they connect and what the rhythm is. Read it. If you can't follow it, the skill built on it will be shaky too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have it list what a reusable tool must do differently.&lt;/strong&gt; One page and a generator have different jobs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then the skill.&lt;/strong&gt; A &lt;code&gt;SKILL.md&lt;/code&gt; with the method, a template to start from and a script that checks the output, so the agent's mistakes fail loudly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask for several examples in different styles.&lt;/strong&gt; They test whether the technique survives a new subject.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review honestly.&lt;/strong&gt; My reaction to the first version produced the biggest change of the evening, apology included.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And borrow the technique, never the content. The skill itself says so: a page that reuses another publication's structure takes none of its text, drawings or branding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't show
&lt;/h2&gt;

&lt;p&gt;The skill is new. Our publication records list nothing made with it yet, so it hasn't met real readers or subjects with messy data. Most examples are teaching pieces with invented numbers. Eight review findings are still waiting. And the two hours were possible because Content OS already had a build pipeline, a Gallery and checks for other formats that the new skill could plug into.&lt;/p&gt;

&lt;p&gt;Still, it's a good way to learn a format. Instead of only admiring a page, I can ask an agent to read it properly, build a tool from it and leave an explanation of how it works.&lt;/p&gt;

&lt;p&gt;Which format have you seen lately that you'd want a coding agent to take apart?&lt;/p&gt;

&lt;p&gt;The original that started it: &lt;a href="https://frontstory.pl/sabotaze" rel="noopener noreferrer"&gt;Frontstory, "Paczka z bombą"&lt;/a&gt;, with the interactive visualisation by Anastasiia Morozova and illustrations by Alisa Szorochowa.&lt;/p&gt;




&lt;p&gt;I'm Kacper, Principal Engineer and Open Source Tech Lead at Vstorm. I build AI agents and open-source tools in the Pydantic AI ecosystem. Find me on &lt;a href="https://www.linkedin.com/in/kacper-wlodarczyk" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://github.com/DEENUU1" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>webdev</category>
      <category>dataviz</category>
    </item>
    <item>
      <title>AgenticOS: self-hosted AI agents your whole team can improve</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Wed, 07 Oct 2026 11:39:00 +0000</pubDate>
      <link>https://dev.to/deenuu1/agenticos-self-hosted-ai-agents-your-whole-team-can-improve-3mb2</link>
      <guid>https://dev.to/deenuu1/agenticos-self-hosted-ai-agents-your-whole-team-can-improve-3mb2</guid>
      <description>&lt;h1&gt;
  
  
  AgenticOS: self-hosted AI agents your whole team can improve
&lt;/h1&gt;

&lt;p&gt;Vstorm AgenticOS is an open-source, self-hosted platform for company AI agents. It lets you build your own AI agents in a browser, give them access to your documents, and choose the tools they can use, on infrastructure you control. This week it has a new README and two decks built on the real product screens, and this article is the longer version of them.&lt;/p&gt;

&lt;p&gt;I'm Principal Engineer and Open Source Tech Lead at Vstorm, and I build AgenticOS, so read this as the maintainer's account rather than a review. The article was drafted with AI assistance. Every product fact in it was checked against the repository at release v0.0.516 or the README pull request that ships this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem it is built around
&lt;/h2&gt;

&lt;p&gt;Most agent frameworks give you a library. You write Python, you deploy it, and every change to an agent's behaviour is a pull request, a review and a release. That is the right shape for a product feature. It is a poor shape for the many small agents a company actually wants, and the AgenticOS docs put the reason in one sentence: the person who knows what the agent should say is not the person with commit access.&lt;/p&gt;

&lt;p&gt;So AgenticOS splits the work along that line. Engineers add capabilities in typed Python. The people who know the work write the instructions, upload the documents and maintain the procedures, in the browser. Colleagues use the published agent in web chat, Slack, Mattermost or Telegram, and developers call it through the API.&lt;/p&gt;

&lt;p&gt;The promise on the README is the short form of that: AI agents your whole team can use and improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is new this week, and what is not
&lt;/h2&gt;

&lt;p&gt;There is no 0.1.0. AgenticOS is still 0.0.x: the public history starts on 28 July 2026, and releases v0.0.1 to v0.0.516 followed between 2 August and 1 October. Treat the interfaces as young.&lt;/p&gt;

&lt;p&gt;What changed is how the project explains itself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The README now opens with what AgenticOS is and who it is for, then what you can do with it, what ships today and where it stops.&lt;/li&gt;
&lt;li&gt;A short introduction deck (14 slides at launch) covers the problem, the idea, the product, its controls and limits, and how to start. A longer product tour (44 slides at launch) goes through every screen in detail.&lt;/li&gt;
&lt;li&gt;The README and the decks include a list of where it stops today. The parts that matter most for an evaluation are at the end of this article.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building an agent in the browser
&lt;/h2&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%2F2g17nomzfjimiooy70hs.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%2F2g17nomzfjimiooy70hs.png" alt=" " width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An agent starts as instructions, a model and a set of tools. You choose them in the builder, publish a version, then test it in chat. Earlier versions stay readable, and you can roll back.&lt;/p&gt;

&lt;p&gt;Three kinds of company knowledge sit beside the agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; are reusable procedures, such as how to review code or write a report. You maintain one once and attach it to several agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context&lt;/strong&gt; is standing knowledge, such as a glossary or a policy. The agent gets it in the prompt or reads it on demand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge bases&lt;/strong&gt; make uploaded documents searchable, so an answer can come from your own files and cite the passage it used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With a container sandbox configured and command execution switched on, an agent can also read and edit files, run shell commands and execute Python or JavaScript. If you have used Claude Code or Codex, that part will feel familiar. What AgenticOS adds is the shared workspace around it: company knowledge, published agents and organisation access controls. What any agent achieves still depends on its model, tools and instructions.&lt;/p&gt;

&lt;p&gt;If you'd rather watch than read, the README has a 37-second recording of one run from 1 October: an agent reads a brief in Notion, researches our GitHub repositories and publishes an interactive page with its sources. The recording is edited, with the waiting cut out, and it runs on our own projects, so it is an integration example, not a customer story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three controls an IT or security reviewer will ask about
&lt;/h2&gt;

&lt;p&gt;Putting agents in front of a whole team raises three questions before anyone asks about features. What can it spend? What can it do without asking? What happened yesterday?&lt;/p&gt;

&lt;h3&gt;
  
  
  The budget is checked before every model request
&lt;/h3&gt;

&lt;p&gt;Each agent can have a monthly budget, and a new organisation starts with one ($100 by default). AgenticOS checks both before each model request, not after. The docs explain why: checking afterwards means the request that broke the budget was already paid for.&lt;/p&gt;

&lt;p&gt;There is a limit worth knowing before you rely on it. A run's cost lands on its record when the run finishes, so runs that start together cannot see one another. Fifty parallel runs against a cap that is one call short of full can each read the same under-cap total and overshoot it by up to their combined cost. If you need a strict cap, run those agents through one queue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sensitive tools wait for a person
&lt;/h3&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%2F1u0zyt96k5c1941dd9ze.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%2F1u0zyt96k5c1941dd9ze.png" alt=" " width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A tool that acts on the outside world parks the run and waits. A person sees the call, approves or rejects it, and the decision is recorded with who asked and who decided. You set this per tool or per capability. In the screenshot the same test account asked and decided. The permission to decide approvals is its own, and the built-in Operator role holds it without being able to edit agents.&lt;/p&gt;

&lt;p&gt;The limit here is coverage. The gate applies to the platform's own capability tools. Tools from an MCP server (the Model Context Protocol, an open standard for connecting agents to external tools) pass through it only when a web-chat session is set to &lt;strong&gt;Ask about everything&lt;/strong&gt;, and a tool that runs inside the model provider never reaches the local gate. Test the approval policy for the tools you actually enable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Every run is recorded
&lt;/h3&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%2Ffxafkumgpfwyip6dpdi3.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%2Ffxafkumgpfwyip6dpdi3.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every run lands in run history with the agent version that executed, the tools it called, the tokens and the cost. Because the version is recorded, a run from last week still makes sense after someone rewrites the agent.&lt;/p&gt;

&lt;p&gt;Governance actions go into a separate audit log: approval decisions, sharing and membership changes, secret rotation, exports and more. Each entry carries a hash over its own contents with the previous entry's hash folded in, per organisation, so editing, reordering, inserting or deleting an entry shows up when the chain is verified. That is detection, not prevention. It does not protect against someone holding the database's own credentials, who can rewrite a row and recompute the chain. And not every write is audited. Knowledge-base edits, for one, are not.&lt;/p&gt;

&lt;h2&gt;
  
  
  For developers: code defines, configuration composes
&lt;/h2&gt;

&lt;p&gt;AgenticOS is built on &lt;a href="https://ai.pydantic.dev" rel="noopener noreferrer"&gt;Pydantic AI&lt;/a&gt;, the Python agent framework from the Pydantic team, and &lt;a href="https://github.com/pydantic/pydantic-ai-harness" rel="noopener noreferrer"&gt;pydantic-ai-harness&lt;/a&gt;, a set of ready-made capabilities for Pydantic AI agents such as planning and tool-output limits. The backend is FastAPI with PostgreSQL (pgvector for the document search), Redis and Prefect for background and scheduled jobs, and the console is Next.js.&lt;/p&gt;

&lt;p&gt;The built-in capabilities are typed Python that an engineer writes, tests and registers. The console can only switch on what code registered, which the docs call "code defines, configuration composes". That is the boundary that lets the person who owns an agent's instructions change them without a release.&lt;/p&gt;

&lt;p&gt;MCP servers are the exception, and it is worth knowing before you choose a platform for a team. A builder or an admin connects one by pasting its URL, with no code change, and its tools sit outside the approval gate described above unless a chat asks about everything. Decide who holds the Builder role with that in mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running it yourself
&lt;/h2&gt;

&lt;p&gt;The quick start is a Docker Compose deployment through an installer script, on macOS, Linux or Windows under WSL2. You can run it with &lt;code&gt;--check&lt;/code&gt; first to test the prerequisites without installing anything, or read the script, or follow the manual installation guide. You need access to a model: a hosted provider, or a local model through &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; or an OpenAI-compatible server such as &lt;a href="https://docs.vllm.ai" rel="noopener noreferrer"&gt;vLLM&lt;/a&gt;, both of which serve open-weight models on your own hardware.&lt;/p&gt;

&lt;p&gt;Self-hosting the console does not make everything local. A hosted model, a cloud document parser or an external tool still receives the data you send it, so review the destinations you configure.&lt;/p&gt;

&lt;p&gt;Two things from the repository that a self-hoster may find more useful than a feature list:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first bottleneck was the database pool, not CPU.&lt;/strong&gt; On 16 September we load-tested one laptop: one worker, a stub model instead of a paid provider, 4,740 requests across a ramp, a sustained rate, a burst and a recovery. With the default pool of 5 connections plus 10 overflow, 1,537 requests failed. With 20 plus 30, 13 failed. CPU peaked at about 90 percent of one core in both runs. The shipped defaults are still 5 plus 10, so if you expect parallel load, raise &lt;code&gt;DB_POOL_SIZE&lt;/code&gt; and &lt;code&gt;DB_MAX_OVERFLOW&lt;/code&gt; first. This is one machine and a stub model, a request rate rather than a user count, so it says where the first wall is, not what a production deployment can carry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is a HIPAA configuration profile, and it is not a certification.&lt;/strong&gt; It covers the technical safeguards of 45 CFR §164.312 and nothing else: TLS to Postgres, Redis and the browser, a long vault key, a local model, local traces, single sign-on (OIDC or Kerberos), invite-only or closed signup, six years of audit retention and the audit chain. A doctor command checks the profile and exits non-zero when something is missing. The administrative and physical safeguards, encryption of content at rest and any business associate agreement remain the operator's job, and the profile says so.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does not do yet
&lt;/h2&gt;

&lt;p&gt;This is the short list for an evaluation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No ACL mirroring.&lt;/strong&gt; Permissions from SharePoint or Google Drive are not copied per user into a knowledge base. Scope the credential and share the collection with the right group.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No SAML, no SCIM, no native MFA.&lt;/strong&gt; OIDC, LDAP and Kerberos sign-in work. A SAML-only identity provider can come in through a broker such as Keycloak, and multi-factor is your identity provider's job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Kubernetes manifests.&lt;/strong&gt; It is Docker Compose on one host today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No reranker.&lt;/strong&gt; Retrieval is vector search with options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No visual workflow builder.&lt;/strong&gt; It is in development and not in any release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budgets can be overshot by parallel runs&lt;/strong&gt;, as described above.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The README and the decks add a few more, such as no built-in Microsoft 365 trigger.&lt;/p&gt;

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

&lt;p&gt;Start with the introduction deck if you want the shape of it: &lt;a href="https://vstorm-co.github.io/agenticos/presentation/" rel="noopener noreferrer"&gt;https://vstorm-co.github.io/agenticos/presentation/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For every screen in detail, the product tour: &lt;a href="https://vstorm-co.github.io/agenticos/presentation/tour/" rel="noopener noreferrer"&gt;https://vstorm-co.github.io/agenticos/presentation/tour/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then the quick start and the document-assistant walkthrough, which uploads a handbook, asks questions and checks the answers against cited sources: &lt;a href="https://github.com/vstorm-co/agenticos" rel="noopener noreferrer"&gt;https://github.com/vstorm-co/agenticos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is Apache-2.0. Issues and pull requests are open, and I'd especially like to hear what would stop you from running it: a missing sign-in method, a deployment target, a control your security team would ask for.&lt;/p&gt;




&lt;p&gt;I'm Kacper, Principal Engineer and Open Source Tech Lead at Vstorm. I build AI agents and open-source tools in the Pydantic AI ecosystem. Find me on &lt;a href="https://www.linkedin.com/in/kacper-wlodarczyk" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://github.com/DEENUU1" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>selfhosted</category>
      <category>python</category>
    </item>
    <item>
      <title>How We Built the AgenticOS Desktop Pets</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Thu, 10 Sep 2026 11:27:42 +0000</pubDate>
      <link>https://dev.to/deenuu1/how-we-built-the-agenticos-desktop-pets-5e93</link>
      <guid>https://dev.to/deenuu1/how-we-built-the-agenticos-desktop-pets-5e93</guid>
      <description>&lt;p&gt;Amigo walks around the desktop, follows the cursor with his eyes, and says “No more caramba.” Move the cursor back and forth over him and he closes his eyes with a little heart above his head.&lt;/p&gt;

&lt;p&gt;He's one of five pets in the AgenticOS desktop app. You can also pick a ghost, a small terminal on legs, a sprout, or a round creature with an antenna. They share the same movements, but each has its own appearance and lines.&lt;/p&gt;

&lt;p&gt;AgenticOS is an open-source project I'm building at Vstorm for creating and using AI agents. The pet is a small extra in its Tauri desktop app. This article is about how that extra works: drawing the characters, deciding what they do, and keeping them on the desktop beside the main window.&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%2F9s9j71r5uwqps5t049w4.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%2F9s9j71r5uwqps5t049w4.png" alt=" " width="270" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Amigo has his own window, so he can stay visible when the main app is minimised.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Drawing a pet from separate parts
&lt;/h2&gt;

&lt;p&gt;The artwork starts as a small grid. Each character in the grid represents a colour, and a dot represents a transparent pixel. The body, eyes, feet and other details are placed on top of one another to produce a frame.&lt;/p&gt;

&lt;p&gt;That means we can change the expression without drawing the whole character again. A blink uses closed eyes in place of open ones. A wave moves the arm. A hop lifts the parts together and then brings them back down.&lt;/p&gt;

&lt;p&gt;Each pet has its own body and coordinates for those parts. The ghost has no feet, while Amigo has a sombrero and moustache. The animation code works with those differences, using the parts that each character provides.&lt;/p&gt;

&lt;p&gt;The definitions live in &lt;a href="https://github.com/vstorm-co/agenticos/blob/main/desktop/ui/pet-sprites.js" rel="noopener noreferrer"&gt;pet-sprites.js&lt;/a&gt;. In the same file, a waving animation is described by these two positions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;wave&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="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;arm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;up&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;arm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;down&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's an excerpt from the animation table, rather than a standalone program. The renderer combines each position with the selected pet's artwork. Other entries describe blinking, walking, sleeping and hopping in the same way.&lt;/p&gt;

&lt;p&gt;For these simple characters, that gives us a shared set of movements to work on. A new pet needs artwork and part positions, then it can use the existing animations. A character with a very different shape or movement would need more work. Sprite sheets would still be a reasonable choice for more detailed, individually drawn animation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deciding when to move
&lt;/h2&gt;

&lt;p&gt;Drawing the frames is separate from choosing what happens next. That second part lives in &lt;a href="https://github.com/vstorm-co/agenticos/blob/main/desktop/ui/pet-engine.js" rel="noopener noreferrer"&gt;pet-engine.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When left alone, the pet spends most of its time standing still. It occasionally looks around, walks a little, or dozes. At night, it dozes instead of choosing another stroll. When it reaches the edge of the usable screen area, it turns back.&lt;/p&gt;

&lt;p&gt;Those decisions are functions with explicit inputs. The choice of the next behaviour takes a random-number function and the hour. Walking takes the current position, direction, elapsed time and screen boundaries. None of those calculations needs to open a desktop window.&lt;/p&gt;

&lt;p&gt;That makes the rules easier to check independently. You can supply a particular hour or position and inspect the result without waiting for a pet to happen to do the right thing on screen. The repository includes tests alongside the pet code for these behaviours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the cursor interaction feel intentional
&lt;/h2&gt;

&lt;p&gt;The eyes follow the cursor, with a small area around the centre where they keep looking straight ahead. Otherwise, small pointer movements near the middle would keep changing their direction.&lt;/p&gt;

&lt;p&gt;Stroking needs a different rule. A cursor passing over the character once shouldn't trigger the same reaction as moving back and forth over it. The engine tracks changes in direction within a short time window. Enough changes trigger the closed eyes and heart animation.&lt;/p&gt;

&lt;p&gt;Clicking makes the pet wave and say something. Double-clicking brings the AgenticOS window forward. Hovering reveals a “+ New chat” button, and the right-click menu lets you change the character or hide it.&lt;/p&gt;

&lt;p&gt;These interactions give the pet a few useful links back to the app without requiring it to move constantly. It also respects the operating system's reduced-motion setting by standing still while remaining draggable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giving it a window of its own
&lt;/h2&gt;

&lt;p&gt;The pet lives in a transparent, always-on-top Tauri window. The main console is a separate window, so minimising or closing that window doesn't remove the pet while the app is still running.&lt;/p&gt;

&lt;p&gt;The app remembers the selected character, whether it's visible, and where it was left. On the next launch, you don't need to pick the same pet and drag it back into place.&lt;/p&gt;

&lt;p&gt;The console itself loads the web app from the configured AgenticOS server. You still need that server running. Installing the desktop shell doesn't install the platform or make it available offline.&lt;/p&gt;

&lt;p&gt;One current limitation is that the pet doesn't show agent activity. A sleeping Amigo doesn't mean your agent has stopped, and a wave doesn't mean a task has finished. Connecting those events to the pet would require an explicit connection between the web app and the desktop shell. For now, its reactions come from the interactions described here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to look in the code
&lt;/h2&gt;

&lt;p&gt;If you'd like to explore the implementation, start with these three files in &lt;a href="https://github.com/vstorm-co/agenticos/tree/main/desktop/ui" rel="noopener noreferrer"&gt;desktop/ui&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pet-sprites.js&lt;/code&gt; holds the artwork, part positions and animation frames.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pet-engine.js&lt;/code&gt; handles behaviour, movement and cursor interactions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pet-lines.js&lt;/code&gt; contains what each character says.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://github.com/vstorm-co/agenticos/blob/main/docs/desktop.md" rel="noopener noreferrer"&gt;desktop documentation&lt;/a&gt; covers the Tauri setup and commands for running it against your own AgenticOS installation.&lt;/p&gt;

&lt;p&gt;Changing a line in &lt;code&gt;pet-lines.js&lt;/code&gt; is a small place to start. Changing the artwork gives you something more visible to play with. You can explore either without needing to understand the agent builder or the rest of the platform first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Kacper Włodarczyk, building AgenticOS at Vstorm.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>tauri</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>24 Claude Code Skills to Fix Your AI Stack: Introducing production-stack-skills and content-skills</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Mon, 20 Apr 2026 11:59:05 +0000</pubDate>
      <link>https://dev.to/deenuu1/24-claude-code-skills-to-fix-your-ai-stack-introducing-production-stack-skills-and-content-skills-80m</link>
      <guid>https://dev.to/deenuu1/24-claude-code-skills-to-fix-your-ai-stack-introducing-production-stack-skills-and-content-skills-80m</guid>
      <description>&lt;p&gt;78% of Fortune 500 companies are adopting AI coding assistants. 45% of that generated code ships with security vulnerabilities. On the content side, 76% of readers identify AI-written text within three seconds, and engagement drops around 47% when they do.&lt;/p&gt;

&lt;p&gt;Those three numbers describe the same problem from two angles: &lt;strong&gt;AI outputs need guardrails, whether the output is code or writing.&lt;/strong&gt; Today we're shipping two Claude Code skill packs that sit on those guardrails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Claude Code skill is a packaged slash command that augments your AI coding agent with a specific expertise, readable via &lt;code&gt;SKILL.md&lt;/code&gt; and invocable from any AGENTS.md-compatible runtime.&lt;/strong&gt; The Skills Wave is two of those packs, released the same day because the failure modes on both sides of the AI workflow deserve the same fix.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm Kacper, AI Engineer at &lt;a href="https://vstorm.co" rel="noopener noreferrer"&gt;Vstorm&lt;/a&gt;, an Applied Agentic AI Engineering Consultancy. We've shipped 30+ production AI agent implementations and open-source our tooling at &lt;a href="https://github.com/vstorm-co" rel="noopener noreferrer"&gt;github.com/vstorm-co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  production-stack-skills: 10 Claude Code Skills for Production-Ready AI Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;production-stack-skills is a 10-skill pack that audits AI-generated code across six weighted categories and hands back a 0 to 100 production-readiness score with a prioritized action plan.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The flagship command is &lt;code&gt;/production check&lt;/code&gt;. You point it at a repo, it reads the FastAPI routes, Postgres migrations, Dockerfiles, and config, and returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A headline score (e.g., "Production Readiness: 34/100")&lt;/li&gt;
&lt;li&gt;Six category scores: security, error handling, observability, deployment, data layer, code quality&lt;/li&gt;
&lt;li&gt;A Quick Wins section with point deltas&lt;/li&gt;
&lt;li&gt;An Action Plan sorted by weighted impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In first internal runs across client repos, Quick Wins alone consistently moves the score about 30 points. That's the number I'd quote if a CTO asked "what does running this for a morning actually buy me".&lt;/p&gt;

&lt;p&gt;The other nine skills split by surface area: &lt;code&gt;/production review&lt;/code&gt;, &lt;code&gt;/production planner&lt;/code&gt;, &lt;code&gt;/production fastapi&lt;/code&gt;, &lt;code&gt;/production postgres&lt;/code&gt;, &lt;code&gt;/production docker&lt;/code&gt;, &lt;code&gt;/production deploy&lt;/code&gt;, &lt;code&gt;/production monitoring&lt;/code&gt;, &lt;code&gt;/production security&lt;/code&gt;, &lt;code&gt;/production error-handling&lt;/code&gt;. Each is a focused slash command rather than a sub-mode of a monolithic agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  content-skills: 14 Brand-First Skills That Kill AI Slop
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;content-skills is a 14-skill pack with a &lt;code&gt;/brand/&lt;/code&gt; directory at its core, so every piece of content generated after a five-minute brand interview reads your BRAND.md, VOICE.md, VISUAL.md, and voice samples before writing a word.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;/content setup&lt;/code&gt; once. Five questions. It writes &lt;code&gt;/brand/&lt;/code&gt;. From that moment, every content skill auto-reads that directory on every invocation.&lt;/p&gt;

&lt;p&gt;The exit point is &lt;code&gt;/content audit&lt;/code&gt;. Score any piece of content 0 to 100 on voice consistency, anti-slop markers, visual consistency, and brand alignment.&lt;/p&gt;

&lt;p&gt;Between setup and audit sit 12 production skills: strategy, calendar, blog, twitter, linkedin, reddit, hackernews, presentation, infographic, image, video, repurpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Install, Dual-CLI, Uninstall-Safe
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/vstorm-co/production-stack-skills/main/install.sh | bash
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/vstorm-co/content-skills/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each install mirrors the skills into both &lt;code&gt;~/.claude/&lt;/code&gt; (Claude Code) and &lt;code&gt;~/.agents/&lt;/code&gt; (Codex, Amp, and anything AGENTS.md-compatible). You don't pick the runtime up front. A skill written for Claude Code works identically in Codex.&lt;/p&gt;

&lt;p&gt;Uninstall is boring by design. &lt;code&gt;/content-skills uninstall&lt;/code&gt; removes the skills. Your &lt;code&gt;/brand/&lt;/code&gt; stays.&lt;/p&gt;

&lt;p&gt;Both repos are MIT.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Two Packs Shipped the Same Day
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;In 30+ production AI agent deployments at Vstorm, the failures cluster into two shapes: code that passes demo but fails the first prod incident, and content that sounds like the AI wrote it because the AI wrote it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One pack addresses the first. The other addresses the second. Both use the same architecture because the lesson that skills beat monolithic agents applies to both. You don't want "one AI that does everything". You want 24 small, composable, auditable slash commands that you can swap, tune, or remove when they stop pulling weight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;production-stack-skills&lt;/strong&gt; ships 10 skills with a 0-100 scorer and Quick Wins section that typically moves scores +30 in under five minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;content-skills&lt;/strong&gt; ships 14 skills built around a &lt;code&gt;/brand/&lt;/code&gt; directory auto-read on every invocation.&lt;/li&gt;
&lt;li&gt;Both packs install via one &lt;code&gt;curl&lt;/code&gt; command, mirror into &lt;code&gt;~/.claude/&lt;/code&gt; and &lt;code&gt;~/.agents/&lt;/code&gt;, work on Claude Code, Codex, and any AGENTS.md-compatible runtime.&lt;/li&gt;
&lt;li&gt;Skill-first architecture beats monolithic agents for auditability and local updates.&lt;/li&gt;
&lt;li&gt;Both repos are MIT.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What are Claude Code skills and how do I install them?
&lt;/h3&gt;

&lt;p&gt;Claude Code skills are packaged slash commands backed by a &lt;code&gt;SKILL.md&lt;/code&gt; file that extends a coding agent with specific expertise. You install a skill pack with a single &lt;code&gt;curl&lt;/code&gt; command that mirrors files into &lt;code&gt;~/.claude/&lt;/code&gt; and &lt;code&gt;~/.agents/&lt;/code&gt;. After install, slash commands become available immediately without restart.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between production-stack-skills and content-skills?
&lt;/h3&gt;

&lt;p&gt;production-stack-skills audits and hardens AI-generated code across security, error handling, observability, deployment, data, and code quality, returning a 0-100 score. content-skills audits and produces on-brand content using a &lt;code&gt;/brand/&lt;/code&gt; directory you set up once, returning voice-consistency and anti-slop scores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do these skills work with Codex or only Claude Code?
&lt;/h3&gt;

&lt;p&gt;Both. Each install script mirrors files into both &lt;code&gt;~/.claude/&lt;/code&gt; and &lt;code&gt;~/.agents/&lt;/code&gt;, so the same skill works in Claude Code, Codex, Amp, and any AGENTS.md-compatible runtime without modification.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does &lt;code&gt;/production check&lt;/code&gt; take on a real repo?
&lt;/h3&gt;

&lt;p&gt;On a typical FastAPI + Postgres repo of a few thousand lines, about a minute. The Quick Wins section is what you act on first, usually under five minutes to apply.&lt;/p&gt;

&lt;h3&gt;
  
  
  When should I use a Claude Code skill instead of writing a full agent?
&lt;/h3&gt;

&lt;p&gt;Use a skill when the job is scoped expertise invoked explicitly (audit this, write a post in my voice). Use a full agent when the job is open-ended, multi-step, and requires planning across tools. Skills are composable building blocks; agents orchestrate them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;production-stack-skills:&lt;/strong&gt; &lt;a href="https://github.com/vstorm-co/production-stack-skills" rel="noopener noreferrer"&gt;github.com/vstorm-co/production-stack-skills&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;content-skills:&lt;/strong&gt; &lt;a href="https://github.com/vstorm-co/content-skills" rel="noopener noreferrer"&gt;github.com/vstorm-co/content-skills&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full writeup:&lt;/strong&gt; &lt;a href="https://oss.vstorm.co/blog/skills-wave-launch-claude-code-skills/" rel="noopener noreferrer"&gt;oss.vstorm.co/blog/skills-wave-launch-claude-code-skills&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.linkedin.com/in/kacper-wlodarczyk/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; for the follow-ups: Wednesday's production deep-dive, Thursday's content walkthrough, Friday's "8 Lessons from Shipping 24 Claude Code Skills".&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Full Observability in AI Agents: What We Added to the pydantic-deepagents TUI</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Sat, 18 Apr 2026 09:58:43 +0000</pubDate>
      <link>https://dev.to/deenuu1/full-observability-in-ai-agents-what-we-added-to-the-pydantic-deepagents-tui-l02</link>
      <guid>https://dev.to/deenuu1/full-observability-in-ai-agents-what-we-added-to-the-pydantic-deepagents-tui-l02</guid>
      <description>&lt;h1&gt;
  
  
  Full Observability in AI Agents: What We Added to the pydantic-deepagents TUI
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a cross-post. Canonical version: &lt;a href="https://oss.vstorm.co/blog/ai-agent-tui-observability-pydantic-deep/" rel="noopener noreferrer"&gt;oss.vstorm.co/blog/ai-agent-tui-observability-pydantic-deep/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week I covered how pydantic-deepagents handles stuck loops, context window blindness, and frictionless installation. Today: what you actually see when all of that runs.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem with invisible agents
&lt;/h2&gt;

&lt;p&gt;When an AI agent runs, a lot happens between your prompt and the response. The model reasons. It calls tools. Each action burns tokens and costs money. Without observability, you're flying blind — you can't debug, optimize, or trust what's happening.&lt;/p&gt;

&lt;p&gt;pydantic-deepagents v0.3.5 — the modular agent runtime for Python — reworks the TUI to surface everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Per-turn token usage
&lt;/h3&gt;

&lt;p&gt;Below every assistant response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;in:2.1K · out:412 · total:2.5K · reqs:3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;in&lt;/code&gt; = input tokens, &lt;code&gt;out&lt;/code&gt; = output tokens, &lt;code&gt;total&lt;/code&gt; = turn total, &lt;code&gt;reqs&lt;/code&gt; = API calls in this turn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cumulative cost in the header
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pydantic-deepagents  in:45K out:3K · $0.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Updates after each response. You always know the running total.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thinking streamed live → collapsed
&lt;/h3&gt;

&lt;p&gt;Model reasoning appears as dimmed text while running. Collapses to a one-line summary when done. Watch the agent reason without drowning in it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Side panel on startup
&lt;/h3&gt;

&lt;p&gt;Opens automatically when terminal ≥100 chars wide. Shows subagents before any task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subagents:
• planner (idle)
• research (idle)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Status updates as agents are delegated work.&lt;/p&gt;

&lt;h3&gt;
  
  
  All tool calls visible
&lt;/h3&gt;

&lt;p&gt;Todo tools (&lt;code&gt;read_todos&lt;/code&gt;, &lt;code&gt;write_todos&lt;/code&gt;, &lt;code&gt;add_todo&lt;/code&gt;, &lt;code&gt;update_todo_status&lt;/code&gt;, &lt;code&gt;remove_todo&lt;/code&gt;) were previously hidden. Now surfaced. Every agent action is visible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Session saved on crash
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;_save_session()&lt;/code&gt; is now in a &lt;code&gt;finally&lt;/code&gt; block. Crash, exception, keyboard interrupt — &lt;code&gt;messages.json&lt;/code&gt; is always written. No more lost sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Subagent logs: 20K chars (was 2K)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;tool_log.jsonl&lt;/code&gt; now stores full subagent output. Critical for &lt;code&gt;/improve&lt;/code&gt; — the pipeline that extracts learnings from sessions (more on that tomorrow).&lt;/p&gt;




&lt;h2&gt;
  
  
  The full layout
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────┬──────────────────┐
│ pydantic-deepagents  in:45K out:3K · $0.12         │
├─────────────────────────────────┼──────────────────┤
│ [thinking... dimmed text]       │ Subagents:       │
│ [collapsed to summary]          │ • planner (idle) │
│                                 │ • research (idle)│
│ Agent response here...          │                  │
│ in:2.1K · out:412 · $0.04       │                  │
└─────────────────────────────────┴──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://oss.vstorm.co/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/vstorm-co/pydantic-deep" rel="noopener noreferrer"&gt;github.com/vstorm-co/pydantic-deep&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observability is how you debug, optimize, and trust your agent. A black box is a liability.&lt;/p&gt;

&lt;p&gt;What's the first metric you check when debugging an agent run?&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Browser Automation + /improve: AI Agents That Browse the Web and Fix Themselves</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Fri, 17 Apr 2026 12:20:41 +0000</pubDate>
      <link>https://dev.to/deenuu1/browser-automation-improve-ai-agents-that-browse-the-web-and-fix-themselves-57i8</link>
      <guid>https://dev.to/deenuu1/browser-automation-improve-ai-agents-that-browse-the-web-and-fix-themselves-57i8</guid>
      <description>&lt;p&gt;This week I shipped 5 versions of pydantic-deepagents — the modular agent runtime for Python. Today: the two features that close the loop — browser automation and session-based self-improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1: BrowserCapability — 9 Playwright Tools
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s1"&gt;'pydantic-deep[browser]'&lt;/span&gt;
playwright &lt;span class="nb"&gt;install &lt;/span&gt;chromium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic_deep.capabilities&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BrowserCapability&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_deep_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic:claude-opus-4-6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;extra_capabilities&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;BrowserCapability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;allowed_domains&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;docs.python.org&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;auto_screenshot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&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;p&gt;The 9 tools: &lt;code&gt;navigate&lt;/code&gt;, &lt;code&gt;click&lt;/code&gt;, &lt;code&gt;type_text&lt;/code&gt;, &lt;code&gt;get_text&lt;/code&gt;, &lt;code&gt;screenshot&lt;/code&gt;, &lt;code&gt;scroll&lt;/code&gt;, &lt;code&gt;go_back&lt;/code&gt;, &lt;code&gt;go_forward&lt;/code&gt;, &lt;code&gt;execute_js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safety design:&lt;/strong&gt; Single-tab (predictable state), domain allowlist (agent can't navigate outside allowed domains), automatic popup interception, content truncation to prevent context overflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browser lifecycle:&lt;/strong&gt; Chromium starts before the agent run, stops after — whether the run succeeds, fails, or is cancelled. No orphaned processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pydantic-deep tui &lt;span class="nt"&gt;--browser&lt;/span&gt; &lt;span class="nt"&gt;--browser-headed&lt;/span&gt;   &lt;span class="c"&gt;# visible window&lt;/span&gt;
pydantic-deep run &lt;span class="s2"&gt;"research X on GitHub"&lt;/span&gt; &lt;span class="nt"&gt;--browser&lt;/span&gt; &lt;span class="nt"&gt;--sandbox&lt;/span&gt; docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Bug fix:&lt;/strong&gt; Browser tools now force &lt;code&gt;kind='function'&lt;/code&gt; — they never trigger approval dialogs mid-task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 2: /improve — Session-Based Self-Improvement
&lt;/h2&gt;

&lt;p&gt;After each session, &lt;code&gt;/improve&lt;/code&gt; analyzes the full run and extracts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UserFactInsight&lt;/code&gt;&lt;/strong&gt; — what the agent learned about you and your preferences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;AgentLearningInsight&lt;/code&gt;&lt;/strong&gt; — strategies that worked, failure modes encountered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both write to MEMORY.md. Next session loads MEMORY.md automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; We tested summaries vs raw tool traces as input to the synthesis step. Raw traces performed significantly better — summaries compress away the signal that matters. &lt;code&gt;/improve&lt;/code&gt; reads from &lt;code&gt;tool_log.jsonl&lt;/code&gt; (written per session), not from a summary.&lt;/p&gt;

&lt;p&gt;The loop: agent runs → &lt;code&gt;/improve&lt;/code&gt; extracts insights → MEMORY.md grows → next run starts smarter.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Week's Full Stack
&lt;/h2&gt;

&lt;p&gt;Monday: StuckLoopDetection | Tuesday: LimitWarnerCapability | Wednesday: curl install | Thursday: Docker sandbox | &lt;strong&gt;Today: browser + /improve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An agent that detects loops, knows its context limits, installs in 30s, runs in Docker, browses the web, and learns from every session.&lt;/p&gt;

&lt;p&gt;Full breakdown: &lt;a href="https://oss.vstorm.co/blog/browser-automation-improve-ai-agents-pydantic-deep/" rel="noopener noreferrer"&gt;https://oss.vstorm.co/blog/browser-automation-improve-ai-agents-pydantic-deep/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/vstorm-co/pydantic-deep" rel="noopener noreferrer"&gt;https://github.com/vstorm-co/pydantic-deep&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>playwright</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>curl | bash for AI Agents: One-Command Install for pydantic-deep</title>
      <dc:creator>Kacper Włodarczyk</dc:creator>
      <pubDate>Wed, 15 Apr 2026 11:57:47 +0000</pubDate>
      <link>https://dev.to/deenuu1/curl-bash-for-ai-agents-one-command-install-for-pydantic-deep-36jh</link>
      <guid>https://dev.to/deenuu1/curl-bash-for-ai-agents-one-command-install-for-pydantic-deep-36jh</guid>
      <description>&lt;p&gt;The standard Python AI tool install experience:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Python (which version?)&lt;/li&gt;
&lt;li&gt;Create a venv&lt;/li&gt;
&lt;li&gt;pip install&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ModuleNotFoundError: No module named 'textual'&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;pip install again with correct extras&lt;/li&gt;
&lt;li&gt;Figure out PATH&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Seven steps. Fifteen minutes. That's before you've even seen the tool.&lt;/p&gt;

&lt;p&gt;We fixed this for &lt;a href="https://github.com/vstorm-co/pydantic-deep" rel="noopener noreferrer"&gt;pydantic-deep&lt;/a&gt; — the modular agent runtime for Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/vstorm-co/pydantic-deep/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What install.sh does
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Detects whether &lt;code&gt;uv&lt;/code&gt; is installed&lt;/li&gt;
&lt;li&gt;If not: installs uv via the official Astral installer&lt;/li&gt;
&lt;li&gt;Runs &lt;code&gt;uv tool install "pydantic-deep[cli]"&lt;/code&gt; — isolated environment, binary available globally&lt;/li&gt;
&lt;li&gt;Verifies the install&lt;/li&gt;
&lt;li&gt;Prints PATH fix instructions if needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No virtual environment management. No extras guessing. The &lt;code&gt;cli&lt;/code&gt; extras group includes everything including &lt;code&gt;textual&lt;/code&gt; (which was the original bug — it was missing from the base install).&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-update
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pydantic-deep update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uses &lt;code&gt;uv tool upgrade&lt;/code&gt; if available, falls back to pip. One command to stay current.&lt;/p&gt;

&lt;h2&gt;
  
  
  Startup notifications
&lt;/h2&gt;

&lt;p&gt;Every invocation checks PyPI for updates silently (2-second timeout, 24-hour cache):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Update available: v0.3.6 → v0.3.7  Run: pydantic-deep update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never blocks startup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why uv?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;uv tool install&lt;/code&gt; is designed exactly for this use case — isolated tool environments, global binary access, no activation required. Fast, well-maintained, increasingly standard for Python CLI tooling.&lt;/p&gt;

&lt;p&gt;Alternatives considered: pipx (slower, needs separate install), Homebrew tap (maintenance overhead), native binary (too brittle for dynamic imports).&lt;/p&gt;




&lt;p&gt;Full write-up with implementation details: &lt;a href="https://oss.vstorm.co/blog/pydantic-deep-one-command-install-curl-bash/" rel="noopener noreferrer"&gt;oss.vstorm.co/blog/pydantic-deep-one-command-install-curl-bash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/vstorm-co/pydantic-deep" rel="noopener noreferrer"&gt;github.com/vstorm-co/pydantic-deep&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's the worst install experience you've had with an AI/ML tool?&lt;/p&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>devex</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
