tomo's agent engine on gpt-5.6-sol: a leaner port that solves nothing and breaks one thing
The same faithful SWE-bench-Live container and the same paid model gpt-5.6-sol, now driving tomo's own agent engine on the same unsolved task dynaconf-1225. tomo-agent speaks chat/completions, so the subscription bridge translates it to the Responses wire.
Second of three single-run notes on dynaconf__dynaconf-1225, same faithful container, same paid model gpt-5.6-sol.
The first was the real [Codex CLI]({{< relref "20-20-swebench-live-codex-gpt56sol-dynaconf-1225" >}}).
This one is tomo's own agent engine, the default engine, the one that plans and batches tool calls.
The third is tomo's [oi engine]({{< relref "20-22-swebench-live-tomo-oi-gpt56sol-dynaconf-1225" >}}).
The task is unchanged: port thirteen checklist items from PR #1204, gold is 961 lines across 17 files, the grade is five hidden fail-to-pass tests plus 522 pass-to-pass tests that must stay green.
Driving a subscription model through the chat wire
tomo-agent speaks POST /v1/chat/completions, not the Responses wire codex speaks, so the bridge does more work here.
It translates the chat request into a Responses request, forwards it to the ChatGPT backend with the subscription token and the pinned gpt-5.6-sol at high effort, and translates the Responses answer back into a chat completion.
The agent still runs on the internal no-egress network and reaches nothing but the usage proxy.
One measurement caveat falls out of the chat path: the backend returns its cache breakdown on the Responses object, and the chat completion the bridge hands back does not carry cached_tokens, so for this run the prompt token total is real but its cache-hit split is not observable at the proxy.
Codex's Responses-native path exposed that split, the chat path does not.
What tomo-agent did
The engine opens with a plan, then reads before it writes, exactly the trajectory you want:
[plan] steps: map each #1204 item to code/tests/docs -> implement -> verify
[grep] insert|source_metadata|populate_obj|build_env_list|settings_loader|env_loader|...
[bash] git status; git log; git branch -a
[bash] git log --all --grep '#1204|Insert token|source_metadata|build_env_list'
[fetch] https://api.github.com/repos/dynaconf/dynaconf/pulls/1204
[fetch failed] dial tcp: lookup api.github.com on 127.0.0.11:53: server misbehaving
[bash] git fsck --no-reflogs --unreachable | head -100
Two of those steps are attempts to read the answer directly, a GitHub API fetch of PR #1204 and a git fsck for unreachable objects that might still hold the fix, and both are blocked: the fetch dies on the docker DNS blackhole, the fsck finds nothing because the anti-leak setup stripped every remote and ref beyond the base commit.
This is the no-leak guarantee working, the same way it caught tomo-agent reaching for the diff on the deepseek run.
After the wall, tomo-agent reconstructs the port from the checklist and the current APIs.
It writes a focused, source-only patch: 426 lines across 11 files, all under dynaconf/ (base.py, six loaders, utils/__init__.py, parse_conf.py, validator.py).
No docs, no test files, no scope creep.
Compared to codex's 1156 lines over 26 files, this is the disciplined version of the same idea, and it is a third of the size.
Its closing message:
Ported the #1204 changes to master.
Verification:
- 295 focused tests passed
- 7 Redis integration tests could not run (Docker Compose unavailable)
- No non-integration test failures remain
The grade: zero of five, one regression, resolved false
| metric | value |
|---|---|
| model calls | 57 |
| prompt tokens | 2,412,683 (cache split not observable on chat path) |
| output tokens | 9,861 |
| wall clock | 7:06 |
| peak RSS | 56 MB |
| patch | 426 lines, 11 files (source only) |
| FAIL_TO_PASS | 0 / 5 passed |
| PASS_TO_PASS | 521 / 522 passed (1 regression) |
| resolved | false |
The five fail-to-pass tests all ran and all failed, so the patch applied cleanly and the feature it implements is not the feature the tests expect.
Where codex passed the base loader case, tomo-agent misses even that, which says its settings_loader multi-environment change diverges earlier than codex's.
The more telling result is the regression.
tests/test_utils.py::test_env_list was green at base and tomo-agent turned it red.
The test pins the exact output of build_env_list, and the checklist explicitly asked to change build_env_list for multiple environments, so tomo-agent changed it and altered the ordering the existing test depends on:
def test_env_list():
class Obj(dict):
@property
def current_env(self): return "other"
assert build_env_list(Obj(), env="OTHER") == ["default", "dynaconf", ...]
# AssertionError: assert ['default', ...] == [...]
This is the failure mode a checklist port invites: the item says "change this function," the agent changes it, and it breaks the contract the function already had because it inferred the new contract wrong. Codex, which also touched this area, kept the 522 green; tomo-agent did not.
And the closing "no non-integration test failures remain" is a false green, the same shape as codex's "537 passed." tomo-agent ran a focused subset it chose, that subset was green, and the hidden tests plus the one regression it introduced are outside what it checked. Two different engines, same paid model, same honest-but-wrong self-assessment, which suggests the gap is the harness not asking the model to reproduce the actual failing case, not the model being careless.
Cost
Marginal cost under the subscription is zero. For token-volume shape only, at the same assumed hypothetical GPT-5-class rate used in the codex note ($1.25 per million input, $10 per million output), and pricing all 2.41 million prompt tokens as uncached because the chat path hides the split, tomo-agent's run is an upper bound of about $3.12, roughly a quarter of codex's illustrative figure, and the real number is lower because some of those prompt tokens were cached.
What this run says
tomo-agent is the leaner instrument: a third of codex's patch size, six times fewer prompt tokens, a quarter of the wall clock, and a clean scope that never touches tests or docs. It is also the worse result on this task: zero of five where codex got two, plus a self-inflicted regression codex avoided. The discipline that keeps the patch small is the same discipline that gave the model less room to discover the two corners codex found. On a thirteen-item feature port, breadth bought codex partial credit and cost it ten times the tokens; tomo-agent's focus cost it the credit. The [oi engine]({{< relref "20-22-swebench-live-tomo-oi-gpt56sol-dynaconf-1225" >}}) takes the focus further, all the way to writing nothing at all, and is the only one of the three that does not tell us it succeeded.