feat(agent-platform-design): add AXI as the third interface class (A3.2) - #61
Merged
Merged
Conversation
The interface-boundary framework had two classes, MCP and CLI, and no place
for a tool that is agent-facing but must stay on one machine. Task A3.2 of
the PixelOven Agent Stack program plan (v3.5, Phase 1) adds the third:
- MCP — federated, authorization-carrying. The gateway is the only authz
boundary; tools are VK-scoped and shared across every consumer.
- AXI — local agent tooling. A CLI designed for an agent to invoke on the
machine it runs on. No auth story of its own — it inherits the
machine's credentials, which is exactly why workplace credentials
(chat, mail, calendar OAuth) stay local and never travel through a
shared gateway key.
- CLI — humans, scripts, and CI.
Authorization, not capability, picks the class. Adds the failure mode of
choosing wrong for each class, the upstream measured economics (490-run
browser benchmark, AXI $0.074 / ~79K tokens vs CLI $0.088 / ~93K vs MCP
$0.100 / ~185K per task, pinned to kunchenguid/axi@408a653), and the worked
example where one capability correctly lives in two classes at once:
chrome-devtools-axi for local workstation browsing, a federated browserless
/ Playwright-MCP for VK-scoped cluster browsing — both stay, chosen by
caller rather than by capability.
Also updates the two pointers that named the old two-class table:
mcp-server-design's surface-decision section and templates/AGENTS.md's
interface-boundaries block, so a newly onboarded consumer inherits the
three-class rule rather than the superseded one.
Skills only — crew stays declarative. Version 0.23.0 -> 0.24.0 per
docs/MAINTAINERS.md; docs/CATALOG.md regenerated.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AWb1wJP3sD5oUbBrvSQ2UC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Task A3.2 — PixelOven Agent Stack Program Plan v3.5, Phase 1. Acceptance: "Crew PR merged."
agent-platform-design's interface-boundary framework had two classes, MCP and CLI — and no place for a tool that is agent-facing but must stay on one machine. That gap is load-bearing for the program:pulse's observation tools (calendar, slack, email) carry personal workplace OAuth credentials, and the framework as written offered them only "MCP tool first" — i.e. put a mailbox behind a shared gateway key. This adds the third class and makes the rule explicit.The three classes
Authorization picks the class, not capability. Shared and centrally revocable → MCP. Personal to one machine or human, must never leave it → AXI. Human/script/CI caller → CLI. AXI's missing auth story is the reason to reach for it with workplace credentials, not a hole to plug — the blast radius stays the machine that already holds the credential.
What the section now carries
The three-class table plus what an AXI actually is (the upstream 10-principle standard: token-efficient output, definitive empty states, structured errors and exit codes, no interactive prompts, next-step suggestions).
The failure mode of choosing wrong, per class — MCP for a personal credential (one mailbox becomes everyone's capability, revocation all-or-nothing); MCP for a single-machine need (resident schema tokens in every consumer's context, finite tool budgets); AXI for a multi-consumer need (N credential copies, no central revocation, unreachable from in-cluster agents); human-shaped CLI for an agent caller (help text instead of data, prompts that hang unattended runs, turns burned on every call).
The measured economics, attributed per arm — browser benchmark, 490 runs (14 tasks × 7 conditions × 5 repeats), Claude Sonnet 4.6:
chrome-devtools-axiagent-browserchrome-devtools-mcpWith the mechanism, which is the part that generalises: tool schemas are resident in context (~28.5% of input tokens in that run), so MCP pays them every turn whether or not a tool is called — the ~2.3× token gap. The section also says plainly that these are the standard author's own runs and should be read as an order-of-magnitude signal, per this skill's own rule about dated, sourced capability claims.
The worked example the program plan supplies (§2.5):
chrome-devtools-axifor local workstation browsing vs a federated browserless / Playwright-MCP for VK-scoped cluster browsing. Both stay — chosen by caller, not by capability. Plus the general corollary: availability in one class is not an argument for removing another.The pre-existing rules survive unchanged — MCP canonical + CLI as a thin wrapper for shared capabilities, and the off-the-shelf-first default that follows.
Sources (G-2: pinned)
Verified 2026-08-17 against
kunchenguid/axi@408a6536625e5b05e5c56e6c4a04fe83e1f510a5(2026-08-16):.agents/skills/axi/SKILL.md— the 10 principlesREADME.md— summary results tablebench-browser/published-results/report.md— per-condition figures and the schema-overhead limitation (it reports the MCP arm at $0.1005; the README summary rounds to $0.101 — the skill notes both)Upstream was read only; nothing was posted to
kunchenguid/*(guardrail G-5).Noted deltas (mechanical — flag if unwanted)
Two pointers named the old two-class table by shape, so they would have taught the superseded rule:
skills/mcp-server-design/SKILL.md— "the full MCP-vs-CLI decision table" → the three-class table, plus one sentence: a capability whose credential must never leave one machine belongs in an AXI. Description updated to match.templates/AGENTS.md— the## Interface boundariesblock, so a newly onboarded consumer inherits the three-class rule rather than the two-class one.Both are one-paragraph edits within the same doctrine; drop either if you'd rather keep this PR to the single skill.
Not touched:
.claude-plugin/plugin.json'sname/repositoryfields still readharmony-crew/ductiletoaster— that is M0.2's in-flight work, deliberately left alone to avoid a collision.Checks (run locally)
python3 scripts/check_skills.py·render_roles.py --check·check_skill_refs.py·gen_catalog.py --check· templates YAML parse — all pass.gitleaks detect --no-gitclean (G-3). Version 0.23.0 → 0.24.0 in bothplugin.jsonandpackage.jsonperdocs/MAINTAINERS.md;docs/CATALOG.mdregenerated. Minor rather than patch: this adds a class to a decision framework consumers route real design decisions through.Skills only — crew stays declarative, no executable behavior added.
Task A3.2, PixelOven Agent Stack — Program Plan v3.5 (Phase 1). Feeds
pulseC1.2 (observation AXI profile) and the harmony-side mapping in plan §2.5.