Skip to content

Run a turn without a host - #3

Merged
eastriverlee merged 1 commit into
mainfrom
feat/standalone-runner
Aug 4, 2026
Merged

Run a turn without a host#3
eastriverlee merged 1 commit into
mainfrom
feat/standalone-runner

Conversation

@eastriverlee

Copy link
Copy Markdown
Contributor

The README called bluecollar headless and embeddable, but the only way to
see it run was to embed it — so the claim could not be checked without
writing a host first.

What is here

cmd/bluecollar runs one turn against any OpenAI-compatible endpoint and
prints the event ledger to stderr.

model/openaicompatible is the provider behind it, and the first
implementation of the provider port shipped in this module. It is net/http
and encoding/json, so go.mod still requires exactly one library.

ollama serve &
go run ./cmd/bluecollar --model qwen3:4b "In one sentence, what is a POSIX user?"

Evidence

Verified end to end against Ollama qwen3:4b:

task.created  In one sentence, what is a POSIX user?
task.running  assistant
agent.instructions_loaded  {"activeGoal":{"outcomeContract":{"artifactRequirement":"none"…
agent.step_working_set  {"step":1}
agent.tool_palette.built  {"step":1}
llm.call  {"kind":"structured","schemaName":"bluecollar_agent_turn_action","model":"qwen3:4b"…
agent.action  {"action":"finish"…
task.completed
agent.intake  {"classification":"quick_reply","taskShape":"immediate_reply","level":"low"…
agent.goal.completed  {"goalID":"b2886966…"}

go build ./..., go vet ./..., go test ./... pass.

What it deliberately does not do

The runner has no tools. Giving it any would make this a coding agent,
which is the thing the positioning says it is not; a host supplies the tool
set. What it demonstrates is the loop: intake classification, the outcome
contract, the structured action schema, the completion gate — each one a
ledger entry.

README corrections

Two statements had gone stale and one was never right:

  • "There is no provider implementation in this module" — there is one now.
  • "the only way to drive the loop is to embed it in a host" — no longer true.
  • "A terminal front end of its own. Planned on termcn" — termcn is
    TypeScript/React+Ink, so a Go module cannot build on it, and no front end is
    planned here. The interface belongs to whichever host embeds the loop. The
    bullet now says that.

Also trimmed two negative-parallel constructions to get the README from one
per 180 words to one per 300 (AGENTS.md budgets one per 500).

The README called bluecollar headless and embeddable, but the only way to
see it run was to embed it, so the claim could not be checked without
writing a host first. Anyone evaluating the loop had to take the design on
faith.

`cmd/bluecollar` runs one turn against any OpenAI-compatible endpoint and
prints the event ledger to stderr. `model/openaicompatible` is the provider
behind it — the first implementation of the provider port shipped in this
module, which keeps go.mod at one library since it is net/http and
encoding/json.

The runner has no tools. Giving it any would make this a coding agent,
which is the thing the positioning says it is not; a host supplies the tool
set. What it demonstrates is the loop itself: intake classification, the
outcome contract, the structured action schema, the completion gate, and
every one of them as a ledger entry.

Verified end to end against Ollama qwen3:4b — task.created through
task.completed, with agent.intake and agent.goal.completed recorded.
@eastriverlee
eastriverlee merged commit f2750e9 into main Aug 4, 2026
1 check passed
@eastriverlee
eastriverlee deleted the feat/standalone-runner branch August 4, 2026 23:50
eastriverlee added a commit that referenced this pull request Aug 5, 2026
The README called bluecollar headless and embeddable, but the only way to
see it run was to embed it, so the claim could not be checked without
writing a host first. Anyone evaluating the loop had to take the design on
faith.

`cmd/bluecollar` runs one turn against any OpenAI-compatible endpoint and
prints the event ledger to stderr. `model/openaicompatible` is the provider
behind it — the first implementation of the provider port shipped in this
module, which keeps go.mod at one library since it is net/http and
encoding/json.

The runner has no tools. Giving it any would make this a coding agent,
which is the thing the positioning says it is not; a host supplies the tool
set. What it demonstrates is the loop itself: intake classification, the
outcome contract, the structured action schema, the completion gate, and
every one of them as a ledger entry.

Verified end to end against Ollama qwen3:4b — task.created through
task.completed, with agent.intake and agent.goal.completed recorded.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant