<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>KHTDR – Dag</title><description/><link>https://khtdr.com/tags/dag.html</link><lastBuildDate>Tue, 15 Sep 2026 00:00:00 -0600</lastBuildDate><language>en-us</language><managingEditor>mazzarelli@gmail.com (Joey Mazzarelli)</managingEditor><webMaster>mazzarelli@gmail.com (Joey Mazzarelli)</webMaster><atom:link href="https://khtdr.com/tags/dag/index.xml" rel="self" type="application/rss+xml"/><item><title>agents</title><description> Overview · Getting started · Features · Tools · Running code · CLI, API, embedding · Operating it · How it compares The idea In most agent frameworks an agent is a class you subclass and a pipeline is a function you deploy. Rewording a prompt means a commit, a review, and a release.
Here an agent is a row. Tools are still code. Everything else is data. Changing an agent is a save. The old version stays behind, and every run records which version produced it, what each step cost, and what each sub-agent said.</description><link>https://khtdr.com/agents/</link><guid>https://khtdr.com/agents/</guid><pubDate>Tue, 15 Sep 2026 00:00:00 -0600</pubDate><author>mazzarelli@gmail.com (Joey Mazzarelli)</author><category>Software</category><content:encoded>
&lt;![CDATA[
&lt;link rel="stylesheet" href="https://khtdr.com/css/agents.css" /&gt;
&lt;nav class="agents-nav"&gt;&lt;span class="here"&gt;Overview&lt;/span&gt; &lt;span aria-hidden="true"&gt;·&lt;/span&gt; &lt;a href="https://khtdr.com/agents/start"&gt;Getting started&lt;/a&gt; &lt;span aria-hidden="true"&gt;·&lt;/span&gt; &lt;a href="https://khtdr.com/agents/features"&gt;Features&lt;/a&gt; &lt;span aria-hidden="true"&gt;·&lt;/span&gt; &lt;a href="https://khtdr.com/agents/tools"&gt;Tools&lt;/a&gt; &lt;span aria-hidden="true"&gt;·&lt;/span&gt; &lt;a href="https://khtdr.com/agents/sandbox"&gt;Running code&lt;/a&gt; &lt;span aria-hidden="true"&gt;·&lt;/span&gt; &lt;a href="https://khtdr.com/agents/cli-api"&gt;CLI, API, embedding&lt;/a&gt; &lt;span aria-hidden="true"&gt;·&lt;/span&gt; &lt;a href="https://khtdr.com/agents/running"&gt;Operating it&lt;/a&gt; &lt;span aria-hidden="true"&gt;·&lt;/span&gt; &lt;a href="https://khtdr.com/agents/compare"&gt;How it compares&lt;/a&gt;&lt;/nav&gt;
&lt;h2 id="the-idea"&gt;The idea&lt;/h2&gt;
&lt;p&gt;In most agent frameworks an agent is a class you subclass and a pipeline is a
function you deploy. Rewording a prompt means a commit, a review, and a release.&lt;/p&gt;
&lt;p&gt;Here an agent is a row. Tools are still code. Everything else is data. Changing
an agent is a save. The old version stays behind, and every run records which
version produced it, what each step cost, and what each sub-agent said.&lt;/p&gt;
&lt;p&gt;That is the trade. You give up compile-time types on the agent definition. You
get something you can edit, version, replay, and A/B test without opening a repo.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @upship/agents
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;agent serve
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That serves the UI at &lt;code&gt;localhost:2137&lt;/code&gt;. The package is
&lt;a href="https://www.npmjs.com/package/@upship/agents"&gt;&lt;code&gt;@upship/agents&lt;/code&gt;&lt;/a&gt; on npm. You need
an OpenRouter key first, and the quickest way to get an agent is to let the CLI
build one by asking you questions. Both are in
&lt;a href="https://khtdr.com/agents/start"&gt;Getting started&lt;/a&gt;.&lt;/p&gt;
&lt;figure class="agents-shot"&gt;
&lt;img src="https://khtdr.com/img/agents/graph-composer.jpg" alt="The graph composer: a four-way conditional router drawn on a canvas, with a node inspector open on the right" /&gt;
&lt;figcaption&gt;A conditional router on the canvas. Drag from one handle to another to connect two steps. Click a node or an edge to edit it. The same picture shows the pipeline while it runs.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="start-here"&gt;Start here&lt;/h2&gt;
&lt;div class="agents-grid"&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;&lt;a href="https://khtdr.com/agents/start"&gt;Getting started&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;One key, one install, and an agent you built by answering questions. About five minutes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;&lt;a href="https://khtdr.com/agents/features"&gt;Features&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The full list, plus a tour of the screens. Pipelines, gates, debate, memory, cost tracking, versions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;&lt;a href="https://khtdr.com/agents/tools"&gt;Tools&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;What ships, how to call an HTTP API without writing code, and how to add a tool of your own.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;&lt;a href="https://khtdr.com/agents/sandbox"&gt;Running code&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;An agent can write a script and run it. Here is exactly how far the sandbox goes, and where it stops.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;&lt;a href="https://khtdr.com/agents/cli-api"&gt;CLI, API, embedding&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The browser is one client. There is also a CLI, an HTTP API, and a runtime you can import.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;&lt;a href="https://khtdr.com/agents/running"&gt;Operating it&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Ports, hosts, where the files live, moving to Postgres, and the things that go wrong.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;&lt;a href="https://khtdr.com/agents/compare"&gt;How it compares&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Against Flue and against Sapiom, including the parts where they win.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="what-you-can-build-with-it"&gt;What you can build with it&lt;/h2&gt;
&lt;div class="agents-grid"&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Research briefs&lt;/h4&gt;
&lt;p&gt;Search once. Send the results to an analyst and a fact-checker at the same time. Merge the two into one brief.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Support triage&lt;/h4&gt;
&lt;p&gt;A classifier reads the request and the pipeline picks one handler. The branches nobody took cost nothing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Deploy approvals&lt;/h4&gt;
&lt;p&gt;A pipeline stops to ask a person which environments to ship to, then picks up where it left off. Hours later is fine.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Draft and critique&lt;/h4&gt;
&lt;p&gt;A writer and a critic trade drafts until the critic signs off. Every draft and every critique is kept.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Incremental jobs&lt;/h4&gt;
&lt;p&gt;A daily digest that remembers where it stopped. Two overlapping runs will not process the same thing twice.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Number crunching&lt;/h4&gt;
&lt;p&gt;Hand it a spreadsheet and let it write the Python. Files the script leaves behind come back attached to the run.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Talking to your own API&lt;/h4&gt;
&lt;p&gt;Point a step at an internal service. The key stays in the encrypted store and the model never sees it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="agents-card"&gt;
&lt;h4&gt;Prompt A/B tests&lt;/h4&gt;
&lt;p&gt;Replay a past run against a different version or a different tool, then compare the two outputs side by side.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;nav class="agents-pager"&gt;
&lt;div class="prev"&gt;&lt;/div&gt;
&lt;div class="next"&gt;&lt;span class="label"&gt;Next&lt;/span&gt; &lt;a href="https://khtdr.com/agents/start"&gt;Getting started&lt;/a&gt;&lt;/div&gt;
&lt;/nav&gt;
]]&gt;</content:encoded></item></channel></rss>