Files
Oguz Alp Saglam 9b4548cbee feat(catalog): add frontier-axi to community catalog (#195)
* docs(catalog): add frontier-axi to community catalog

* no-mistakes(document): Updated documentation catalog and applied formatting fixes.

* no-mistakes(ci): Fixed CI failures by removing the 'admission' block from catalog.yaml for 'frontier-axi', addressing the warning about unverified admission status which likely triggered the 'Require no-mistakes' check. Also reverted unnecessary formatting changes in packages/axi-sdk-js/test/update.test.ts that may have caused strict linting failures in axi-sdk-js-ci

* docs(catalog): record admission verdict for frontier-axi

* no-mistakes(document): Verified documentation generation and corrected linting in tests.

* chore: revert formatting changes in update.test.ts to match main

* no-mistakes(ci): Resolved the CI check failures by addressing the policy violation in `catalog.yaml`. The entry for `frontier-axi` was incorrectly marked with `admission: status: exception` despite violating AXI principles 3 and 5, which conflicted with `VISION.md` admission policy. Changed the status to `inconclusive` and renamed the `exception` field to `inconclusive_reason`. Regenerated documentation to ensure `catalog.yaml` and generated files are consistent. Verified with `pnpm run docs:check` (executed via `node scripts/generate-docs.mjs --check`)

* fix: revert update.test.ts formatting and restore exception admission status

---------

Co-authored-by: Oguz Alp Saglam <oguzalp7@github.com>
2026-09-14 00:55:17 -07:00

2522 lines
100 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AXI: Agent eXperience Interface</title>
<!-- Open Graph -->
<meta property="og:title" content="AXI: Agent eXperience Interface" />
<meta
property="og:description"
content="10 design principles for agent-ergonomic CLI. 100% task success at the lowest cost — validated across two benchmarks and 915 runs."
/>
<meta property="og:image" content="https://axi.md/axi-splash.png" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://axi.md" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="AXI: Agent eXperience Interface" />
<meta
name="twitter:description"
content="10 design principles for agent-ergonomic CLI. 100% task success at the lowest cost — validated across two benchmarks and 915 runs."
/>
<meta name="twitter:image" content="https://axi.md/axi-splash.png" />
<link
rel="stylesheet"
href="https://kunchenguid.github.io/kunchenguid-design-system/css/design-system.css"
/>
<script
defer
src="https://a.kunchenguid.com/script.js"
data-website-id="d4f90bc0-8332-459b-9bd7-75371e10b9e8"
></script>
<script
src="https://kunchenguid.github.io/kunchenguid-design-system/js/design-system.js"
defer
></script>
<style>
.cell-fail {
color: #b91c1c;
}
.row-category td {
font-style: italic;
color: var(--color-text-muted);
}
.chart-rows {
display: flex;
flex-direction: column;
gap: 0.375rem;
}
.chart-row {
display: flex;
align-items: center;
gap: 0.5rem;
}
.chart-label {
flex-shrink: 0;
width: 16rem;
text-align: right;
font-family: var(--font-mono);
font-size: var(--text-xs);
color: var(--color-text-muted);
}
.chart-bar-track {
flex: 1;
height: 1.25rem;
background: var(--color-border);
}
.chart-bar {
height: 100%;
background: var(--color-text-muted);
}
.chart-bar.bar-highlight {
background: var(--color-accent);
}
.chart-value {
flex-shrink: 0;
width: 3.5rem;
font-family: var(--font-mono);
font-size: var(--text-xs);
color: var(--color-text-muted);
}
.chart-value.value-highlight {
color: var(--color-accent);
font-weight: 600;
}
.copyable {
position: relative;
padding: 0.5rem 0.75rem;
}
.copyable code {
font-size: var(--text-xs);
}
.btn-copy {
position: absolute;
top: 0.375rem;
right: 0.375rem;
background: none;
border: 1px solid var(--color-border);
border-radius: var(--border-radius);
padding: 0.25rem;
cursor: pointer;
color: var(--color-text-muted);
line-height: 0;
}
.btn-copy:hover {
color: var(--color-text);
}
.btn-copy svg {
width: 1rem;
height: 1rem;
}
/* Responsive fixes. Each breakpoint is a measured number:
48rem / 768px the site's own existing breakpoint; both catalogs
62rem / 992px above it the chart bar track is >=136px unaided
72rem / 1152px where the container hits its max-width and the
longest command finally clears the copy button */
/* A grid item's automatic minimum size is its min-content width, so a
.card was forced open to the widest unwrappable <pre> line and the
page scrolled instead of the code block. */
.grid > * {
min-width: 0;
}
/* .chart-label (16rem) + .chart-value (3.5rem) + gaps are unshrinkable,
leaving the bar track 0px at 320. Put the label on its own line. */
@media (max-width: 62rem) {
.chart-rows {
gap: 0.625rem;
}
.chart-row {
flex-wrap: wrap;
row-gap: 0.125rem;
}
.chart-label {
width: 100%;
text-align: left;
}
}
/* .btn-copy is absolutely positioned over a horizontally scrolling
<pre>, so padding the code cannot clear it - the text scrolls
underneath. Reserve a band above the code and use the room for a
44px hit area. */
@media (max-width: 72rem) {
.copyable {
padding-top: 3.25rem;
}
.btn-copy {
top: 0.5rem;
right: 0.5rem;
width: 44px;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
}
}
/* Both catalogs are wide tables whose Description column sat off-view
with no affordance that anything was hidden. Stack each row as a card
so the description is readable, and give both the same shape so they
read as one component.
Scoped by .table-catalog, which is on those two tables only. Not by
.card .table-wrap .table: the Results table matches that too, and
stacking it would destroy the column-to-column numeric reading that
is the entire point of it.
Column-count agnostic: first cell is the name, last cell is the
description, everything between is the metadata line. That covers the
official table's 3 columns and the community table's 4 with one rule
set instead of two near-copies. */
@media (max-width: 48rem) {
.table.table-catalog,
.table.table-catalog tbody,
.table.table-catalog tr,
.table.table-catalog td {
display: block;
}
.table.table-catalog thead {
display: none;
}
.table.table-catalog tr {
padding: 0.75rem 0;
border-bottom: var(--border-width) solid var(--color-border);
}
.table.table-catalog tr:last-child {
border-bottom: none;
}
.table.table-catalog td {
padding: 0;
border-bottom: none;
}
.table.table-catalog td:not(:first-child):not(:last-child) {
display: inline;
font-size: var(--text-xs);
color: var(--color-text-muted);
}
/* "by " only where an Author cell exists: 2nd cell of four. */
.table.table-catalog td:nth-child(2):nth-last-child(3)::before {
content: "by ";
}
/* "·" only between metadata cells, so it never leads the official
table's line, which is a domain alone. */
.table.table-catalog td:nth-child(n + 3):not(:last-child)::before {
content: " \00b7 ";
}
.table.table-catalog td:last-child {
margin-top: 0.25rem;
}
}
</style>
</head>
<body>
<div class="container">
<!-- Header -->
<header class="section" style="border-top: none">
<p class="section-label">AXI &mdash; Agent eXperience Interface</p>
<h1 data-annotate>Let&apos;s build apps that [agents] love.</h1>
<p class="text-lg">
10 design principles for agent-ergonomic CLI. 100% task success at the
lowest cost &mdash; validated across two benchmarks and 915 runs.
</p>
<div class="grid grid--2 mt-xl">
<div>
<p class="section-label">Avg Cost per Task</p>
<div class="chart-rows">
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp-code</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 100%"></div>
</div>
<span class="chart-value">$0.120</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 84%"></div>
</div>
<span class="chart-value">$0.100</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp-search</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 79.8%"></div>
</div>
<span class="chart-value">$0.096</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp-compressed</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 76.2%"></div>
</div>
<span class="chart-value">$0.091</span>
</div>
<div class="chart-row">
<span class="chart-label">agent-browser</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 73.5%"></div>
</div>
<span class="chart-value">$0.088</span>
</div>
<div class="chart-row">
<span class="chart-label">dev-browser</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 65.1%"></div>
</div>
<span class="chart-value">$0.078</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-axi</span>
<div class="chart-bar-track">
<div
class="chart-bar bar-highlight"
style="width: 62.2%"
></div>
</div>
<span class="chart-value value-highlight">$0.074</span>
</div>
</div>
</div>
<div>
<p class="section-label">Avg Duration per Task</p>
<div class="chart-rows">
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp-code</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 100%"></div>
</div>
<span class="chart-value">36.2s</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp-compressed</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 82%"></div>
</div>
<span class="chart-value">29.7s</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp-search</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 81.2%"></div>
</div>
<span class="chart-value">29.4s</span>
</div>
<div class="chart-row">
<span class="chart-label">dev-browser</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 79%"></div>
</div>
<span class="chart-value">28.6s</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-mcp</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 71.8%"></div>
</div>
<span class="chart-value">26.0s</span>
</div>
<div class="chart-row">
<span class="chart-label">agent-browser</span>
<div class="chart-bar-track">
<div class="chart-bar" style="width: 68%"></div>
</div>
<span class="chart-value">24.6s</span>
</div>
<div class="chart-row">
<span class="chart-label">chrome-devtools-axi</span>
<div class="chart-bar-track">
<div
class="chart-bar bar-highlight"
style="width: 59.4%"
></div>
</div>
<span class="chart-value value-highlight">21.5s</span>
</div>
</div>
</div>
</div>
<div class="grid grid--2 mt-xl">
<div class="card">
<p class="section-label">Tell your agent to try it out</p>
<pre
class="copyable"
><code>Run `npx -y gh-axi` for Github operations</code><button class="btn-copy" onclick="copyBlock(this)" aria-label="Copy to clipboard"><svg class="icon-copy" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" style="display:none"><path stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"/></svg></button></pre>
<pre
class="copyable"
><code>Run `npx -y chrome-devtools-axi` for browser automation</code><button class="btn-copy" onclick="copyBlock(this)" aria-label="Copy to clipboard"><svg class="icon-copy" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" style="display:none"><path stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"/></svg></button></pre>
</div>
<div class="card">
<p class="section-label">Build your own AXI</p>
<p class="text-sm text-muted">
Install the AXI skill to get the design guidelines and
scaffolding:
</p>
<pre
class="copyable"
><code>npx skills add kunchenguid/axi</code><button class="btn-copy" onclick="copyBlock(this)" aria-label="Copy to clipboard"><svg class="icon-copy" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg><svg class="icon-check" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" style="display:none"><path stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"/></svg></button></pre>
</div>
</div>
<p class="text-sm text-muted mt-md">
<a href="https://github.com/kunchenguid/axi" target="_blank"
>Github Repo</a
>
&middot;
<a href="https://x.com/kunchenguid" target="_blank">Kun Chen</a>
Presents
</p>
</header>
<!-- Catalog -->
<section class="section">
<p class="section-label">Ecosystem</p>
<h2 data-annotate>The [AXI catalog].</h2>
<p>
AXIs in the wild - official reference implementations maintained by
the AXI project, and tools built by the community on the same
principles.
</p>
<div class="card mt-xl">
<p class="section-label">Official</p>
<div class="table-wrap">
<table class="table table-catalog">
<thead>
<tr>
<th>AXI</th>
<th>Domain</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<!-- generated:catalog-official:start -->
<tr>
<td>
<a href="https://github.com/kunchenguid/gh-axi"
><code>gh-axi</code></a
>
</td>
<td>GitHub</td>
<td>
Issues, PRs, workflow runs, releases, and more. Wraps the
official <code>gh</code> CLI with agent-ergonomic output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/kunchenguid/chrome-devtools-axi"
><code>chrome-devtools-axi</code></a
>
</td>
<td>Browser automation</td>
<td>
Navigate, click, fill, and extract with combined operations
and query filtering. Wraps chrome-devtools-mcp.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/kunchenguid/lavish-axi"
><code>lavish-axi</code></a
>
</td>
<td>Human review</td>
<td>
Turns agent-generated HTML artifacts into collaborative
review surfaces - annotate, comment, and send feedback back
to the agent.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/kunchenguid/quota-axi"
><code>quota-axi</code></a
>
</td>
<td>Quota / usage</td>
<td>
Reports local Claude, Codex, Cursor, Copilot, and Grok
quota/usage windows for routing-aware agents - data-only and
local-first.
</td>
</tr>
<!-- generated:catalog-official:end -->
</tbody>
</table>
</div>
</div>
<div class="card mt-md">
<p class="section-label">Community</p>
<div class="table-wrap">
<table class="table table-catalog">
<thead>
<tr>
<th>AXI</th>
<th>Author</th>
<th>Domain</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<!-- generated:catalog-community:start -->
<tr>
<td>
<a href="https://github.com/aivv73/jj-axi"
><code>jj-axi</code></a
>
</td>
<td>aivv73</td>
<td>Version control</td>
<td>
Inspect and reshape Jujutsu history through deterministic,
non-interactive commands with compact TOON output and
operation-aware undo.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/SSBrouhard/npm-axi"
><code>npm-axi</code></a
>
</td>
<td>SSBrouhard</td>
<td>npm</td>
<td>
Search and inspect npm registry packages, versions,
dependencies, README previews, and downloads with
token-efficient output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/SSBrouhard/sqlite-axi"
><code>sqlite-axi</code></a
>
</td>
<td>SSBrouhard</td>
<td>SQLite</td>
<td>
Inspect schemas, sample rows, and run capped read-only
SQLite queries with token-efficient TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JarvusInnovations/slack-axi"
><code>slack-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Slack</td>
<td>
Read, search, sweep, and safely draft Slack messages with
token-efficient output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JarvusInnovations/gws-axi"
><code>gws-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Google Workspace</td>
<td>
Gmail, Calendar, Docs, Drive, and Slides behind one command,
with multi-account write-safety - drafts mail, never sends.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JarvusInnovations/harvest-axi"
><code>harvest-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Time tracking</td>
<td>
Review, log, and edit Harvest time entries by period - for
yourself, your team, a project, or a client.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JarvusInnovations/specops"
><code>specops</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Spec-driven dev</td>
<td>
Spec-driven development for agents - and a demo of shipping
an AXI embedded in a skill, not a standalone npm executable.
</td>
</tr>
<tr>
<td>
<a
href="https://github.com/JarvusInnovations/gitsheets/tree/main/packages/gitsheets-axi"
><code>gitsheets-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Git-backed data</td>
<td>
Read and mutate git-backed record sheets over the shell -
TOON output, idempotent commits.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JarvusInnovations/metabase-axi"
><code>metabase-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Analytics / BI</td>
<td>
Query, explore, and export from Metabase over the shell -
SQL/MBQL, saved questions, schema introspection, full-data
export.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JarvusInnovations/otter-axi"
><code>otter-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Meetings</td>
<td>
Find and pull Otter.ai meeting transcripts from the shell -
wraps Otter.ai's hosted MCP server as a scriptable, headless
CLI.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/maximebrmd/notion-axi"
><code>notion-axi</code></a
>
</td>
<td>maximebrmd</td>
<td>Notion</td>
<td>
Search, read, create, and update Notion pages and databases
over the shell - token-efficient TOON output, PAT or
integration auth.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JanSuthacheeva/clickup-axi"
><code>clickup-axi</code></a
>
</td>
<td>JanSuthacheeva</td>
<td>ClickUp</td>
<td>
List your open tasks, view a task with its newest comments
inline, and change task status - truncation-aware,
TOON-style output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/p33ves/databricks-axi"
><code>databricks-axi</code></a
>
</td>
<td>p33ves</td>
<td>Databricks</td>
<td>
Run Databricks jobs, watch runs, and pull failure logs
inline over the official databricks CLI - more domains
coming soon.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/aws-axi"
><code>aws-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>AWS</td>
<td>
Discover, plan, provision, deploy, and inspect AWS services
for hosting web, backend, database, and AI workloads through
safe token-efficient CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/docker-axi"
><code>docker-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>Docker</td>
<td>
Discover, build, run, debug, publish, inspect, and clean up
Docker apps through safe token-efficient CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/batamire/doctl-axi"
><code>doctl-axi</code></a
>
</td>
<td>batamire</td>
<td>DigitalOcean</td>
<td>
Manage Droplets, Kubernetes, App Platform, databases,
networking, and Spaces via doctl with token-efficient TOON
output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/dynamodb-axi"
><code>dynamodb-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>DynamoDB</td>
<td>
Discover, inspect, query, scan, create, update, back up,
restore, export, import, and safely operate DynamoDB tables
through token-efficient CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/pg-axi"
><code>pg-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>PostgreSQL</td>
<td>
Discover, create, inspect, query, back up, restore, and
maintain PostgreSQL databases through safe token-efficient
CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/mongodb-axi"
><code>mongodb-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>MongoDB</td>
<td>
Discover, create, inspect, query, export, import, maintain,
and diagnose MongoDB databases through safe token-efficient
CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/elasticsearch-axi"
><code>elasticsearch-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>Elasticsearch</td>
<td>
Discover, inspect, query, index, map, snapshot, restore,
diagnose, and operate Elasticsearch clusters through safe
token-efficient CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/kubernetes-axi"
><code>kubernetes-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>Kubernetes</td>
<td>
Discover, inspect, deploy, debug, scale, roll out, expose,
and clean up Kubernetes workloads through safe
token-efficient CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/redis-axi"
><code>redis-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>Redis</td>
<td>
Discover, inspect, query, export, import, maintain, and
diagnose Redis databases through safe token-efficient CLI
workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/celery-axi"
><code>celery-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>Celery</td>
<td>
Discover, inspect, run, debug, monitor, schedule, control,
and safely operate Celery task queues through
token-efficient CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/cyberuni/cyber-mux"
><code>cyber-mux</code></a
>
</td>
<td>unional</td>
<td>Terminal multiplexers</td>
<td>
Open, send, read, focus, and close terminal panes across
tmux, herdr, and WezTerm through one detection-driven
contract with token-efficient output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/thatdudealso/oracle-axi"
><code>oracle-axi</code></a
>
</td>
<td>thatdudealso</td>
<td>Oracle Database</td>
<td>
Discover, create, inspect, query, export, import, maintain,
and diagnose Oracle databases through safe token-efficient
CLI workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/karotkriss/glab-axi"
><code>glab-axi</code></a
>
</td>
<td>karotkriss</td>
<td>GitLab</td>
<td>
Issues, merge requests, CI/CD pipelines, variables and
secrets, releases, and raw API access. Wraps the official
glab CLI with agent-ergonomic TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/adeeshsharma/reactive-axi"
><code>reactive-axi</code></a
>
</td>
<td>adeeshsharma</td>
<td>UI review</td>
<td>
Click any element in your live React, Vue, or Svelte dev
server and resolve it to the exact source file and line
before it reaches your agent.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/AndersHoffmann/obsidian-axi"
><code>obsidian-axi</code></a
>
</td>
<td>AndersHoffmann</td>
<td>Obsidian</td>
<td>
Read, search, create, update, organize, and link Obsidian
notes from the filesystem - compact TOON output, atomic
writes, no plugin or server.
</td>
</tr>
<tr>
<td>
<a
href="https://github.com/intelligentrascal/comfy-cloud-axi"
><code>comfy-cloud-axi</code></a
>
</td>
<td>intelligentrascal</td>
<td>AI generation</td>
<td>
Generate images, video, and audio via 22 partner models,
submit ComfyUI workflows and templates, track jobs, estimate
credits before generating, search nodes, and report usage
&mdash; wraps the Comfy Cloud MCP server with
token-efficient TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/intelligentrascal/mobbin-axi"
><code>mobbin-axi</code></a
>
</td>
<td>intelligentrascal</td>
<td>UI/UX research</td>
<td>
Search real-world UI/UX patterns from production apps via
Mobbin - wraps Mobbin's OAuth-gated MCP server as a
scriptable, headless CLI with token-efficient TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/JarvusInnovations/calendly-axi"
><code>calendly-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>Scheduling</td>
<td>
The Calendly booking loop from the shell - see what's
scheduled, mint single-use booking links, book directly,
cancel, and manage event types, availability, and webhooks.
</td>
</tr>
<tr>
<td>
<a
href="https://github.com/JarvusInnovations/remarkable-axi"
><code>remarkable-axi</code></a
>
</td>
<td>Jarvus Innovations</td>
<td>E-ink tablets</td>
<td>
Manage content on your reMarkable tablet through the
reMarkable cloud - browse and organize files, upload PDFs
and EPUBs, and send web articles as reflowable EPUBs.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/dtabolich/ado-axi"
><code>ado-axi</code></a
>
</td>
<td>dtabolich</td>
<td>Azure DevOps</td>
<td>
Pull requests, branches, repositories, and pipeline runs.
Wraps Azure CLI (<code>az devops</code> /
<code>az repos</code>) with agent-ergonomic TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/jeffreyhaen/ado-axi"
><code>ado-axi</code></a
>
</td>
<td>jeffreyhaen</td>
<td>Azure DevOps</td>
<td>
Work items, pull requests, Git refs, pipelines, and raw
Azure DevOps REST calls with safe mutations, profiles, and
token-efficient TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/laizhenyoong/supabase-axi"
><code>supabase-axi</code></a
>
</td>
<td>laizhenyoong</td>
<td>Supabase</td>
<td>
Inspect schemas, run SQL, and audit RLS, indexes, and logs
across Supabase projects. Wraps the Supabase Management API.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/mstuart/homebrew-axi"
><code>homebrew-axi</code></a
>
</td>
<td>mstuart</td>
<td>Homebrew</td>
<td>
Inspect Homebrew formulae, casks, and installed packages
&mdash; versions, dependencies, outdated status, and install
stats &mdash; with token-efficient TOON output; read-only,
never mutates.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/mstuart/pypi-axi"
><code>pypi-axi</code></a
>
</td>
<td>mstuart</td>
<td>PyPI</td>
<td>
Inspect PyPI packages, versions, dependencies, and download
stats with token-efficient TOON output &mdash; read-only, no
auth required.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/AG9898/cargo-axi"
><code>cargo-axi</code></a
>
</td>
<td>AG9898</td>
<td>Rust / Cargo</td>
<td>
Inspect Rust workspaces and run safe <code>check</code> or
Clippy validation with compact TOON output and opt-in
session context.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/escidmore/forgejo-axi"
><code>forgejo-axi</code></a
>
</td>
<td>escidmore</td>
<td>Forgejo</td>
<td>
Pull request lifecycle, issues, and raw API access for
self-hosted Forgejo - non-interactive, reconciling
mutations, with token-efficient TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/taltas/mastra-axi"
><code>mastra-axi</code></a
>
</td>
<td>taltas</td>
<td>Mastra</td>
<td>
Discover and run a Mastra app's agents, tools, and workflows
through agent-native shell commands with compact TOON
output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/CodyEngel/axi-axi"
><code>axi-axi</code></a
>
</td>
<td>CodyEngel</td>
<td>AXI authoring</td>
<td>
Scaffold a compliant AXI, read the 10 principles in
token-tuned slices, and run read-only compliance checks
against a candidate CLI.
</td>
</tr>
<tr>
<td>
<a
href="https://github.com/emilchristensen/atlassian-axi/tree/main/packages/jira-axi"
><code>jira-axi</code></a
>
</td>
<td>emilchristensen</td>
<td>Issue tracking</td>
<td>
Create, search, transition, and comment on Jira work items,
boards, and sprints through Atlassian's acli with
token-efficient TOON output and idempotent mutations.
</td>
</tr>
<tr>
<td>
<a
href="https://github.com/emilchristensen/atlassian-axi/tree/main/packages/confluence-axi"
><code>confluence-axi</code></a
>
</td>
<td>emilchristensen</td>
<td>Documentation</td>
<td>
Read and write Confluence Cloud pages and spaces directly
over the REST API with token-efficient TOON output and OAuth
3LO or API-token auth.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/masyanru/az-axi"
><code>az-axi</code></a
>
</td>
<td>masyanru</td>
<td>Azure</td>
<td>
Discover, inspect, query, and safely mutate Azure through
token-efficient CLI workflows over every az module.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/jeffreyhaen/mssql-axi"
><code>mssql-axi</code></a
>
</td>
<td>jeffreyhaen</td>
<td>Microsoft SQL Server / Azure SQL</td>
<td>
Inspect schemas, sample rows, run capped read-only queries
and showplans over the native ODBC driver - mutations
double-gated with dry-run by default, TOON output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/Holaxis-ai/superbee"
><code>superbee</code></a
>
</td>
<td>Holaxis</td>
<td>Agent knowledge infrastructure</td>
<td>
Turns what agents know into durable, domain-shaped
infrastructure through local OKF bundles with declared
schemas, exact queries, conflict-safe writes, and portable
Views.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/ardaatahan/figma-axi"
><code>figma-axi</code></a
>
</td>
<td>ardaatahan</td>
<td>Design / Figma</td>
<td>
Inspect Figma files, export nodes to PNG/SVG/PDF, and read
styles, components, and comments - summarizes huge files
instead of dumping raw JSON.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/enzodevs/trello-axi"
><code>trello-axi</code></a
>
</td>
<td>enzodevs</td>
<td>Project management</td>
<td>
Create, search, update, move, comment on, and archive Trello
cards through the REST API with compact TOON output,
complete pagination, idempotent mutations, and
non-interactive batch workflows.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/simkimsia/railway-axi"
><code>railway-axi</code></a
>
</td>
<td>simkimsia</td>
<td>Railway</td>
<td>
List projects and inspect linked project status,
environments, and services. Wraps the Railway CLI with
agent-ergonomic TOON output and structured errors.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/simkimsia/netlify-axi"
><code>netlify-axi</code></a
>
</td>
<td>simkimsia</td>
<td>Netlify</td>
<td>
List sites and inspect the linked site's status and the
logged-in account. Wraps the Netlify CLI with
agent-ergonomic TOON output and structured errors.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/ardaatahan/vercel-axi"
><code>vercel-axi</code></a
>
</td>
<td>ardaatahan</td>
<td>Deployment / Vercel</td>
<td>
Deploy and inspect Vercel deployments, projects, domains,
DNS, environment variables, and teams through the official
Vercel CLI, with explicit confirmation gates for production
and infrastructure changes.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/simkimsia/cloudflare-axi"
><code>cloudflare-axi</code></a
>
</td>
<td>simkimsia</td>
<td>Cloudflare</td>
<td>
Inspect the current Worker's deployments, Pages projects, KV
namespaces, and the logged-in account. Wraps the Cloudflare
CLI (wrangler) with agent-ergonomic TOON output and
structured errors.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/radityasurya/coolify-axi"
><code>coolify-axi</code></a
>
</td>
<td>radityasurya</td>
<td>Coolify</td>
<td>
Apps, databases, services, and deployments on self-hosted or
cloud Coolify - name-based addressing, redacted secrets, and
TOON output over the official coolify CLI.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/ardaatahan/porkbun-axi"
><code>porkbun-axi</code></a
>
</td>
<td>ardaatahan</td>
<td>Domains / Porkbun</td>
<td>
Manage Porkbun domains, DNS records, SSL certificates, URL
forwarding, nameservers, and glue records through the
Porkbun API, with compact TOON output and explicit
confirmation gates for registrations and destructive
updates/deletes.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/masculinecache/wrangler-axi"
><code>wrangler-axi</code></a
>
</td>
<td>masculinecache</td>
<td>Cloudflare Wrangler</td>
<td>
Deploy Workers and Pages, manage KV namespaces, D1
databases, R2 buckets, and Worker secrets, and tail live
logs with hard bounds - wraps the official Wrangler CLI with
predictable TOON lists and structured errors.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/masculinecache/chezmoi-axi"
><code>chezmoi-axi</code></a
>
</td>
<td>masculinecache</td>
<td>Dotfiles</td>
<td>
List, diff, add, re-add, apply, verify, and sync
chezmoi-managed dotfiles with compact TOON output -
template-aware re-add verdicts, preview dry-runs, and
idempotent operations.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/masculinecache/axi-memory"
><code>mem-axi</code></a
>
</td>
<td>masculinecache</td>
<td>Agent memory</td>
<td>
Durable cross-session agent memory as markdown + YAML
frontmatter in a git repo - typed memories, priority-ranked
search with L0 abstracts, OS-side dedup, and cross-machine
sync.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/ardaatahan/fal-axi"
><code>fal-axi</code></a
>
</td>
<td>ardaatahan</td>
<td>Image / Video Generation</td>
<td>
Generate images and videos and poll fal.ai queue
status/results through the official @fal-ai/client, with
compact TOON output, FAL_KEY env-only auth, and --confirm
gates on paid generates.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/ardaatahan/canva-axi"
><code>canva-axi</code></a
>
</td>
<td>ardaatahan</td>
<td>Design / Canva</td>
<td>
List, get, create, export, and autofill Canva designs
through the official Canva Connect API, with compact TOON
output, CANVA_ACCESS_TOKEN env-only auth, HTTPS-only API
bases, and --confirm gates on mutating writes.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/masculinecache/bws-axi"
><code>bws-axi</code></a
>
</td>
<td>masculinecache</td>
<td>Bitwarden Secrets Manager</td>
<td>
Agent-ergonomic Bitwarden Secrets Manager CLI - TOON output,
values redacted by default, project/key scoped listings.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/batamire/ha-axi"
><code>ha-axi</code></a
>
</td>
<td>batamire</td>
<td>Home Assistant</td>
<td>
Inspect entities, call services behind safety gates, render
templates, and read area/device registries over Home
Assistant REST and WebSocket with token-efficient TOON
output.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/simkimsia/calcom-axi"
><code>calcom-axi</code></a
>
</td>
<td>simkimsia</td>
<td>Scheduling</td>
<td>
Read your Cal.com agenda, bookings and one booking's
attendees and meeting link, event types, availability
schedules, free slots for an event type, and the logged-in
account. Wraps the Cal.com CLI (calcom) with agent-ergonomic
TOON output and structured errors.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/Valzon/screencast-axi"
><code>screencast-axi</code></a
>
</td>
<td>Valzon</td>
<td>Screencasts</td>
<td>
Scaffold, rehearse, and record scripted Playwright
walkthroughs of any website into mp4, webm, and a poster
with a synthetic cursor and burnt-in captions - TOON output,
structured errors, and a content-first status view via
axi-sdk-js. Requires ffmpeg.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/calebl/basecamp-axi"
><code>basecamp-axi</code></a
>
</td>
<td>calebl</td>
<td>Project management</td>
<td>
Projects, to-dos, cards, messages, comments, Campfire chat,
people, search, and cross-project assignment reports. Wraps
the official <code>basecamp</code> CLI with TOON output,
pre-computed totals, idempotent mutations, and a
<code>--confirm</code> gate on trash/archive/restore.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/jeffreyhaen/msgraph-axi"
><code>msgraph-axi</code></a
>
</td>
<td>jeffreyhaen</td>
<td>Microsoft 365 / Outlook</td>
<td>
Read, search, draft, and send Outlook mail and manage
calendars over the <code>m365</code> CLI - read-only by
default, with TOON output and mutations behind
<code>--execute</code>/<code>--confirm</code>.
</td>
</tr>
<tr>
<td>
<a href="https://github.com/oguzalp7/frontier-axi"
><code>frontier-axi</code></a
>
</td>
<td>oguzalp7</td>
<td>Pre-flight SDLC &amp; Cognitive Bridge</td>
<td>
Stage ambiguous ideas and architectural inquiries until
grilling settles them into tasks-axi tickets with
token-efficient TOON output.
</td>
</tr>
<!-- generated:catalog-community:end -->
</tbody>
</table>
</div>
</div>
<p class="mt-md">
Built an AXI?
<a
href="https://github.com/kunchenguid/axi/blob/main/CONTRIBUTING.md"
target="_blank"
>Follow the contributor workflow</a
>
to add it to the catalog.
</p>
</section>
<!-- 1. Introduction -->
<section class="section">
<p class="section-label">Premise</p>
<h2 data-annotate>Neither CLI nor MCP gives [agents] enough love.</h2>
<p>
AI agents interact with external services through two dominant
paradigms. The first is <strong>shell-based CLI execution</strong>:
the agent runs commands like <code>gh issue list</code> or
<code>agent-browser navigate</code> and parses the text output. The
second is <strong>structured tool protocols</strong> like MCP (Model
Context Protocol), where the agent invokes typed tool functions
through the hosting framework&rsquo;s native tool-calling interface.
</p>
<p>Both approaches have significant problems for agents:</p>
<ul>
<li>
<strong>CLI: action and observation are separated.</strong>
Browser CLIs return minimal confirmations &mdash;
<code>navigate</code> returns only a page title,
<code>click</code> returns &ldquo;Done&rdquo; &mdash; forcing the
agent to call <code>snapshot</code> after every action. This doubles
tool calls and wastes token budget.
</li>
<li>
<strong>MCP: schema overhead scales with tool count.</strong> A
browser MCP server exposes ~30 tools. Their schemas inflate input
tokens &mdash; MCP conditions average 185K tokens per task vs. 79K
for AXI &mdash; and the overhead compounds across every turn.
</li>
<li>
<strong>Both: poor discoverability.</strong> CLI agents must guess
subcommands or read <code>--help</code>. MCP agents with lazy
loading guess wrong tool names &mdash; selecting
<code>take_screenshot</code> (1MB base64 PNG) instead of
<code>take_snapshot</code> (80KB text) &mdash; and crash the
session. Neither provides in-context guidance on what to do next.
</li>
</ul>
<p>
Recent debate has framed this as &ldquo;MCP vs. CLI&rdquo;
<a href="#ref-smithery">[2]</a>, but the real question is neither
<em>which</em> protocol nor <em>which</em> transport, but rather
<em>what design principles</em> make an agent-tool interface
effective.
</p>
<p>
AXI is
<strong>10 principles for agent-ergonomic CLI design</strong> that
treat token budget as a first-class constraint. AXI achieves the
reliability advantages MCP promises (structured output,
discoverability) at the cost profile of a CLI.
</p>
<hr class="divider" />
<h3>Contributions</h3>
<ol>
<li>
Ten design principles for agent-ergonomic CLI tools, organized into
four categories.
</li>
<li>
Reference implementations (<a
href="https://github.com/kunchenguid/gh-axi"
target="_blank"
><code>gh-axi</code></a
>
for GitHub,
<a
href="https://github.com/kunchenguid/chrome-devtools-axi"
target="_blank"
><code>chrome-devtools-axi</code></a
>
for browser automation) demonstrating the principles across two
domains.
</li>
<li>
Two benchmarks &mdash; 490 browser automation runs and
<a
href="https://github.com/kunchenguid/axi/blob/main/bench-github/published-results/STUDY.md"
>425 GitHub API runs</a
>
&mdash; comparing seven interface conditions each, with
trajectory-level analysis showing where and why each interface
succeeds or fails.
</li>
</ol>
</section>
<!-- 2. Related Work -->
<section class="section">
<p class="section-label">Context</p>
<h2>Related Work</h2>
<h4>Model Context Protocol (MCP)</h4>
<p>
Anthropic&rsquo;s Model Context Protocol
<a href="#ref-mcp">[1]</a> provides a standardized way to connect AI
models to external tools through structured, typed tool definitions.
While MCP offers type-safe schemas and discoverable tool catalogs, the
schema overhead is substantial. The evaluation below quantifies this
cost: MCP conditions use 2.3&times; more input tokens than AXI (185K
vs. 79K per task), and the overhead compounds across multi-step tasks.
</p>
<h4>MCP vs. CLI benchmarks</h4>
<p>
Mao and Pradhan <a href="#ref-smithery">[2]</a> benchmarked 756 runs
comparing raw APIs, CLI, and native MCP across GitHub, Linear, and
Singapore Bus APIs. They found native MCP achieved 91.7% success vs.
83.3% for CLI, with CLI using 2.9&times; more billed tokens. However,
their CLI was auto-generated from API specs, not hand-designed for
agents. They note: &ldquo;What this does not settle is whether a
hand-crafted, agent-first CLI could close the remaining gap.&rdquo;
AXI answers this question directly &mdash; an agent-first CLI not only
closes the gap but surpasses MCP on every metric.
</p>
<h4>Code execution with MCP</h4>
<p>
Jones and Kelly <a href="#ref-anthropic-code">[3]</a> identified two
scaling problems with direct MCP tool calls: tool definitions overload
the context window, and intermediate results consume additional tokens
as they pass through the model between calls. They proposed presenting
MCP tools as a code API that the agent programs against, so that data
flows through the execution environment rather than the context
window. Varda and Pai
<a href="#ref-cloudflare-code">[4]</a> independently arrived at the
same insight, coining the term &ldquo;Code Mode&rdquo; and reporting
that LLMs handle complex, multi-step tool interactions better when
writing TypeScript than when making direct tool calls. The code-mode
condition in our browser benchmark evaluates this approach. Code
execution achieves 100% reliability, but write-run-debug loops make it
the slowest condition (36.2s avg) and, at $0.120/task, the most
expensive condition. In a
<a
href="https://github.com/kunchenguid/axi/blob/main/bench-github/published-results/STUDY.md"
>separate GitHub benchmark</a
>, code mode was the cheapest MCP condition ($0.101/task) by batching
API calls &mdash; suggesting the trade-off is domain-dependent.
</p>
</section>
<!-- 3. The 10 Principles -->
<section class="section">
<p class="section-label">The Model</p>
<h2 data-annotate>The [10 principles].</h2>
<div class="card mt-xl">
<ol>
<!-- generated:principles:start -->
<li>
<strong>Token-efficient output</strong> &mdash; Use
<a href="https://toonformat.dev/">TOON</a> format for ~40% token
savings over JSON
</li>
<li>
<strong>Minimal default schemas</strong> &mdash; 3&ndash;4 fields
per list item, not 10+
</li>
<li>
<strong>Content truncation</strong> &mdash; Truncate large text
with size hints and a <code>--full</code> escape hatch
</li>
<li>
<strong>Pre-computed aggregates</strong> &mdash; Include
aggregated counts and statuses that eliminate round trips
</li>
<li>
<strong>Definitive empty states</strong> &mdash; Explicit &ldquo;0
results&rdquo; rather than ambiguous empty output
</li>
<li>
<strong>Structured errors &amp; exit codes</strong> &mdash;
Idempotent mutations, structured errors, no interactive prompts,
fail loud on unknown flags
</li>
<li>
<strong>Ambient context</strong> &mdash; Install opt-in session
integrations first, then offer an on-demand skill
</li>
<li>
<strong>Content first</strong> &mdash; Running with no arguments
shows live data, not help text
</li>
<li>
<strong>Contextual disclosure</strong> &mdash; Include next-step
suggestions after each output
</li>
<li>
<strong>Consistent way to get help</strong> &mdash; Concise
per-subcommand reference when agents need it
</li>
<!-- generated:principles:end -->
</ol>
</div>
<!-- Efficiency -->
<h3 class="mt-xl">Efficiency</h3>
<h4><span class="text-accent">1.</span> Token-efficient output</h4>
<p>
Use TOON (Token-Optimized Object Notation) format instead of JSON or
tab-separated tables. TOON omits braces, quotes, and commas, yielding
approximately 40% token savings over equivalent JSON while remaining
unambiguous to LLMs.
</p>
<div class="grid grid--2">
<div class="card">
<p class="section-label">Conventional (JSON)</p>
<pre><code>[{"number":42,"title":"Fix login bug","state":"open",
"author":"alice","labels":["bug","P1"]},
{"number":43,"title":"Add dark mode","state":"open",
"author":"bob","labels":["feature"]}]</code></pre>
</div>
<div class="card">
<p class="section-label">AXI (TOON)</p>
<pre><code>issues[2]{number,title,state}:
42,Fix login bug,open
43,Add dark mode,open</code></pre>
</div>
</div>
<h4><span class="text-accent">2.</span> Minimal default schemas</h4>
<p>
Return 3&ndash;4 fields per list item by default, not 10+. Agents
rarely need all available fields and can request additional ones
explicitly via a <code>--fields</code> flag.
</p>
<h4><span class="text-accent">3.</span> Content truncation</h4>
<p>
Truncate large text fields to a configurable limit, appending a size
hint such as
<code
>(truncated, 2847 chars total &mdash; use --full to see complete
body)</code
>. This prevents a single verbose response from consuming the
agent&rsquo;s context budget while preserving enough content for most
tasks.
</p>
<!-- Robustness -->
<hr class="divider" />
<h3>Robustness</h3>
<h4><span class="text-accent">4.</span> Pre-computed aggregates</h4>
<p>
Include aggregate or derived fields that eliminate round trips. The
most impactful example is <code>totalCount</code>: always report the
total number of items, not just the page size. Other examples include
computed CI status summaries (e.g., &ldquo;27 passed, 0 failed, 10
skipped&rdquo;) inline in PR views.
</p>
<div class="grid grid--2">
<div class="card">
<p class="section-label">Conventional: no total count</p>
<pre><code>$ gh label list
bug Something isn't working #d73a4a
docs Improvements or additions #0075ca
... (30 rows -- default page, no total)</code></pre>
</div>
<div class="card">
<p class="section-label">AXI: total count + CI pre-computed</p>
<pre><code>$ gh-axi label list
count: 126
labels[126]{name}:
bug
docs
...
$ gh-axi pr view 51772
pull_request:
title: "refactor(plugins): route..."
state: merged
checks: "27 passed, 0 failed, 10 skipped"</code></pre>
</div>
</div>
<h4><span class="text-accent">5.</span> Definitive empty states</h4>
<p>
When a query returns no results, output an explicit zero-result
message rather than empty output. Agents cannot distinguish &ldquo;no
output&rdquo; from &ldquo;command failed silently&rdquo; without this
signal.
</p>
<h4>
<span class="text-accent">6.</span> Structured errors &amp; exit codes
</h4>
<p>
Mutations should be idempotent, errors should be structured and
written to stdout (not stderr), and commands must never prompt for
interactive input. Reserve stdout for structured data and stderr for
debug/log output. Use clean exit codes: 0 for success, 1 for errors.
Unknown flags must fail loud (exit 2) rather than be silently ignored
&mdash; the same guarantee a CLI already gives for an unknown command
&mdash; so an agent that invents a flag learns it did nothing instead
of trusting unscoped output.
</p>
<!-- Discoverability -->
<hr class="divider" />
<h3>Discoverability</h3>
<h4><span class="text-accent">7.</span> Ambient context</h4>
<p>
Install into the agent&rsquo;s session hooks or plugin system from an
explicit setup command so that every conversation starts with relevant
state already visible &mdash; before the agent takes any action. The
integration provides a compact, directory-scoped dashboard as initial
context. As a secondary recommendation, also ship an installable Agent
Skill (generated from the same home-view guidance) so agents that
support the skill format can load your guidance on demand, without the
per-session cost of a hook.
</p>
<h4><span class="text-accent">8.</span> Content first</h4>
<p>
Running a command with no arguments should display live, actionable
data rather than help text. The home view should also include the
current executable path, with the home-directory prefix rendered as
<code>~</code>, and a one-sentence description of what the AXI does.
</p>
<div class="grid grid--2">
<div class="card">
<p class="section-label">Conventional: no-args shows help</p>
<pre><code>$ gh issue
Work with GitHub issues.
USAGE
gh issue &lt;command&gt; [flags]
AVAILABLE COMMANDS
close, create, list, view, ...</code></pre>
</div>
<div class="card">
<p class="section-label">AXI: no-args shows live state</p>
<pre><code>$ gh-axi issue list
bin: ~/.local/bin/gh-axi
description: Browse and manage GitHub issues for the current repository
count: 14 of 8771 total
issues[14]{number,title,state}:
51815,"[Bug]: Telegram plugin...",open
...
help[2]:
Run `gh-axi issue view &lt;number&gt;`
Run `gh-axi issue create --title "..."`</code></pre>
</div>
</div>
<h4><span class="text-accent">9.</span> Contextual disclosure</h4>
<p>
Append <code>help[]</code> lines after output, suggesting logical next
steps as concrete command templates. Carry forward fixed
disambiguating flags, but leave runtime values parameterized as
placeholders like <code>&lt;id&gt;</code> instead of guessing them.
This eliminates tool-discovery turns and guides agents through
multi-step workflows.
</p>
<h4><span class="text-accent">10.</span> Consistent way to get help</h4>
<p>
Each subcommand should offer a concise <code>--help</code> flag as a
fallback when contextual hints are insufficient.
</p>
</section>
<!-- 4. Experimental Setup -->
<section class="section">
<p class="section-label">Method</p>
<h2>Experimental Setup</h2>
<h4>Conditions</h4>
<p>
The benchmark evaluates seven agent-tool interface conditions for
browser automation:
</p>
<div class="card">
<div class="table-wrap">
<table class="table">
<thead>
<tr>
<th>Condition</th>
<th>Interface</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>chrome-devtools-axi</strong></td>
<td>Bash CLI (AXI)</td>
<td>
AXI wrapper around chrome-devtools-mcp. Combined operations,
TOON metadata, contextual suggestions.
</td>
</tr>
<tr>
<td><strong>dev-browser</strong></td>
<td>Bash CLI</td>
<td>
Sandboxed browser scripting via
<code>dev-browser run script.js</code>. Agent writes small
JS files and prints only targeted results.
</td>
</tr>
<tr>
<td><strong>agent-browser</strong></td>
<td>Bash CLI (Rust)</td>
<td>
Vercel&rsquo;s Agent Browser &mdash; the raw CLI baseline.
</td>
</tr>
<tr>
<td><strong>chrome-devtools-mcp</strong></td>
<td>MCP (no ToolSearch)</td>
<td>
Chrome DevTools MCP server. All ~30 tool schemas loaded
upfront.
</td>
</tr>
<tr>
<td><strong>chrome-devtools-mcp-search</strong></td>
<td>MCP + ToolSearch</td>
<td>Same MCP server, tools discovered on-demand.</td>
</tr>
<tr>
<td><strong>chrome-devtools-mcp-code</strong></td>
<td>TypeScript scripts</td>
<td>
Agent writes <code>.ts</code> scripts calling
<code>callTool()</code> which forwards to
chrome-devtools-mcp via a persistent MCP bridge.
</td>
</tr>
<tr>
<td><strong>chrome-devtools-mcp-compressed</strong></td>
<td>MCP Compressor CLI</td>
<td>
mcp-compressor wraps the MCP server into CLI subcommands.
Agent uses Bash.
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h4>Task design</h4>
<p>The benchmark includes 14 tasks across four categories:</p>
<ul>
<li>
<strong>Single-step (4 tasks):</strong>
<code>read_static_page</code>, <code>wikipedia_fact_lookup</code>,
<code>github_repo_stars</code>,
<code>wikipedia_table_read</code> &mdash; navigate to one page and
extract information.
</li>
<li>
<strong>Multi-step (5 tasks):</strong>
<code>wikipedia_link_follow</code>,
<code>github_navigate_to_file</code>,
<code>wikipedia_infobox_hop</code>,
<code>multi_page_comparison</code>,
<code>wikipedia_search_click</code> &mdash; navigate, interact, and
follow links across pages.
</li>
<li>
<strong>Investigation (4 tasks):</strong>
<code>wikipedia_deep_extraction</code>,
<code>github_issue_investigation</code>,
<code>multi_site_research</code>,
<code>tabular_data_analysis</code> &mdash; complex multi-page
extraction requiring context across navigations.
</li>
<li>
<strong>Error recovery (1 task):</strong>
<code>navigate_404</code> &mdash; handle failures gracefully.
</li>
</ul>
<h4>Infrastructure</h4>
<p>
Each run creates a fresh workspace with condition-specific
<code>CLAUDE.md</code>. All MCP-based conditions use the same backend:
<code>chrome-devtools-mcp@latest --headless --isolated</code>. Agent:
Claude Sonnet 4.6. Judge: Claude Sonnet 4.6. Five repeats per
condition&ndash;task pair: 14 &times; 7 &times; 5 = 490 total runs.
</p>
<p>
A
<a
href="https://github.com/kunchenguid/axi/blob/main/bench-github/published-results/STUDY.md"
>separate benchmark targeting GitHub API tasks</a
>
(425 runs, 5 conditions, 17 tasks) validates the same pattern in a
different domain.
</p>
<h4>Metrics</h4>
<ul>
<li>
<strong>Task success</strong> (binary): determined by an LLM judge
comparing the agent&rsquo;s answer against a reference answer and
rubric.
</li>
<li>
<strong>Cost</strong> (USD): total API cost, computed from
input/output token counts at published rates.
</li>
<li>
<strong>Duration</strong> (seconds): wall-clock time from task start
to final response.
</li>
<li>
<strong>Turns</strong>: number of tool invocations the agent makes.
</li>
</ul>
</section>
<!-- 5. Results -->
<section class="section">
<p class="section-label">Proof</p>
<h2>Results</h2>
<p class="text-muted">
490 runs, 14 tasks &times; 5 repetitions &times; 7 conditions
</p>
<div class="card mt-xl">
<p class="section-label">Aggregate</p>
<div class="table-wrap">
<table class="table">
<thead>
<tr>
<th>Condition</th>
<th>Success</th>
<th>Avg Cost</th>
<th>Avg Duration</th>
<th>Avg Turns</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>chrome-devtools-axi</strong></td>
<td><strong class="text-accent">100%</strong></td>
<td><strong class="text-accent">$0.074</strong></td>
<td><strong class="text-accent">21.5s</strong></td>
<td><strong class="text-accent">4.5</strong></td>
</tr>
<tr>
<td>dev-browser</td>
<td>99%</td>
<td>$0.078</td>
<td>28.6s</td>
<td>4.9</td>
</tr>
<tr>
<td>agent-browser</td>
<td>99%</td>
<td>$0.088</td>
<td>24.6s</td>
<td>4.8</td>
</tr>
<tr>
<td>chrome-devtools-mcp-compressed</td>
<td>100%</td>
<td>$0.091</td>
<td>29.7s</td>
<td>7.6</td>
</tr>
<tr>
<td>chrome-devtools-mcp-search</td>
<td>99%</td>
<td>$0.096</td>
<td>29.4s</td>
<td>7.5</td>
</tr>
<tr>
<td>chrome-devtools-mcp</td>
<td>99%</td>
<td>$0.100</td>
<td>26.0s</td>
<td>6.2</td>
</tr>
<tr>
<td>chrome-devtools-mcp-code</td>
<td>100%</td>
<td>$0.120</td>
<td>36.2s</td>
<td>6.4</td>
</tr>
</tbody>
</table>
</div>
</div>
<p class="mt-md">
AXI (<code>chrome-devtools-axi</code>) achieves 100% task success at
the lowest average cost ($0.074/task), shortest duration (21.5s), and
fewest turns (4.5). It is the only condition that leads simultaneously
on all four metrics. The field is competitive &mdash; dev-browser is
within 5% on cost &mdash; but AXI&rsquo;s consistency across the full
task suite gives it the edge.
</p>
<hr class="divider" />
<h3>Corroborating evidence: GitHub benchmark</h3>
<p>
A
<a
href="https://github.com/kunchenguid/axi/blob/main/bench-github/published-results/STUDY.md"
>separate 425-run benchmark</a
>
comparing <code>gh-axi</code> against raw <code>gh</code> CLI and
GitHub MCP across 17 tasks arrives at the same conclusions:
<strong>AXI achieves 100% success at $0.050/task</strong>, vs. 86% at
$0.054 for CLI and 82&ndash;87% at $0.101&ndash;$0.148 for MCP. The
cost gap widens dramatically on complex tasks:
<code>ci_failure_investigation</code> costs $0.065 for AXI vs. $0.758
for MCP (12&times;).
</p>
</section>
<!-- 6. Analysis -->
<section class="section">
<p class="section-label">Analysis</p>
<h2>Findings</h2>
<div class="card mt-xl">
<p class="section-label">Finding 1</p>
<h4>AXI leads on every metric.</h4>
<p>
<code>chrome-devtools-axi</code> achieves 100% success at the lowest
cost ($0.074/task), fewest turns (4.5), and fastest execution
(21.5s). It is the only condition that leads simultaneously on all
four metrics. The field is competitive &mdash;
<code>dev-browser</code> is within 5% on cost ($0.078) &mdash; but
AXI&rsquo;s consistency across the full task suite gives it the
edge.
</p>
<p>
Trajectory analysis across all 70 AXI runs reveals multiple
mechanisms behind the cost advantage:
</p>
<ul>
<li>
<strong>Specialized extraction commands.</strong>
AXI&rsquo;s <code>tables --url</code> command navigates to a page
and returns structured table data in a single step. On extraction
tasks, this reduces the entire interaction to 2 turns at
$0.047/task &mdash; a 3.1&times; cost reduction vs. MCP-code on
the same task ($0.147).
</li>
<li>
<strong>Pipe-based filtering.</strong>
The agent pipes CLI output through shell tools (<code>| grep</code
>, <code>| head</code>, <code>| tail</code>) to return only
matching lines instead of full accessibility snapshots. This keeps
per-turn token volume compact.
</li>
<li>
<strong>Combined operations.</strong>
<code>open</code> combines navigate + snapshot;
<code>click --query</code> returns the updated snapshot with
search results automatically. This eliminates the separate
<code>take_snapshot</code> calls that MCP conditions require after
every action.
</li>
</ul>
</div>
<div class="card mt-md">
<p class="section-label">Finding 2</p>
<h4>Code-writing pays a coordination tax.</h4>
<p>
Both code-writing conditions achieve near-perfect success:
<code>chrome-devtools-mcp-code</code> at 100% and
<code>dev-browser</code> at 99%. MCP-code&rsquo;s perfect
reliability comes at $0.120/task and 6.4 turns &mdash; 1.6&times;
AXI&rsquo;s cost. <code>dev-browser</code> is more competitive at
$0.078 and 4.9 turns, occasionally beating AXI on multi-site tasks
where script batching eliminates sequential navigation.
</p>
<p class="mb-0">
On <code>multi_site_research</code>,
<code>dev-browser</code>&rsquo;s best run costs $0.059 (4 turns, 3
scripts) vs. AXI&rsquo;s $0.090 (6 turns). Batching three site
visits into three focused scripts avoids the per-navigation overhead
of AXI&rsquo;s sequential <code>open --query</code> pattern. The
trade-off: when scripts fail, write-run-debug loops push costs
higher &mdash; <code>dev-browser</code> ranges from $0.059 to $0.100
across the 5 runs (1.7&times; spread).
</p>
</div>
<div class="card mt-md">
<p class="section-label">Finding 3</p>
<h4>MCP Compressor validates CLI-over-MCP.</h4>
<p>
<a href="https://github.com/atlassian-labs/mcp-compressor/"
>MCP Compressor</a
>
open sourced by Atlassian (100% success, $0.091/task, 7.6 turns)
wraps any MCP server into a single CLI tool, converting each MCP
tool into a Bash subcommand. This single change &mdash; CLI over MCP
&mdash; eliminates schema overhead and enables shell composability
(<code>| grep</code>, <code>| head</code>).
</p>
<p class="mb-0">
The remaining 23% gap to AXI ($0.091 vs. $0.074) comes from two
sources: MCP Compressor still requires separate
<code>navigate-page</code> + <code>take-snapshot</code> calls where
AXI&rsquo;s <code>open</code> returns both in one due to its
ergonomic interface design.
</p>
</div>
</section>
<!-- 7. Case Studies -->
<section class="section">
<p class="section-label">Case Studies</p>
<h2>Trajectory analysis.</h2>
<h3>Case A: Specialized extraction &mdash; from 11 turns to 2</h3>
<p class="text-muted">
<code>wikipedia_deep_extraction</code> &mdash; Navigate to the
Wikipedia list of Nobel laureates in Physics and report the winners
for the 3 most recent years, including all co-laureates.
</p>
<div class="grid grid--2 mt-md">
<div class="card">
<p class="section-label">
chrome-devtools-axi &mdash; 2 turns &middot; $0.047
</p>
<pre><code><span class="annotation">Call 1:</span>
$ chrome-devtools-axi tables \
--url "&lt;nobel-physics-url&gt;" \
2>/dev/null | tail -100
<span class="annotation">&rarr; Structured table data: years, names,
countries, and citations for all
laureates. 2025, 2024, 2023 are
the last rows.</span>
<span class="annotation">Done. Agent reads the output and
responds with all co-laureates for
2023&ndash;2025. Total time: 7.9s.</span></code></pre>
</div>
<div class="card">
<p class="section-label">
chrome-devtools-mcp-code &mdash; 11 turns &middot; $0.194
</p>
<pre><code><span class="annotation">Turn 1: Write + run get_nobel.ts
&rarr; Navigate and dump the raw snapshot.</span>
<span class="annotation">Turns 2&ndash;4: Write + run probing scripts
&rarr; Identify the recent-year rows and
inspect the table structure.</span>
<span class="annotation">Turns 5&ndash;10: Refine extraction logic
&rarr; Track rowspans, filter non-person
links, and verify co-laureates.</span>
<span class="annotation">Turn 11: Final extraction succeeds.
Total time: 58.6s.</span></code></pre>
</div>
</div>
<p class="mt-md">
AXI&rsquo;s <code>tables --url</code> command navigates, extracts, and
structures table data in a single operation. The MCP-code agent
follows a fundamentally different path: discover tool interfaces, read
type signatures, write TypeScript, inspect the rendered table, and
refine extraction logic for continuation rows &mdash; 11 turns and
multiple script iterations to arrive at the same answer. Across all 5
runs, MCP-code costs $0.103&ndash;$0.194 (4&ndash;11 turns) vs.
AXI&rsquo;s consistent $0.047 (2 turns).
</p>
<hr class="divider" />
<h3>Case B: Combined operations still beat a 7-turn script loop</h3>
<p class="text-muted">
<code>wikipedia_search_click</code> &mdash; Go to Wikipedia, search
for &ldquo;Turing Award&rdquo;, and report who the first recipient
was.
</p>
<div class="grid grid--2 mt-md">
<div class="card">
<p class="section-label">
chrome-devtools-axi &mdash; 5 turns &middot; $0.086
</p>
<pre><code><span class="annotation">Call 1:</span>
$ chrome-devtools-axi navigate --url &lt;url&gt;
<span class="annotation">&rarr; error: "Unknown command: navigate"
help[1]: Run `--help` to see commands</span>
<span class="annotation">Call 2:</span>
$ chrome-devtools-axi --help
<span class="annotation">&rarr; Tips: "Prefer open &lt;url&gt; --query"
"fill @&lt;uid&gt; --submit fills and
submits in one step."</span>
<span class="annotation">Call 3:</span>
$ chrome-devtools-axi open \
"&lt;wikipedia-main-page&gt;" \
--query "search"
<span class="annotation">&rarr; Navigate + filter to search field.
Agent sees @1_11.</span>
<span class="annotation">Call 4:</span>
$ chrome-devtools-axi fill @1_11 \
"Turing Award" --submit
<span class="annotation">&rarr; Fill + submit + wait + snapshot
in one command. Article returned.
"First recipient: Alan Perlis."</span></code></pre>
</div>
<div class="card">
<p class="section-label">
chrome-devtools-mcp-code &mdash; 7 turns &middot; $0.132
</p>
<pre><code><span class="annotation">Turns 1&ndash;2: Write + run script
&rarr; Navigate to Wikipedia and capture
the main-page snapshot.</span>
<span class="annotation">Turn 3: Write follow-up script
&rarr; First attempt fails after guessing
the wrong wrapper export name.</span>
<span class="annotation">Turns 4&ndash;6: Read generated exports,
rewrite with click() + pressKey(),
and rerun the search sequence.</span>
<span class="annotation">Turn 7: Final extraction.
The Turing Award article states the
first recipient was Alan Perlis.</span></code></pre>
</div>
</div>
<p class="mt-md">
The critical command is
<code>fill @1_11 &quot;Turing Award&quot; --submit</code>. This single
invocation fills the search box, submits the form, waits for the
results page, and returns the snapshot &mdash; four operations in one
step. The MCP-code agent still has to orchestrate these as separate
wrapper calls (<code>click()</code>, <code>typeText()</code>,
<code>pressKey()</code>, <code>takeSnapshot()</code>), and it spent
extra turns confirming the generated export names before the sequence
ran cleanly. Across the rerun, the task ranged from $0.132 to $0.316
(7&ndash;18 turns). This is
<strong>Principle 4 (pre-computed aggregates)</strong> applied to
actions: the tool does the multi-step work so the agent doesn&rsquo;t
have to.
</p>
<hr class="divider" />
<h3>
Case C: Query filtering eliminates the snapshot&ndash;search cycle
</h3>
<p class="text-muted">
<code>wikipedia_infobox_hop</code> &mdash; Find the developer of
Python from its infobox, then follow the link and report when the
Python Software Foundation was founded.
</p>
<div class="grid grid--2 mt-md">
<div class="card">
<p class="section-label">
chrome-devtools-axi &mdash; 5 turns &middot; $0.082
</p>
<pre><code><span class="annotation">Call 1:</span>
$ chrome-devtools-axi navigate --url &lt;url&gt;
<span class="annotation">&rarr; error: "Unknown command: navigate"
help[1]: Run `--help` to see commands</span>
<span class="annotation">Call 2: --help</span>
<span class="annotation">Call 3:</span>
$ chrome-devtools-axi open \
"&lt;python-wiki-url&gt;" \
--query "stable release developer"
<span class="annotation">&rarr; Navigate + filter snapshot to
matching lines. Agent sees
developer and relevant links.</span>
<span class="annotation">Call 4:</span>
$ chrome-devtools-axi click @1_161 \
--query "founded formed"
<span class="annotation">&rarr; Click PSF link + search result
page in one command. Found
"June 2001". Done.</span></code></pre>
</div>
<div class="card">
<p class="section-label">
agent-browser &mdash; 7 turns &middot; $0.164
</p>
<pre><code><span class="annotation">Call 1: --help
&rarr; Discover available commands.</span>
<span class="annotation">Call 2: open + wait 2000 + snapshot
&rarr; Full snapshot of Python page.
Agent manually scans for infobox.</span>
<span class="annotation">Call 3: click + wait 2000 + snapshot
&rarr; Click link. Wait for load.
Take full snapshot of new page.</span>
<span class="annotation">Call 4: get url
&rarr; Verify navigation succeeded.</span>
<span class="annotation">Call 5: find text "Python Software
Foundation" click + wait + get url
&rarr; Retry click with text match.</span>
<span class="annotation">Call 6: eval document.querySelector
&rarr; DOM query to extract link URL.</span>
<span class="annotation">Call 7: open + wait 2000 + snapshot
&rarr; Navigate to PSF page. Full
snapshot. Manual scan. Done.</span></code></pre>
</div>
</div>
<p class="mt-md">
AXI&rsquo;s <code>--query</code> flag turns every command into a
filtered view.
<code>open --query &quot;stable release developer&quot;</code> returns
only the matching lines from the snapshot instead of the full
Wikipedia page.
<code>click @id --query &quot;founded formed&quot;</code> clicks the
link <em>and</em>
searches the resulting page in one step. The agent-browser condition
has no equivalent &mdash; every action requires a separate
<code>wait</code> + <code>snapshot</code> cycle, plus verification
steps (<code>get url</code>, <code>eval</code>) to confirm the action
worked. This is <strong>Principle 9 (contextual disclosure)</strong>:
the tool returns targeted, relevant output after each action instead
of dumping the full page state.
</p>
</section>
<!-- 8. Limitations -->
<section class="section">
<p class="section-label">Limitations</p>
<h2>Caveats.</h2>
<ul>
<li>
<strong>Public websites only.</strong> All tasks target public sites
(Wikipedia, GitHub, example.com). Results may vary on authenticated
or dynamic web applications.
</li>
<li>
<strong>Single agent model evaluated.</strong> The published results
use Claude Sonnet 4.6. This is not a limit of the harness &mdash;
both benchmarks accept <code>--model</code> (for example
<code>--model claude-opus-4-6</code>) &mdash; but other models are
not evaluated here and may exhibit different sensitivities to output
format.
</li>
<li>
<strong>Read-only tasks.</strong> The benchmark includes only read
and navigation operations. Form submissions and complex interactions
introduce additional challenges.
</li>
<li>
<strong>LLM judge.</strong> Task success is determined by an LLM
judge, which may introduce scoring biases.
</li>
<li>
<strong>Domain-specific implementation.</strong> While the AXI
principles are domain-general, this evaluation focuses on browser
automation. The
<a
href="https://github.com/kunchenguid/axi/blob/main/bench-github/published-results/STUDY.md"
>GitHub benchmark</a
>
provides cross-domain validation.
</li>
</ul>
</section>
<!-- 9. Conclusion -->
<section class="section">
<p class="section-label">Implication</p>
<h2 data-annotate>
The answer is [principled design], not protocol choice.
</h2>
<p>
The debate between CLI and MCP as agent-tool interfaces misses the
deeper question: what design principles make any interface effective
for agents? This evaluation shows that a principled CLI design (AXI)
leads both raw CLI and MCP on every metric &mdash; success, cost,
duration, and turns.
</p>
<p>
In browser automation, AXI achieves 100% reliability at $0.074/task
and 4.5 turns, compared to $0.088 and 4.8 turns for raw CLI and $0.100
and 6.2 turns for MCP. The primary mechanism is specialized commands:
AXI&rsquo;s <code>tables --url</code> reduces extraction tasks to a
single 2-turn interaction, while combined operations
(<code>open</code>, <code>click --query</code>) eliminate the separate
snapshot calls that MCP conditions require. Shell composability (<code
>| grep</code
>, <code>| tail</code>) keeps per-turn token volume compact.
</p>
<p>
A separate GitHub benchmark validates the same pattern: AXI at 100%
success and $0.050/task vs. 86% and $0.054 for CLI, and 82&ndash;87%
and $0.101&ndash;$0.148 for MCP. The 10 AXI principles provide a
concrete, testable framework for designing agent-ergonomic interfaces
that are both reliable and cost-efficient.
</p>
</section>
<!-- References -->
<footer
class="section"
id="references"
style="padding-bottom: var(--space-xl)"
>
<p class="section-label">References</p>
<ol>
<li id="ref-mcp">
<a href="https://modelcontextprotocol.io"
>Anthropic. Model Context Protocol specification.</a
>
Technical report, 2024.
</li>
<li id="ref-smithery">
<a href="https://smithery.ai/blog/mcp-vs-cli-is-the-wrong-fight"
>H. Mao and R. Pradhan. &ldquo;MCP vs CLI is the wrong
fight.&rdquo;</a
>
Smithery Blog, March 2026.
</li>
<li id="ref-anthropic-code">
<a
href="https://www.anthropic.com/engineering/code-execution-with-mcp"
>A. Jones and C. Kelly. &ldquo;Code execution with MCP: Building
more efficient agents.&rdquo;</a
>
Anthropic Engineering Blog, November 2025.
</li>
<li id="ref-cloudflare-code">
<a href="https://blog.cloudflare.com/code-mode/"
>K. Varda and S. Pai. &ldquo;Code Mode: The better way to use
MCP.&rdquo;</a
>
Cloudflare Blog, September 2025.
</li>
<li id="ref-github-bench">
<a
href="https://github.com/kunchenguid/axi/blob/main/bench-github/published-results/STUDY.md"
>K. Chen. &ldquo;AXI Benchmark Study: Agent Interface Comparison
(GitHub).&rdquo;</a
>
425-run benchmark comparing gh-axi, gh CLI, and GitHub MCP, 2026.
</li>
</ol>
<p class="text-sm text-muted mt-xl">
<a href="https://github.com/kunchenguid/axi" target="_blank"
>GitHub Repo</a
>
&middot;
<a href="https://x.com/kunchenguid" target="_blank">Kun Chen</a>
Presents
</p>
</footer>
</div>
<script>
function copyBlock(btn) {
const code = btn.closest("pre").querySelector("code");
const copyIcon = btn.querySelector(".icon-copy");
const checkIcon = btn.querySelector(".icon-check");
navigator.clipboard.writeText(code.textContent).then(() => {
copyIcon.style.display = "none";
checkIcon.style.display = "block";
btn.style.color = "var(--color-accent)";
setTimeout(() => {
copyIcon.style.display = "block";
checkIcon.style.display = "none";
btn.style.color = "";
}, 1500);
});
}
</script>
</body>
</html>