pytest-session-trace
Pytest plugin that turns a recorded agent session (Claude Code JSONL, henhouse tools.v1 JSON, or legacy call list) into deterministic tool-call assertions. No LLM in CI. No network. No MCP SDK.
Install
Python 3.10+. Requires henhouse:
pip install henhouse pytest-session-trace
Or install tagged releases from GitHub:
pip install git+https://github.com/gmhoward9289-ops/henhouse@v0.1.2
pip install git+https://github.com/gmhoward9289-ops/pytest-session-trace@v0.1.5
Develop from sibling clones under dev/:
pip install -e ../henhouse
pip install -e .
pytest tests -v --session-trace tests/fixtures/one_write.jsonl
Example
from session_trace.assert_tools import assert_tool_called, assert_tool_order
def test_wrote(session_trace):
assert_tool_called(session_trace, "Write")
assert_tool_order(session_trace, ["Write"])
Point the fixture at a transcript or henhouse envelope:
pytest --session-trace path/to/session.jsonl
pytest --session-trace path/to/calls.json
# or
set SESSION_TRACE=path/to/session.jsonl
If neither --session-trace nor SESSION_TRACE is set, tests that request the session_trace fixture are skipped so this plugin can be installed globally without breaking unrelated suites.
Recorders
roost and leghorn record and display live Claude Code sessions. This plugin only asserts against a saved JSONL or python -m henhouse output.
Parsing is delegated to henhouse (load_tool_calls, ToolCall).
Pair with pytest-mcp-contract in the same repo: that plugin asserts the MCP server registers the right tools, read-only annotations, and input JSON schemas; this plugin asserts a saved session actually called them. Public starter: pytest-mcp-contract/examples/proof_stack/. swamp-ops docs/SESSION_TRACE.md documents the private dogfood pattern.
python -m session_trace codegen emits assert_tool_input_contains for MCP args (query, repo, limit, …) as well as editor tools.
Optional extra [anchor] uses trust_but_anchor.locate to fail closed when a quoted argument is not in a source file:
pip install -e ".[anchor]"
Starter test from a transcript
python -m session_trace path/to/session.jsonl > test_session.py
python -m session_trace --anchor path/to/session.jsonl > test_session.py
With --anchor, codegen emits assert_arg_anchored when a Write/Edit contents
quotes text from a prior Read tool_result in the JSONL (requires [anchor] extra).
That file is a copy-pasteable starting point, not a required CI step for this package.
Have a recorded session and a pytest file that pins it? Post the workflow in Show and tell.
License
Apache-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 pytest_session_trace-0.1.6.tar.gz.
File metadata
- Download URL: pytest_session_trace-0.1.6.tar.gz
- Upload date:
- Size: 16.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef14138f5375c773acebf6acdf1fd358cd68a9c76c4095a7438f2a4d2a2bf6dc
|
|
| MD5 |
a3717bf8ba03071d5ec4293870191770
|
|
| BLAKE2b-256 |
47f9e7e4a653dab98d8332686885bd1f21522741bd79605d980b88cdee9f2b16
|
Provenance
The following attestation bundles were made for pytest_session_trace-0.1.6.tar.gz:
Publisher:
release.yml on gmhoward9289-ops/pytest-session-trace
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pytest_session_trace-0.1.6.tar.gz -
Subject digest:
ef14138f5375c773acebf6acdf1fd358cd68a9c76c4095a7438f2a4d2a2bf6dc - Sigstore transparency entry: 2535396754
- Sigstore integration time:
-
Permalink:
gmhoward9289-ops/pytest-session-trace@c3399c5f4c897e484a1d2e5ba257954a1c9da425 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/gmhoward9289-ops
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c3399c5f4c897e484a1d2e5ba257954a1c9da425 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pytest_session_trace-0.1.6-py3-none-any.whl.
File metadata
- Download URL: pytest_session_trace-0.1.6-py3-none-any.whl
- Upload date:
- Size: 16.0 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 |
aa974642f77afad0b258ced1009742bf1ec7e81ed19c1ae057c42e0f12aa3356
|
|
| MD5 |
aead91ed261087ff2632f4001cfeafb3
|
|
| BLAKE2b-256 |
ba634bfc68859978c1fef3bf78eb10fb4ecd8d1fdf8dee51afe7c21b7e580004
|
Provenance
The following attestation bundles were made for pytest_session_trace-0.1.6-py3-none-any.whl:
Publisher:
release.yml on gmhoward9289-ops/pytest-session-trace
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pytest_session_trace-0.1.6-py3-none-any.whl -
Subject digest:
aa974642f77afad0b258ced1009742bf1ec7e81ed19c1ae057c42e0f12aa3356 - Sigstore transparency entry: 2535397120
- Sigstore integration time:
-
Permalink:
gmhoward9289-ops/pytest-session-trace@c3399c5f4c897e484a1d2e5ba257954a1c9da425 -
Branch / Tag:
refs/tags/v0.1.6 - Owner: https://github.com/gmhoward9289-ops
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c3399c5f4c897e484a1d2e5ba257954a1c9da425 -
Trigger Event:
push
-
Statement type: