Skip to content

docs: design note — harness fuel as an axis distinct from substrate - #2147

Open
mellanon wants to merge 1 commit into
mainfrom
docs/design-harness-fuel-axis
Open

docs: design note — harness fuel as an axis distinct from substrate#2147
mellanon wants to merge 1 commit into
mainfrom
docs/design-harness-fuel-axis

Conversation

@mellanon

Copy link
Copy Markdown
Contributor

Refs #2055. Design note — proposal, not implementation. No code changes.

Captures architectural analysis from the Phase 0/1 retrospective that would otherwise have stayed in a chat log.

The argument

Cortex models three axes (execution / substrate / inference profile), but inferenceProfile is scoped to exactly one substrate — only the api-agent branch of HarnessResolver consumes it. That welds together two independent things: harness capability and fuel.

Consequence: you can express "bare harness + metered API". You cannot express "full harness + cheaper fuel."

That matters because ApiAgentHarness is text-only with no tools by design (D5) — so it structurally cannot serve the expensive workload. Token spend lives in coding agents (long tool loops, big contexts). We built cost/sovereignty control for the cheap tail and cannot reach the costly one. The lever that would matter is the full Claude Code harness on cheaper fuel.

What was verified (and what it killed)

Checked against Claude Code docs rather than recollection. Confirmed: base-URL override (ANTHROPIC_BASE_URL + custom headers), a documented auth precedence chain, model selection, and Bedrock/Vertex/Foundry as first-class backends — harness and fuel are separable.

Killed half the idea:

  • Subscription OAuth cannot point at a non-Anthropic base URL (documented).
  • Subscription plans appear to prohibit unattended automation; API-key billing required for fleet use.

Cortex's dispatch path is an unattended fleet — so "subscription vs on-demand" isn't a dispatch-path choice at all. The note reframes the axis around attended vs unattended paths.

⚠️ The ToS constraint is the note's load-bearing input and has the WEAKEST sourcing (a support article + a third-party summary of a Feb 2026 update — not linked ToS text). It is marked LOW confidence and flagged for confirmation with Anthropic. It is deliberately not laundered into a conclusion.

Also surfaces a pre-existing compliance question (not introduced by #2055)

ClaudeCodeHarness spawns claude --print unattended. If those subprocesses inherit a machine's interactive OAuth subscription, that is the pattern the terms appear to bar — today, independent of this epic. Tracked separately.

Proposal

Fuel as a property any harness declares support for; next increment = claude-code consumes an inferenceProfile, translating a resolved profile → subprocess env. ClaudeCodeHarness already owns DispatchRequestCCSessionOpts, so this is in its remit.

The Phase 0 work is the prerequisite, not a detour: inference.profiles already describes fuel for any harness; the registry already resolves profile → concrete thing (a ModelProvider for api-agent; env vars for claude-code); HarnessResolver is the injection point.

Risks recorded honestly: non-Anthropic tool-use fidelity behind a translating proxy is undocumented and may degrade silently (cheap fuel is not free — needs per-model evidence); fuel is a lattice with holes, not a clean product.

Decisions F1–F5 recorded, plus 5 open questions.

🤖 Generated with Claude Code

Captures the analysis that inferenceProfile is scoped to one substrate, so
cortex cannot express "full harness + cheaper fuel" — the combination that
reaches the expensive (coding-agent) workload.

Verified against Claude Code docs: base-URL override, auth precedence, model
selection and cloud backends are all documented and separable. Two findings
narrow the idea: subscription OAuth cannot target a non-Anthropic endpoint,
and subscription plans appear to bar unattended automation (LOW confidence
sourcing — flagged for confirmation, not asserted).

Surfaces a pre-existing compliance question independent of epic #2055.

Refs #2055
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation next Next up after current work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant