<?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: Valter Eduardo</title>
    <description>The latest articles on DEV Community by Valter Eduardo (@valteresj).</description>
    <link>https://dev.to/valteresj</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%2F4227687%2F4e02f1ff-5c15-415e-857c-a38e4ddadba8.jpg</url>
      <title>DEV Community: Valter Eduardo</title>
      <link>https://dev.to/valteresj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/valteresj"/>
    <language>en</language>
    <item>
      <title>I built an open-source platform where AI agents work like governed employees, and now they can use desktop apps</title>
      <dc:creator>Valter Eduardo</dc:creator>
      <pubDate>Thu, 05 Nov 2026 05:49:54 +0000</pubDate>
      <link>https://dev.to/valteresj/i-built-an-open-source-platform-where-ai-agents-work-like-governed-employees-and-now-they-can-use-1e0g</link>
      <guid>https://dev.to/valteresj/i-built-an-open-source-platform-where-ai-agents-work-like-governed-employees-and-now-they-can-use-1e0g</guid>
      <description>&lt;p&gt;Most "AI agent" demos stop at the moment it gets interesting for a company: who's allowed to let the agent pay an invoice, send an email or change a record, and how do you know what it did?&lt;/p&gt;

&lt;p&gt;That's the problem I've been working on with &lt;strong&gt;Agent Hangar&lt;/strong&gt;, an open-source (Apache-2.0), self-hosted platform where agents work as &lt;em&gt;digital employees&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It covers the whole range: from a simple chat agent, to agents built in other frameworks, all the way to a Digital employee with a harness (Claude Code, Codex) that works in your IDE with its own role, budget and authority.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/valteresj2/agent-hangar" rel="noopener noreferrer"&gt;https://github.com/valteresj2/agent-hangar&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/valteresj2" rel="noopener noreferrer"&gt;
        valteresj2
      &lt;/a&gt; / &lt;a href="https://github.com/valteresj2/agent-hangar" rel="noopener noreferrer"&gt;
        agent-hangar
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      One home for every AI agent. Build, test and ship agents once, then use them from Claude, ChatGPT, Codex, Cursor, VS Code or Slack (MCP, OpenAI-compatible, A2A, ACP). Self-hosted, with teams, approvals, audit, memory and multi-agent composition. Docker or Kubernetes.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;⌂ Agent Hangar&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;One home for every AI agent your company builds, whatever tool built it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;People create agents where they already work: Claude, ChatGPT, Cursor, VS Code, Codex, OpenCode. Agent Hangar
brings them all to one place, runs each one in its own container, and makes them usable from &lt;strong&gt;any&lt;/strong&gt; platform
over &lt;strong&gt;OpenAI-compatible, MCP, A2A and ACP&lt;/strong&gt;, and inside your own app over &lt;strong&gt;AG-UI&lt;/strong&gt;. Everyone can find them, talk to
them, and combine them into new agents.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/valteresj2/agent-hangar/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/valteresj2/agent-hangar/actions/workflows/ci.yml/badge.svg" alt="CI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/valteresj2/agent-hangar/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/798509b4df525f56802b56f8096862487f08023e3d7561c68656f8dab10d0d6e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4170616368652d2d322e302d626c75652e737667" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/valteresj2/agent-hangar/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ede3103733e26b627e4d22212ad4375ac4a0ade281df6eaa2c0b9b65e3766268/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f76616c74657265736a322f6167656e742d68616e676172" alt="Release"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/71cb9a97360b8841ddfc125fa85687761845a6d44b48b4de9b527a2d2dce2930/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374617475732d616c7068612d6f72616e6765"&gt;&lt;img src="https://camo.githubusercontent.com/71cb9a97360b8841ddfc125fa85687761845a6d44b48b4de9b527a2d2dce2930/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374617475732d616c7068612d6f72616e6765" alt="Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://valteresj2.github.io/agent-hangar/demo/" rel="nofollow noopener noreferrer"&gt;Interactive demo&lt;/a&gt; · &lt;a href="https://github.com/valteresj2/agent-hangar#the-hangar-desktop-app" rel="noopener noreferrer"&gt;Desktop app&lt;/a&gt; · &lt;a href="https://github.com/valteresj2/agent-hangar#computer-use-the-governed-desktop" rel="noopener noreferrer"&gt;Computer use&lt;/a&gt; · &lt;a href="https://github.com/valteresj2/agent-hangar#from-a-request-in-claude-to-a-working-agent" rel="noopener noreferrer"&gt;Example&lt;/a&gt; · &lt;a href="https://github.com/valteresj2/agent-hangar#installation" rel="noopener noreferrer"&gt;Install&lt;/a&gt; · &lt;a href="https://github.com/valteresj2/agent-hangar#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; ·
&lt;a href="https://github.com/valteresj2/agent-hangar#how-it-works" rel="noopener noreferrer"&gt;How it works&lt;/a&gt; · &lt;a href="https://valteresj2.github.io/agent-hangar/" rel="nofollow noopener noreferrer"&gt;Website&lt;/a&gt; · &lt;a href="https://valteresj2.github.io/agent-hangar/docs/" rel="nofollow noopener noreferrer"&gt;Docs&lt;/a&gt; · &lt;a href="https://github.com/valteresj2/agent-hangar/ROADMAP.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt; · &lt;a href="https://github.com/valteresj2/agent-hangar/README.pt-BR.md" rel="noopener noreferrer"&gt;Português&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/valteresj2/agent-hangar/docs/assets/portal-tour.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fvalteresj2%2Fagent-hangar%2FHEAD%2Fdocs%2Fassets%2Fportal-tour.gif" width="900" alt="User portal tour: Ana asks Claude for a Sales Assistant. Claude builds, tests and ships it through the Hangar
MCP. Then come her Início page, the agent, a Playground answer, the team memory, the scheduled daily summary
connections and the company catalog."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The user portal, recorded on a local install · &lt;a href="https://github.com/valteresj2/agent-hangar/docs/assets/portal-tour.mp4" rel="noopener noreferrer"&gt;MP4 version&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Watch: Agent Hangar end to end&lt;/h3&gt;

&lt;/div&gt;

  
    
    &lt;span class="m-1"&gt;agent-hangar-end-to-end.mp4&lt;/span&gt;
    
  

  

  


&lt;p&gt;2 min 45 s, with captions: what Agent Hangar is, how to install it, build, test and ship agents, use them over every protocol (inside your…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/valteresj2/agent-hangar" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The idea: an agent is an employee, not a script
&lt;/h2&gt;

&lt;p&gt;Each Digital employee has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;role and a team&lt;/strong&gt;, and a person it reports to;&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;monthly budget&lt;/strong&gt; in tokens and money;&lt;/li&gt;
&lt;li&gt;a list of &lt;strong&gt;allowed tools&lt;/strong&gt; (connectors, MCP servers, platform tools);&lt;/li&gt;
&lt;li&gt;an &lt;strong&gt;authority level&lt;/strong&gt;: anything above it waits for a person's approval.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every task has a timeline with each step, the decisions taken and who approved them.&lt;/p&gt;

&lt;h2&gt;
  
  
  New: governed computer use
&lt;/h2&gt;

&lt;p&gt;A lot of real work still lives in desktop applications with no API: a legacy ERP, a spreadsheet, an installed system. In the latest release, a Digital employee can operate them the way a person does, by &lt;strong&gt;looking at the screen&lt;/strong&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%2Fw4zkuo7v0w8b8gkmkh3t.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%2Fw4zkuo7v0w8b8gkmkh3t.png" alt="The agent clicked &amp;quot;Confirmar baixa&amp;quot; in a legacy ERP; the click had a manager's approval" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How it stays safe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It runs in an isolated Linux desktop&lt;/strong&gt; (built on &lt;a href="https://github.com/trycua/cua" rel="noopener noreferrer"&gt;Cua&lt;/a&gt;) with no internet access, and the agent can open only the apps allowed for it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Each action returns the window's screenshot&lt;/strong&gt; plus its accessible elements, numbered. Apps with no accessibility info are operated by position on the screenshot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clicks that save, post, send or pay go through the authority check.&lt;/strong&gt; The approval request carries the screenshot, and the click happens exactly where the person approved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passwords stay in the vault.&lt;/strong&gt; The agent types &lt;code&gt;secret://name&lt;/code&gt;; the model and the timeline never see the value.&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%2F6nou65b1xuc6g0xwigyn.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%2F6nou65b1xuc6g0xwigyn.png" alt="The ERP's status bar shows the payment recorded" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tested it end to end with a real model (DeepSeek through OpenRouter) on 8 cases: logging in with a vault password, a date typed in another format, a nonexistent invoice, a confirmation dialog, menus with scrolling, saving a spreadsheet with "Save as", reading a CSV, and two payments in one task without duplicates. 8 of 8 passed. The test also caught a real bug (tool events showing twice on the timeline), fixed in 0.58.4.&lt;/p&gt;

&lt;p&gt;There's an 80-second video of the run in the README.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nt"&gt;--profile&lt;/span&gt; desktop up &lt;span class="nt"&gt;-d&lt;/span&gt; desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then list the allowed apps in the employee's settings. Two sample apps come with it (Gnumeric and a Tk "legacy ERP"); you add your own in the desktop's Dockerfile.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else is in there
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Any LLM per agent: OpenAI, Anthropic, Gemini, OpenRouter, a corporate gateway, Ollama, any OpenAI-compatible endpoint&lt;/li&gt;
&lt;li&gt;Agent memory as a graph on PostgreSQL with Apache AGE&lt;/li&gt;
&lt;li&gt;Warnings before a model an agent uses is deprecated&lt;/li&gt;
&lt;li&gt;An MCP endpoint, SSO/SCIM, Helm and Terraform installs, a desktop app&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;I'd love to hear what you'd need to trust an agent with real work, and where the safety boundaries for computer use should be. Issues and PRs are open on GitHub: &lt;a href="https://github.com/valteresj2/agent-hangar" rel="noopener noreferrer"&gt;https://github.com/valteresj2/agent-hangar&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>selfhosted</category>
      <category>python</category>
    </item>
  </channel>
</rss>
