Prompt-only#

Prompt-only learns one instruction file. The adapter uses the prompt-only@1.0 template: a single ADAPTER.md given to the acting agent as context, with no tools. After every step a fresh session of the built-in Codex Evolver reads the step’s learning material (each task’s input, the agent’s output, the judge’s score and feedback, and the trajectory) and rewrites ADAPTER.md. Start here for an instruction-only adapter whose changes are easy to inspect.

Setup#

The learner is a Codex agent learner, so it needs the Codex CLI on PATH, Linux with bubblewrap for its sandbox, and a learner model on a backend that serves the Responses API.

template: prompt-only@1.0
evolver:
  name: codex
  resume: false                  # a fresh session every step
  params:
    model: fireworks/accounts/fireworks/models/glm-5p3-flash   # the learner: <backend>/<model id>
    args: ["-c", 'model_reasoning_effort="high"']
    home: []                     # no login files: the provider key is the backend's variable
    tools: [check_spec]          # the specification check only
    hide: []                     # the framework's examples, tests, docs and .git
sandbox:
  enabled: true
  network: restricted
trainer:
  output_dir: ~/runs/my-task     # outside the checkout: see `hide` below

This fragment belongs in a complete run config. The acting model is configured by your agent, separately from the learner.

How an update works#

Each step is one Codex session. It reads the task description and the adapter’s EVOLVER.md, studies the step’s results, edits ADAPTER.md, calls check_spec, and writes a report whose first line says what it changed. The run records each session as one call with its token totals; to count the session’s individual model requests, put a metering relay in front of the learner, as the examples’ launch.sh does (hermit/runtime/wire_meter.py). The Trainer then applies its specification checks. There is no validation-based improvement gate in this method: a structurally valid update can reduce task performance. The final adapter is the current one.

Parameters and defaults#

params:
  backend: codex
  prompt: START.md
  resume_prompt: RESUME.md
  args: []
  model: null                # the agent's model; null: its default
  price: null                # USD per million tokens {input, cached_input, output}
  home: [auth.json, .credentials.json]   # files of the agent's home copied into the run's
  tools: null                # the only Trainer tools the agent may use, e.g. [check_spec]; null: all
  hide: null                 # paths hidden from the agent besides examples/tests/docs/.git; null: nothing hidden

model binds the learner to a backend, which supplies its endpoint, key variable and price. args passes Codex settings, such as the reasoning effort or the model’s context window (-c model_context_window=...). tools: [check_spec] leaves the session only the specification check. hide lists paths the session must not read; any value, even [], also hides the framework checkout’s examples/, tests/, docs/ and .git, and with them a run written there, so keep trainer.output_dir outside the checkout.

examples/clbench_poker/prompt_only/, examples/clbench_database/prompt_only/ and examples/servelearnbench/prompt_only/ run this method as their streams’ baseline; their launch.sh sets the learner’s model and the run’s paths. Use a small smoke run before a long one, and evaluate with the same held-out protocol.