Journeyman
A process-quality benchmark for agents.
Journeyman measures how agents work — and how they fail.
STATUS: v1 engineering complete. Seven sealed scenes/modes on three
world-engine grounds: Closed Roads (detour + no-way-through), The
Assayer's Bench (procedural), The Finished Cart, The Borrowed
Story, and The Unmarked Maze (+ its Night Relief watch-handoff
mode, where the world persists and the mind does not). Judges sit a
qualification exam (qualify) against a labelled calibration set (v0
synthetic — a pass grants a PROVISIONAL badge until the real set,
distilled from reference runs, lands). Reference runs are archived under
runs-archive/, including the first full standard run.
Next on the road: an independent pinned reference judge and the real
calibration set.
What it will be
Most benchmarks score whether the task got done. Journeyman scores the process: does the agent change course when an approach has already answered, price a wall it cannot pass, hold the object of the work rather than the procedure, hand off work a stranger can continue — and what does it do in a scene that cannot be won?
- Measured unit: everything behind one OpenAI-compatible endpoint. No templates, no sandbox, no setup — scenes are fully simulated worlds.
- Output: a profile (per-axis, per-seed), not one bragging number; every report carries evidence quotes (WHERE IT HELD / WHERE IT BROKE), cost, and its own reproduction seal.
- Judging: pluggable. Default is the endpoint itself (dev mode, stamped NOT COMPARABLE). Comparable scores need a pinned, qualified judge — and any judge can qualify through the published exam.
- Reproducible: bit-exact reruns on local llama.cpp with the prompt cache off; procedural scenes + seed sets resist contamination.
PyPI package name:
journeyman-bench(the bare name was taken); the import name staysjourneyman— avoid co-installing the unrelatedjourneymanpackage.
Install & try
pip install journeyman-bench # zero dependencies, stdlib only
journeyman selftest # offline, no model needed
or straight from a checkout:
python3 -m journeyman selftest # offline, no model needed
python3 -m journeyman run --endpoint http://localhost:8080 --model my-agent
python3 -m journeyman qualify --judge http://localhost:8080 --judge-model my-judge
python3 -m journeyman report runs/<stamp> # re-render after re-judging
Layout
journeyman/
scene.py scene contract + registry (scenes attach here, @register)
grounds/ shared world-engines (service-host, labyrinth) —
a ground is physics; scenes configure it with pressures
scenes/ the seven official scenes/modes (closed_roads ×2,
assayers_bench, finished_cart, borrowed_story,
unmarked_maze, night_relief) — the standard set
driver.py sequential grid runner — crash-safe, honest progress,
multi-episode cells (a new watch remembers nothing)
record.py seals, cell records, events.jsonl (single source of truth)
judge.py pluggable judge, per-item calls, verdict echo required
qualify.py the judge qualification exam + calibration registry
report.py profile + evidence + repro seal, md + json
selftest.py offline end-to-end proof of the pipeline
Licensed under the Apache License 2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file journeyman_bench-0.0.1.tar.gz.
File metadata
- Download URL: journeyman_bench-0.0.1.tar.gz
- Upload date:
- Size: 44.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
819ad2516da253ddda6ffb6270d1991ebd82b384b408eff31744adf9b5f1faa5
|
|
| MD5 |
ec03d4f3513c4e213dd1c573cc137476
|
|
| BLAKE2b-256 |
6fc206cc9c8f6a19c03f93d69bab30855c5d9b0e0f10941f80b3fcfddf0f512a
|
Provenance
The following attestation bundles were made for journeyman_bench-0.0.1.tar.gz:
Publisher:
release.yml on codechu/journeyman
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
journeyman_bench-0.0.1.tar.gz -
Subject digest:
819ad2516da253ddda6ffb6270d1991ebd82b384b408eff31744adf9b5f1faa5 - Sigstore transparency entry: 2427361543
- Sigstore integration time:
-
Permalink:
codechu/journeyman@2ea383c43951e6e7a0e6d6f0809ee3c99a2f8699 -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/codechu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2ea383c43951e6e7a0e6d6f0809ee3c99a2f8699 -
Trigger Event:
push
-
Statement type:
File details
Details for the file journeyman_bench-0.0.1-py3-none-any.whl.
File metadata
- Download URL: journeyman_bench-0.0.1-py3-none-any.whl
- Upload date:
- Size: 46.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d32e61aa724cebe0b4a81ac4b4f1fcbb3e55e6506b2373be7bb88edd35357d4f
|
|
| MD5 |
7e380a712f56094032e22e4cc32a4716
|
|
| BLAKE2b-256 |
9e0834f418424851b5b980af51a07b10c2a8822cc84a718374e86999f2048784
|
Provenance
The following attestation bundles were made for journeyman_bench-0.0.1-py3-none-any.whl:
Publisher:
release.yml on codechu/journeyman
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
journeyman_bench-0.0.1-py3-none-any.whl -
Subject digest:
d32e61aa724cebe0b4a81ac4b4f1fcbb3e55e6506b2373be7bb88edd35357d4f - Sigstore transparency entry: 2427361636
- Sigstore integration time:
-
Permalink:
codechu/journeyman@2ea383c43951e6e7a0e6d6f0809ee3c99a2f8699 -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/codechu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2ea383c43951e6e7a0e6d6f0809ee3c99a2f8699 -
Trigger Event:
push
-
Statement type: