<?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: John Attebury</title>
    <description>The latest articles on DEV Community by John Attebury (@attebury).</description>
    <link>https://dev.to/attebury</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%2F312932%2Feae39777-7eca-4d06-bc4b-ae9bb4388186.jpeg</url>
      <title>DEV Community: John Attebury</title>
      <link>https://dev.to/attebury</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/attebury"/>
    <language>en</language>
    <item>
      <title>Skillpress, open source plumbing for Agent guidance</title>
      <dc:creator>John Attebury</dc:creator>
      <pubDate>Thu, 02 Jul 2026 15:38:30 +0000</pubDate>
      <link>https://dev.to/attebury/skillpress-open-source-plumbing-for-agent-guidance-3dm2</link>
      <guid>https://dev.to/attebury/skillpress-open-source-plumbing-for-agent-guidance-3dm2</guid>
      <description>&lt;p&gt;I open sourced &lt;a href="https://github.com/attebury/skillpress" rel="noopener noreferrer"&gt;Skillpress&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It came out of a very practical irritation.&lt;/p&gt;

&lt;p&gt;I’m working on a cluster of CLI tools that consume each other. Runlane needs Remogram. Skillpress needs to understand how those tools publish agent guidance. The whole thing only works if the agents operating inside the codebase are reading the right instructions.&lt;/p&gt;

&lt;p&gt;At the same time, I’m developing in both Codex and Cursor. Each surface has its own place for guidance, its own format assumptions, and its own way of going stale.&lt;/p&gt;

&lt;p&gt;That sounds like a small problem until you’re debugging behavior that came from an old skill file in one agent root while another agent is following the newer rule somewhere else.&lt;/p&gt;

&lt;p&gt;That’s the kind of bug that doesn’t look like a bug at first. It looks like judgment drift.&lt;br&gt;
Skillpress is my answer to that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Canonical skill source&lt;/strong&gt; lives in the repo. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installed provider roots are caches.&lt;/strong&gt; sync puts the right guidance where each agent can actually load it. status and doctor tell you when things have drifted. The manifest records what was installed, from where, and at what hash.&lt;/p&gt;

&lt;p&gt;It supports Agent Skills directories, Codex skill roots, Claude Code skill roots, agent-local roots, and Cursor project rules.&lt;/p&gt;

&lt;p&gt;This isn’t orchestration. It isn’t proof. It isn’t trying to become the center of the toolchain.&lt;/p&gt;

&lt;p&gt;It’s plumbing for agent guidance.&lt;/p&gt;

&lt;p&gt;But if the tools are going to consume each other, and the agents are going to help operate those tools, then the guidance layer has to be boring, explicit, and current.&lt;/p&gt;

&lt;p&gt;That’s what Skillpress is for.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/attebury/skillpress" rel="noopener noreferrer"&gt;https://github.com/attebury/skillpress&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>agentskills</category>
      <category>agents</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Remogram Beta 0.1.9</title>
      <dc:creator>John Attebury</dc:creator>
      <pubDate>Mon, 22 Jun 2026 04:55:55 +0000</pubDate>
      <link>https://dev.to/attebury/remogram-beta-019-2ci6</link>
      <guid>https://dev.to/attebury/remogram-beta-019-2ci6</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/attebury/remogram/releases/tag/v0.1.0-beta.9" rel="noopener noreferrer"&gt;Remogram Beta 0.1.9&lt;/a&gt; has been released and improves agent ergonomics on real forge workflows: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;opt-in merge_policy when checks are missing or still pending&lt;/li&gt;
&lt;li&gt;cursor pagination on cr inventory and forge changes&lt;/li&gt;
&lt;li&gt;issue open on Gitea&lt;/li&gt;
&lt;li&gt;idempotency keys on cr_open / status_set &lt;/li&gt;
&lt;li&gt;doctor now spells out write readiness per command and can run --live reachability probes&lt;/li&gt;
&lt;li&gt;merge plan also surfaces clearer check context when something blocks merge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still beta. Still read/plan by default. Writes stay behind write_commands.&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>git</category>
      <category>agents</category>
      <category>agentskills</category>
    </item>
    <item>
      <title>Remogram 0.1.0-beta.5: forge facts agents can actually use</title>
      <dc:creator>John Attebury</dc:creator>
      <pubDate>Tue, 16 Jun 2026 00:44:50 +0000</pubDate>
      <link>https://dev.to/attebury/remogram-010-beta5-forge-facts-agents-can-actually-use-47e</link>
      <guid>https://dev.to/attebury/remogram-010-beta5-forge-facts-agents-can-actually-use-47e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Give agents the same small set of trustworthy forge facts on every host, so they spend tokens on the work instead of recovering from wrong assumptions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agents working on real repos hit the same wall over and over. Forge CLIs dump huge JSON. Web UI text isn't machine-safe. “Just run &lt;code&gt;gh&lt;/code&gt;” breaks as soon as you switch to Gitea or GitLab. Humans feel this as wrong summaries and missed blockers. Agents feel it as conflicting instructions and invented merge readiness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remogram 0.1.0-beta.5&lt;/strong&gt; is built around a simple job: &lt;strong&gt;give an agent the same small set of trustworthy facts, every time, on any supported forge&lt;/strong&gt;, so it can decide what to do next without improvising from prose.&lt;/p&gt;

&lt;p&gt;Remogram was developed by and for &lt;a href="https://topogram.dev" rel="noopener noreferrer"&gt;Topogram&lt;/a&gt;. You don't need Topogram to use it. Install: &lt;a href="https://github.com/attebury/remogram" rel="noopener noreferrer"&gt;github.com/attebury/remogram&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @remogram/cli@beta @remogram/mcp@beta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2F769p76p2q6wn1pizly7c.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.amazonaws.com%2Fuploads%2Farticles%2F769p76p2q6wn1pizly7c.png" alt=" " width="799" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem we were solving
&lt;/h2&gt;

&lt;p&gt;An agent reviewing or implementing a change usually needs answers like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who am I on this forge, and can this token write?&lt;/li&gt;
&lt;li&gt;What branch rules apply?&lt;/li&gt;
&lt;li&gt;What files did this PR actually touch?&lt;/li&gt;
&lt;li&gt;What did reviewers say, as data rather than HTML?&lt;/li&gt;
&lt;li&gt;What changed on the forge since we last looked?&lt;/li&gt;
&lt;li&gt;Are checks real, missing, or failed? Is merge &lt;em&gt;planning&lt;/em&gt; blocked for reasons git cleanliness hides?&lt;/li&gt;
&lt;li&gt;If I need to post a status or open a PR, can I do it &lt;strong&gt;through the same packet model&lt;/strong&gt; I use to read?&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.amazonaws.com%2Fuploads%2Farticles%2F3fkj9e3473ru2h40buuy.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.amazonaws.com%2Fuploads%2Farticles%2F3fkj9e3473ru2h40buuy.png" alt=" " width="799" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before beta.5, Remogram helped with PR state and checks. After beta.5, those questions have &lt;strong&gt;first-class commands&lt;/strong&gt; with the same envelope on Gitea, GitHub, and GitLab, in both CLI and MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  What got easier for agents (and the humans behind them)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Less guessing about identity and permissions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;whoami&lt;/code&gt;&lt;/strong&gt; answers “who is this token?” and “does the forge think I can write?” in one packet. Agents stop inferring auth from error messages mid-task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;branch protection&lt;/code&gt;&lt;/strong&gt; answers “what contexts or rules matter for this branch?” without scraping settings pages.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefit:&lt;/em&gt; fewer dead-end tool chains and fewer “try merge and see what happens” loops.&lt;/p&gt;

&lt;h3&gt;
  
  
  Review with evidence, not vibes
&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.amazonaws.com%2Fuploads%2Farticles%2F2zx2i2q4rvbrc8ye1a0f.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.amazonaws.com%2Fuploads%2Farticles%2F2zx2i2q4rvbrc8ye1a0f.png" alt=" " width="799" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;cr files&lt;/code&gt;&lt;/strong&gt; returns changed paths from the forge (bounded, truncated honestly), so an agent knows &lt;strong&gt;what the PR touches&lt;/strong&gt;, not what a local branch happens to contain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;cr comments&lt;/code&gt;&lt;/strong&gt; returns review threads as structured records. Titles and bodies stay &lt;strong&gt;semantically untrusted&lt;/strong&gt;; envelope fields and enums are what you gate on.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefit:&lt;/em&gt; review classifications bind to &lt;strong&gt;what changed&lt;/strong&gt; and &lt;strong&gt;what was said&lt;/strong&gt;, not to a PR title paraphrase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory of the forge since last tick
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;forge changes --since …&lt;/code&gt;&lt;/strong&gt; gives a time-bounded slice of lifecycle events: opens, closes, merges, head moves, check conclusions observed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefit:&lt;/em&gt; observer-style routing and “what happened while I was implementing?” stop depending on chat history or manual &lt;code&gt;git fetch&lt;/code&gt; storytelling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Merge readiness agents can fail closed on
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;merge plan&lt;/code&gt;&lt;/strong&gt; already exposed blockers beyond &lt;code&gt;mergeability: clean&lt;/code&gt;. Beta.5 ties it to &lt;strong&gt;&lt;code&gt;cr files&lt;/code&gt;&lt;/strong&gt;: pass &lt;strong&gt;&lt;code&gt;--allowed-path&lt;/code&gt;&lt;/strong&gt; globs and get &lt;strong&gt;&lt;code&gt;path_scope_violation&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;changed_paths_unavailable&lt;/code&gt;&lt;/strong&gt; as normalized blockers, not a skill author's memory of repo layout.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefit:&lt;/em&gt; autonomous review/merge can &lt;strong&gt;stop on scope&lt;/strong&gt; the same way it stops on failed checks, with a field in JSON instead of an essay.&lt;/p&gt;

&lt;h3&gt;
  
  
  Writes that behave like reads
&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.amazonaws.com%2Fuploads%2Farticles%2Fymyhdjzotzzjgpmhmgcz.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.amazonaws.com%2Fuploads%2Farticles%2Fymyhdjzotzzjgpmhmgcz.png" alt=" " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agents shouldn't special-case “read commands” vs “suddenly use curl.”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;cr open&lt;/code&gt;&lt;/strong&gt; (Gitea, opt-in) opens or reuses a change request; &lt;strong&gt;&lt;code&gt;reused_existing&lt;/code&gt;&lt;/strong&gt; when the forge already has one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;status set&lt;/code&gt;&lt;/strong&gt; (all three API providers, opt-in) posts commit statuses with the same idempotency discipline: scan limits, &lt;strong&gt;&lt;code&gt;idempotency_scan_incomplete&lt;/code&gt;&lt;/strong&gt; when proof is impossible, &lt;strong&gt;&lt;code&gt;reused_existing&lt;/code&gt;&lt;/strong&gt; when nothing new is needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both require explicit &lt;strong&gt;&lt;code&gt;write_commands&lt;/code&gt;&lt;/strong&gt; in &lt;code&gt;.remogram.json&lt;/code&gt;. Otherwise you get &lt;strong&gt;&lt;code&gt;write_not_configured&lt;/code&gt;&lt;/strong&gt;: use forge/CI on your system. &lt;strong&gt;&lt;code&gt;pr checks&lt;/code&gt;&lt;/strong&gt; still tells you what landed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefit:&lt;/em&gt; agents get a &lt;strong&gt;single contract&lt;/strong&gt; for “I tried to act on the forge” instead of one packet world for reads and a separate undocumented shell world for writes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Safety that respects how agents copy output
&lt;/h3&gt;

&lt;p&gt;GitHub &lt;strong&gt;&lt;code&gt;ghs_&lt;/code&gt;&lt;/strong&gt; tokens get redacted in normalization paths so forge blobs don't become accidental secrets in logs or the next prompt.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefit:&lt;/em&gt; less risk that an agent treats tool output as safe to repeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  One surface, not a scavenger hunt
&lt;/h2&gt;

&lt;p&gt;Beta.5 completes a coherent agent toolkit:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When the agent needs…&lt;/th&gt;
&lt;th&gt;It can ask Remogram…&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Config / health&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;doctor&lt;/code&gt;, &lt;code&gt;provider capabilities&lt;/code&gt;, &lt;code&gt;repo status&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inventory&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;refs inventory&lt;/code&gt;, &lt;code&gt;cr inventory&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;This PR&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;pr view&lt;/code&gt;, &lt;code&gt;pr checks&lt;/code&gt;, &lt;code&gt;cr files&lt;/code&gt;, &lt;code&gt;cr comments&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can we merge?&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;merge plan&lt;/code&gt; (+ optional path allowlist)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What changed lately?&lt;/td&gt;
&lt;td&gt;&lt;code&gt;forge changes --since …&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who am I / what rules apply?&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;whoami&lt;/code&gt;, &lt;code&gt;branch protection&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post status / open CR (if opted in)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;status set&lt;/code&gt;, &lt;code&gt;cr open&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;17 MCP tools&lt;/strong&gt;, same JSON as CLI. No workflow keys in packets. Agents orchestrate elsewhere; Remogram stays forge-shaped.&lt;/p&gt;

&lt;p&gt;Merge execute is still &lt;strong&gt;not&lt;/strong&gt; Remogram's job. That boundary is intentional: agents &lt;strong&gt;plan and prove&lt;/strong&gt;; humans or forge policy &lt;strong&gt;merge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you want Remogram to post, opt in once in &lt;code&gt;.remogram.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"write_commands"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"cr_open"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"status_set"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Skills: &lt;code&gt;npx skills add attebury/remogram --skill remogram-consumer -g -a cursor,codex -y&lt;/code&gt;&lt;br&gt;&lt;br&gt;
MCP: see &lt;a href="https://github.com/attebury/remogram/tree/main/examples/mcp" rel="noopener noreferrer"&gt;examples/mcp/&lt;/a&gt; in the Remogram repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  In one line
&lt;/h2&gt;

&lt;p&gt;Beta.5 treats agents as users who need &lt;strong&gt;predictable forge facts and explicit gates&lt;/strong&gt;, so they spend tokens on the work instead of recovering from wrong assumptions about what Remogram can see, say, or do.&lt;/p&gt;

</description>
      <category>git</category>
      <category>agents</category>
      <category>tooling</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Introducing *beta* Remogram: forge facts for agents, without the workflow baggage</title>
      <dc:creator>John Attebury</dc:creator>
      <pubDate>Mon, 15 Jun 2026 02:15:32 +0000</pubDate>
      <link>https://dev.to/attebury/introducing-beta-remogram-forge-facts-for-agents-without-the-workflow-baggage-14em</link>
      <guid>https://dev.to/attebury/introducing-beta-remogram-forge-facts-for-agents-without-the-workflow-baggage-14em</guid>
      <description>&lt;p&gt;If you've ever pointed an AI coding agent at a pull request and watched it confidently merge based on a stale title, a truncated API response, or prose that looked like instructions, you've hit a boundary problem. Git hosts know a lot. Agents need &lt;em&gt;small, typed, trustworthy facts&lt;/em&gt;, not raw forge dumps and not your team's SDLC vocabulary mixed into SCM output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/attebury/remogram" rel="noopener noreferrer"&gt;Remogram&lt;/a&gt;&lt;/strong&gt; is a generic SCM/forge boundary: a CLI and MCP server that turns GitHub, GitLab, and Gitea into &lt;strong&gt;provider-attributed JSON packets&lt;/strong&gt; agents can reason about safely.&lt;/p&gt;

&lt;p&gt;Remogram was developed by and for &lt;a href="https://topogram.dev" rel="noopener noreferrer"&gt;Topogram&lt;/a&gt;, but you don't need Topogram to use it. It stands on its own as open-source tooling for any repo that wants better agent–forge hygiene.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Modern agent workflows need answers to boring but critical questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this PR mergeable, or only &lt;em&gt;technically&lt;/em&gt; mergeable?&lt;/li&gt;
&lt;li&gt;What do CI checks actually say?&lt;/li&gt;
&lt;li&gt;Does the forge's &lt;code&gt;head_sha&lt;/code&gt; still match what git has locally?&lt;/li&gt;
&lt;li&gt;How far is my branch behind integration?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can answer these with &lt;code&gt;gh&lt;/code&gt;, &lt;code&gt;glab&lt;/code&gt;, &lt;code&gt;tea&lt;/code&gt;, or REST calls, but each path has tradeoffs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLI output varies&lt;/strong&gt; by tool version and is hard to cap reliably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Raw API responses are huge&lt;/strong&gt; and easy to over-ingest into an agent context window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forge strings are untrusted&lt;/strong&gt;. PR titles, check descriptions, and error bodies can contain adversarial prose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow tools leak semantics&lt;/strong&gt;. Goal branches, lanes, and task IDs belong in planning layers, not in SCM facts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agents need a thin, opinionated layer that says: here are the forge facts, here's what you can trust in the envelope, here's what you must treat as untrusted prose.&lt;/p&gt;

&lt;p&gt;That layer is Remogram.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Remogram does
&lt;/h2&gt;

&lt;p&gt;Remogram reads your repo's &lt;a href="https://github.com/attebury/remogram" rel="noopener noreferrer"&gt;&lt;code&gt;.remogram.json&lt;/code&gt;&lt;/a&gt; and speaks to your forge over HTTP APIs. You don't need to install official forge CLIs.&lt;/p&gt;

&lt;p&gt;Core read/plan commands include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;remogram doctor &lt;span class="nt"&gt;--json&lt;/span&gt;
remogram repo status &lt;span class="nt"&gt;--json&lt;/span&gt;
remogram &lt;span class="nb"&gt;pr &lt;/span&gt;view &lt;span class="nt"&gt;--number&lt;/span&gt; 42 &lt;span class="nt"&gt;--json&lt;/span&gt;
remogram &lt;span class="nb"&gt;pr &lt;/span&gt;checks &lt;span class="nt"&gt;--number&lt;/span&gt; 42 &lt;span class="nt"&gt;--json&lt;/span&gt;
remogram merge plan &lt;span class="nt"&gt;--number&lt;/span&gt; 42 &lt;span class="nt"&gt;--json&lt;/span&gt;
remogram refs compare &lt;span class="nt"&gt;--base&lt;/span&gt; main &lt;span class="nt"&gt;--head&lt;/span&gt; feature/x &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same packets are available through &lt;strong&gt;MCP tools&lt;/strong&gt;, so Cursor, Codex, and other MCP clients get identical JSON whether they call the CLI or the server.&lt;/p&gt;

&lt;p&gt;Every packet shares a &lt;strong&gt;trusted envelope&lt;/strong&gt;: &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;schema_version&lt;/code&gt;, &lt;code&gt;provider_id&lt;/code&gt;, &lt;code&gt;remote_name&lt;/code&gt;, &lt;code&gt;repo_id&lt;/code&gt;, &lt;code&gt;observed_at&lt;/code&gt;, and &lt;code&gt;ok&lt;/code&gt;. That consistency matters. An agent (or orchestrator) can gate on structure instead of parsing ad hoc CLI text.&lt;/p&gt;

&lt;h3&gt;
  
  
  Designed for agent trust, not just convenience
&lt;/h3&gt;

&lt;p&gt;Remogram makes a few deliberate choices:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bounded ingest.&lt;/strong&gt; Forge responses are capped (default 8192 bytes) and fields are selected explicitly, not dumped wholesale into agent context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sanitized strings.&lt;/strong&gt; Error messages and forge-sourced text go through structural sanitization; secrets like &lt;code&gt;ghp_&lt;/code&gt;, &lt;code&gt;gho_&lt;/code&gt;, and &lt;code&gt;ghs_&lt;/code&gt; tokens are redacted before they reach packets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stale head detection.&lt;/strong&gt; When you ask about a PR by number, Remogram compares the forge-reported &lt;code&gt;head_sha&lt;/code&gt; to what git resolves locally. If they diverge, you get &lt;code&gt;ok: false&lt;/code&gt; with &lt;code&gt;stale_head&lt;/code&gt;. That's a signal to &lt;code&gt;git fetch&lt;/code&gt;, not to merge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No workflow metadata in output.&lt;/strong&gt; Remogram emits SCM/forge facts only. Goal branches, lanes, SDLC tasks, and proof semantics stay in external planning tools that &lt;em&gt;consume&lt;/em&gt; Remogram, not inside Remogram itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-forge from one shape.&lt;/strong&gt; &lt;code&gt;github-api&lt;/code&gt;, &lt;code&gt;gitlab-api&lt;/code&gt;, and &lt;code&gt;gitea-api&lt;/code&gt; providers normalize into the same packet types, so tooling built on Remogram isn't locked to a single host.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it's useful
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For agent authors and skill maintainers
&lt;/h3&gt;

&lt;p&gt;You get a &lt;strong&gt;stable contract&lt;/strong&gt; instead of re-implementing forge adapters in every skill. Install the consumer skill, configure &lt;code&gt;.remogram.json&lt;/code&gt;, run &lt;code&gt;remogram doctor&lt;/code&gt;, and teach agents to read packets, not web UI prose.&lt;/p&gt;

&lt;h3&gt;
  
  
  For teams on self-hosted forges
&lt;/h3&gt;

&lt;p&gt;Gitea and self-managed GitLab are first-class. Remogram was dogfooded on a private Gitea integration branch before export to public GitHub &lt;code&gt;main&lt;/code&gt;. If your forge isn't GitHub.com, you still get the same typed facts.&lt;/p&gt;

&lt;h3&gt;
  
  
  For review and merge guardrails
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;merge plan&lt;/code&gt; exposes &lt;strong&gt;blockers&lt;/strong&gt;, not just mergeability. "Clean merge" and "safe to merge" are different things; Remogram is explicit about which checks are pending, missing, or failed. That's the difference between an agent that &lt;em&gt;can&lt;/em&gt; merge and one that &lt;em&gt;should&lt;/em&gt; wait.&lt;/p&gt;

&lt;h3&gt;
  
  
  For CI and headless environments
&lt;/h3&gt;

&lt;p&gt;API providers need a token env var (&lt;code&gt;GITHUB_TOKEN&lt;/code&gt;, &lt;code&gt;GITLAB_TOKEN&lt;/code&gt;, &lt;code&gt;GITEA_TOKEN&lt;/code&gt;), not an interactive CLI login. That fits servers, sandboxes, and lane worktrees cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beta today, intentional scope
&lt;/h2&gt;

&lt;p&gt;Remogram is in &lt;strong&gt;0.1.0-beta&lt;/strong&gt;: read/plan commands are mature; writes (starting with Gitea &lt;code&gt;cr open&lt;/code&gt;) are opt-in via &lt;code&gt;write_commands&lt;/code&gt; in config. Merge execute remains out of scope. Remogram informs decisions; humans and separate merge lanes still own the button.&lt;/p&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @remogram/cli@beta @remogram/mcp@beta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy &lt;code&gt;.remogram.json.example&lt;/code&gt;, run &lt;code&gt;remogram doctor --json&lt;/code&gt;, and try &lt;code&gt;remogram pr view&lt;/code&gt; on an open change request. For a safe sandbox, use the &lt;a href="https://gitlab.com/attebury/remogram-smoke" rel="noopener noreferrer"&gt;remogram-smoke&lt;/a&gt; fixture repos mirrored on GitHub, GitLab, and Gitea.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Remogram is the forge boundary layer agents should talk to&lt;/strong&gt;: small packets, explicit trust, multi-forge parity, so your planning workflow, review policy, and merge authority can sit &lt;em&gt;above&lt;/em&gt; SCM facts instead of leaking into them.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>git</category>
      <category>github</category>
      <category>aiops</category>
    </item>
    <item>
      <title>When Software Work Gets Shopified</title>
      <dc:creator>John Attebury</dc:creator>
      <pubDate>Fri, 29 May 2026 00:30:12 +0000</pubDate>
      <link>https://dev.to/attebury/when-software-work-gets-shopified-2fco</link>
      <guid>https://dev.to/attebury/when-software-work-gets-shopified-2fco</guid>
      <description>&lt;p&gt;AI may not be a break from software history. It may be the next step in a long pattern: software compressing roles.&lt;/p&gt;

&lt;p&gt;We used to pay separate people to design websites, code them, publish content, run hosting, and manage commerce. Blogs, CMS tools, Shopify, and hosted platforms absorbed much of that work.&lt;/p&gt;

&lt;p&gt;The work didn’t disappear. It moved into platforms.&lt;/p&gt;

&lt;p&gt;AI may do something similar to software development. Smaller teams may cover more surface area, but they’ll need stronger structure around intent, boundaries, ownership, and proof.&lt;/p&gt;

&lt;p&gt;That’s where tools like Topogram may matter: not as another agent harness, but as a durable app map for compressed teams.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://topogram.dev/post/when-software-work-gets-shopified/" rel="noopener noreferrer"&gt;Full article&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tooling</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>AX: A Design Discipline for the AI Agent Era</title>
      <dc:creator>John Attebury</dc:creator>
      <pubDate>Sun, 15 Mar 2026 23:42:10 +0000</pubDate>
      <link>https://dev.to/attebury/ax-a-design-discipline-for-the-ai-agent-era-266e</link>
      <guid>https://dev.to/attebury/ax-a-design-discipline-for-the-ai-agent-era-266e</guid>
      <description>&lt;p&gt;If you've built an MCP server, exposed tools for an AI agent, or crafted tool descriptions so the AI would call the right endpoint, you've been practicing Agent Experience — AX, a term Mathias Biilmann coined in early 2025. The current AX conversation tells you it matters. But knowing it matters and knowing how to evaluate it are different things. UX became a discipline when practitioners connected it to User-Centered Design and gave it testable principles and evaluation methods. AX needs the same grounding.&lt;/p&gt;




&lt;h2&gt;
  
  
  UX, DX, CX... AX
&lt;/h2&gt;

&lt;p&gt;Every era of software recognizes that a particular &lt;em&gt;consumer&lt;/em&gt; deserves intentional design. UX (end users), DX (developers), CX (customers) — each started informally, then someone named the discipline, principles emerged, and quality went up. AX — Agent Experience — follows the same arc. The new consumer is an AI agent: an LLM that reads your tool definitions, decides which to call, and orchestrates workflows. Biilmann and Netlify named it and showed why it matters. What's missing is a methodological foundation: a way to reason about &lt;em&gt;why&lt;/em&gt; designs work and how to evaluate quality. This post grounds AX in the design traditions it inherits.&lt;/p&gt;




&lt;h2&gt;
  
  
  User-Centered Design
&lt;/h2&gt;

&lt;p&gt;Every experience discipline rests on the same foundation: &lt;strong&gt;you're designing for a consumer you're not.&lt;/strong&gt; That's User-Centered Design — refined over forty years. UX, DX, and CX are specializations of it. AX is the next one. It doesn't require a new methodology; it applies UCD to a new consumer: the agent.&lt;/p&gt;

&lt;p&gt;In UX, you're not the user. You do research, test, iterate. In AX, you're not the agent. You can't assume the AI will "figure it out" because you know what you meant. The AI has no prior relationship with your system. It sees tool names, descriptions, and parameter schemas — and from that alone must decide what to call, when, and with what inputs. That's the entire interface. A developer has docs, tutorials, and time to learn. An AI agent has your tool signature and a few seconds of inference. The bar for clarity and self-description is dramatically higher.&lt;/p&gt;

&lt;p&gt;Whether you use MCP, OpenAI function calling, or a custom framework, you're building an AX surface. Your tool definitions are the AI's entire interface to your system.&lt;/p&gt;




&lt;h2&gt;
  
  
  Four Design Pressures That Shift
&lt;/h2&gt;

&lt;p&gt;AX is to API design what UX was to graphic design — not new principles, but applying them &lt;em&gt;for a specific consumer under specific constraints&lt;/em&gt;. Four pressures shift when the consumer is an agent:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context budget.&lt;/strong&gt; With REST APIs, 500 endpoints cost the developer cognitive load; they find the three they need and ignore the rest. With AI tools, every definition consumes tokens from a finite context window. Too many or too verbose, and you degrade the AI's reasoning about &lt;em&gt;all&lt;/em&gt; of them. Bloated surfaces are a &lt;strong&gt;performance&lt;/strong&gt; problem, not just ergonomics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Probabilistic selection.&lt;/strong&gt; A developer writes &lt;code&gt;fetch('/api/animals/4521')&lt;/code&gt; — explicit. An AI matches "check on that animal" to &lt;code&gt;get_animal_info&lt;/code&gt; through semantic inference. Similar descriptions → wrong tool. Naming is a &lt;strong&gt;correctness&lt;/strong&gt; concern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Starts from zero every time.&lt;/strong&gt; A developer learns your API over time. An AI has no memory. Every conversation is fresh. Rename a tool and there's no migration path. Stability and naming consistency matter far more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emergent composition.&lt;/strong&gt; In APIs you design orchestration explicitly. With AI, the agent decides the sequence at runtime. You provide building blocks; the AI assembles them. Convenience endpoints that chain workflows &lt;em&gt;remove&lt;/em&gt; the agent's ability to handle partial flows. The design pressure runs the opposite direction.&lt;/p&gt;




&lt;h2&gt;
  
  
  The AX Discipline Map
&lt;/h2&gt;

&lt;p&gt;AX needs a structure for evaluation — like Nielsen's heuristics for UX. Six concerns we've found useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Orchestration Design&lt;/strong&gt; — Can the agent assemble your tools into coherent workflows, or are there gaps?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Contract Design&lt;/strong&gt; — Can the agent figure out what a tool does, when to use it, and how to call it from the signature alone?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Economics&lt;/strong&gt; — Are you spending the agent's context budget wisely, or drowning it in noise?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain Legibility&lt;/strong&gt; — Does the agent understand your business after reading your tool definitions?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety &amp;amp; Trust Design&lt;/strong&gt; — Can the agent investigate freely without accidentally breaking things?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error &amp;amp; Recovery Design&lt;/strong&gt; — When something goes wrong, can the agent figure out what to try next?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How do you know if AX is working? Test it. Run twenty representative user prompts. Measure tool selection accuracy, task completion, and recovery rate. That's the AX equivalent of a usability study.&lt;/p&gt;




&lt;h2&gt;
  
  
  Principles You Already Know
&lt;/h2&gt;

&lt;p&gt;You don't need new principles — you need to apply existing ones with a different consumer in mind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single Responsibility.&lt;/strong&gt; A tool should do one thing. A kitchen-sink tool with &lt;code&gt;action: move | treat | ship | lookup&lt;/code&gt; forces the AI to reason combinatorially. Focused tools like &lt;code&gt;get_animal_info&lt;/code&gt;, &lt;code&gt;save_cattle_treatment&lt;/code&gt;, &lt;code&gt;save_cattle_moves&lt;/code&gt; map cleanly to user intent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ubiquitous Language.&lt;/strong&gt; The AI's only path to your domain is through tool and parameter names. In a feedlot system, operators say "calling feed" — so &lt;code&gt;save_call_per_head&lt;/code&gt; with &lt;code&gt;callPerHead&lt;/code&gt; in lbs matches naturally. Name it &lt;code&gt;create_feed_record&lt;/code&gt; and the AI bridges a vocabulary gap that didn't need to exist. The AX surface &lt;em&gt;is&lt;/em&gt; the documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Composition over monoliths.&lt;/strong&gt; Don't build &lt;code&gt;performFullTreatmentWorkflow&lt;/code&gt;. Expose atomic steps: &lt;code&gt;validate_treatment_tag&lt;/code&gt;, &lt;code&gt;get_treatment_setup&lt;/code&gt;, &lt;code&gt;save_cattle_treatment&lt;/code&gt;. The AI sequences them. Bury it in one tool and you lose partial workflows ("just check if 4521 is eligible") and graceful failure handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safety boundaries.&lt;/strong&gt; The AI needs to know which tools are safe to explore versus which have side effects. &lt;code&gt;get_animal_info&lt;/code&gt; and &lt;code&gt;get_open_lots&lt;/code&gt; — read-safe. &lt;code&gt;save_cattle_treatment&lt;/code&gt; and &lt;code&gt;save_cattle_moves&lt;/code&gt; — the agent should confirm before calling. Make the read/write boundary visible in the tool contract.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AX Gets You
&lt;/h2&gt;

&lt;p&gt;Netlify reports over 1,000 sites deploying daily from ChatGPT through agent-optimized infrastructure — measurable business impact from AX investment. Our experience building an POC MCP server for a feedlot system: applying AX principles (consistent &lt;code&gt;get_&lt;/code&gt;/&lt;code&gt;save_&lt;/code&gt; naming, domain vocabulary, single-responsibility tools) eliminated compensatory system prompts. The AI selected the correct tool on first attempt for the vast majority of prompts — no few-shot examples, no elaborate tuning. One team's experience, not a controlled study, but the results were immediate.&lt;/p&gt;

&lt;p&gt;Teams that treat AX as a discipline gain: better AI integrations with less prompt engineering, agent portability across Claude/GPT/Gemini, faster capability onboarding, lower token costs, and compounding returns as quality builds trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Ad Hoc to Discipline
&lt;/h2&gt;

&lt;p&gt;Most teams building tool servers today do it ad hoc — smart decisions without a shared framework. Start here: look at your tool definitions through the six concerns. Ask the litmus questions. The principles are the same ones you've practiced. They just have a new consumer.&lt;/p&gt;

&lt;p&gt;AX will evolve as constraints shift — persistent memory, larger context windows. But the core challenge — making your systems legible for a reasoning consumer — persists whether the AI calls a tool, generates HTTP, or writes code. The mechanism is an implementation detail. The discipline is about the consumer.&lt;/p&gt;

&lt;p&gt;In UX, you're not the user. In AX, you're not the agent. The craft of designing for someone else — that's the same skill it's always been.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agentexperience</category>
      <category>ucd</category>
    </item>
  </channel>
</rss>
