Skip to content

BYOS + usage limits: status, and 3 decisions I need #516

Description

@suleimansh

Status of the BYOS thread in one place. Two things I told you earlier were wrong.

Decisions I need

  1. BYOS: worker/runner level, or park? The ProviderAdapter version I pitched isn't worth building (why below). Worker level is a bigger job and a different shape than I sold you.
  2. Config location, only if 1 is a go: framework config (env-paths/XDG, like the dashboard prefs) or a separate dotfile.
  3. [The Framework] Background jobs #298 usage guard: start now? Independent of BYOS and unblocked.

What I got wrong

"Usage isn't readable" -> it is. claude -p --output-format stream-json already emits this free on every run. No extra endpoint, no polling, no 429s:

{"type":"rate_limit_event","rate_limit_info":{
  "status":"allowed","resetsAt":1784079000,"rateLimitType":"five_hour"}}

The binary has status = allowed|allowed_warning|rejected and rateLimitType = five_hour|seven_day|seven_day_opus|seven_day_sonnet|weekly. I only observed allowed/five_hour at runtime, the rest are strings in the binary, so that's evidence and not proof.

If allowed_warning fires like the name says, your original #298 design works off the free stream. No usedPercent though, that's all Traycer's private endpoint actually buys.

"BYOS is a new ProviderAdapter" -> it isn't. Our adapter contract is tools-in / tool-calls-out with the agent loop executing them, which is model-shaped. Claude Code is an agent that owns its own tool loop. Verified: told it to read a file, and the whole tool_use -> tool_result -> text ran inside the CLI.

So an adapter can only be generation-only, which throws away the agent and pays subscription prices for text completion. And codex and gemini have no tools-off flag at all, so that shape fits exactly one provider. These CLIs are peers of a worker, not of a model. It's the Runner seam, I named the wrong one of the two.

Detail and evidence on #496. Nothing committed.

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions