Run a turn without a host - #3
Merged
Merged
Conversation
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
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.
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.
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/bluecollarruns one turn against any OpenAI-compatible endpoint andprints the event ledger to stderr.
model/openaicompatibleis the provider behind it, and the firstimplementation of the provider port shipped in this module. It is
net/httpand
encoding/json, sogo.modstill requires exactly one library.Evidence
Verified end to end against Ollama
qwen3:4b: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:
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).