thruwire/foreman on GitHub
- Stars
- 538
- Forks
- 40
- Language
- Python
- License
- MIT
- Last push
- 22 Sep 2026
Read from GitHub on . Counts change daily.
Foreman sits above a Codex or OpenCode coding agent as a supervisor rather than another worker. You give it a ticket, a spec, or a bug report, and the underlying agent does the actual engineering while Foreman independently watches and judges: is the implementation complete, are the requirements met, are the tests sufficient, does this need more verification, or does a human need to step in.
The two systems run as concurrent loops rather than a strict pipeline. Foreman doesn’t replace the worker’s own reason-tool-observe cycle or choose its files or tools; the worker keeps running while its output and lifecycle events stream into a separate, debounced observation loop that Jev evaluates. Each check, such as “is this worker stuck?”, is one Jev noul question whose result is the probability of yes, and all active checks go to Jev in one parallel request. The README says Jev interests thruwire because it takes structured state and typed questions and evaluates several of them independently in one request.
The README is explicit that Foreman is an architectural experiment testing whether this shape of model supports frequent semantic supervision, not a claim that it already outperforms a conventional coding-agent setup.
How it uses Jev
if self._client is None:
self._client = client
try:
response = await asyncio.wait_for(
client.system_one(
state=observation.model_dump(mode="json"),
questions=questions,
model=self.model,
timeout=self.timeout_seconds,
),
timeout=self.timeout_seconds + 0.5,
)
return parse_jev_response(response, checks)
except TimeoutError as error:
raise ForemanModelError("Jev assessment timed out") from error
