Skip to main content

Runtime safety layer for LLM agents. Detects token spirals, kills doomed tasks early, tells you why.

Project description

state-harness ๐ŸŒ€

Rust Core Python SDK License: Split BSL/Apache

Runtime safety layer for LLM agents. Detects runaway token spirals, kills doomed tasks early, and tells you exactly why they failed โ€” before they burn your budget.

from state_harness import GrowthRatioGuard, FailureReport

guard = GrowthRatioGuard(token_budget=50_000)

with guard:
    for turn in agent_loop:
        result = llm.invoke(turn.prompt)
        guard.record_step(tokens_used=result.usage.total_tokens)

# What went wrong? (zero-cost, no LLM calls)
report = FailureReport.from_guard(guard)
print(report)
โš ๏ธ  STABILITY TRIPPED at turn 12

Pattern: Context Accumulation Spiral (confidence: 92%)
  โ€ข Last 5 turns all exceeded 1.5ร— baseline (4/4 were accelerating).
  โ€ข Peak growth ratio: 5.2ร— baseline.
  โ€ข Without intervention, projected cost was $0.0396 (actual: $0.0039).

Energy: โ–โ–โ–โ–โ–โ–‚โ–‚โ–ƒโ–„โ–†โ–ˆ
  Baseline: 1050 tokens/turn
  Peak ratio: 5.2ร— baseline

Cost: $0.0039 (saved ~$0.0357 by tripping early)

Suggested actions:
  ๐Ÿ”ด 1. Enable RG history compression in your agent loop.
     โ†’ Compressing older messages reduces prompt tokens by 40-60%.
  ๐ŸŸก 2. Lower the growth ratio threshold to 1.8ร—.
     โ†’ A lower threshold would have caught it earlier.
  ๐ŸŸข 3. Add a sliding-window context strategy.
     โ†’ Send only the last N messages plus a summary of earlier ones.

Why this exists

Every team running LLM agents in production has experienced this: an agent gets stuck in a loop, token usage spirals, and you find a $15 charge for a single failed request the next morning.

Existing solutions are either too simple (hard budget caps that kill tasks indiscriminately) or too complex (platforms requiring dashboards, infrastructure, and vendor lock-in).

State-harness is a library, not a platform. pip install and go. It uses Lyapunov stability theory to detect runaway behavior before it becomes expensive โ€” and when it does trip, it tells you exactly what went wrong and how to fix it.

What it catches

Pattern Signal Example
Context Spiral Token growth accelerating beyond baseline Agent replaying full history each turn
Retry Storm Low-variance repeated calls Tool failing, agent retrying identically
Policy Drift VSA similarity score dropping Agent going off-topic mid-conversation
Early Explosion Token spike in first 3 turns Oversized system prompt or tool response
Budget Exhaustion Cumulative spend hits ceiling Complex task, not necessarily broken

Installation

pip install state-harness

Requires Python โ‰ฅ 3.10. Pre-built wheels are available for Linux, macOS, and Windows (x86_64 and ARM64). No Rust toolchain needed.

From source (for development)

git clone https://github.com/vishal-dehurdle/state-harness.git
cd state-harness

python -m venv .venv && source .venv/bin/activate

# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

pip install maturin
maturin develop --release

# Run tests
pip install pytest
pytest tests/

Quickstart

Basic: GrowthRatioGuard (recommended)

The GrowthRatioGuard normalizes token usage against a baseline, so it only trips on disproportionate growth โ€” not the natural growth of multi-turn context windows.

from state_harness import GrowthRatioGuard, StabilityViolation

guard = GrowthRatioGuard(
    token_budget=100_000,     # hard ceiling
    ratio_threshold=2.0,      # trip when turn is 2ร— the baseline
    window=3,                 # 3 consecutive escalating turns to trip
    budget_gate=8_000,        # don't trip until 8K tokens spent
)

with guard:
    for turn in agent_loop:
        try:
            result = llm.invoke(turn.prompt)
            guard.record_step(
                tokens_used=result.usage.total_tokens,
                errors=0,
            )
        except StabilityViolation as e:
            print(f"Agent killed: {e}")
            break

print(f"Total cost: {guard.total_tokens} tokens")
print(f"Baseline: {guard.baseline} tokens/turn")
print(f"Peak ratio: {guard.current_ratio}ร—")

Failure Diagnostics

After any execution (tripped or not), get a structured failure report:

from state_harness import FailureReport

report = FailureReport.from_guard(guard, model="gemini-2.5-flash")

# Human-readable terminal output
print(report)

# Structured dict for logging / dashboards
import json
print(json.dumps(report.to_dict(), indent=2))

The report classifies the failure pattern, provides evidence, estimates cost impact, and suggests specific fixes โ€” all without any LLM calls.

Classic: BoundaryGuard

For lower-level control using raw token counts (no normalization):

from state_harness import BoundaryGuard

with BoundaryGuard(token_budget=100_000, lambda_=1.0, window=5) as guard:
    for turn in agent_loop:
        result = llm.invoke(turn.prompt)
        guard.record_step(
            tokens_used=result.usage.total_tokens,
            errors=0,
            tool_name="search",
        )

Decorator: @boundary_guard

from state_harness import boundary_guard

@boundary_guard(
    token_budget=50_000,
    token_counter=lambda r: r.usage.total_tokens,
)
def agent_step(prompt: str):
    return llm.invoke(prompt)

Framework Integration

LangGraph

from state_harness import BoundaryGuard
from state_harness.adapters import LangGraphMiddleware

guard = BoundaryGuard(token_budget=150_000)
middleware = LangGraphMiddleware(guard)

@middleware.wrap_tool
def search_database(query: str):
    return db.search(query)

with guard:
    result = agent.invoke({"messages": [...]})

Vanilla Python Hooks

from state_harness import BoundaryGuard
from state_harness.adapters import VanillaHook

guard = BoundaryGuard(token_budget=50_000)
hook = VanillaHook(guard)

with guard:
    for step in agent_loop:
        hook.before_call(tool_name="search")
        result = execute_tool(step)
        hook.after_call(tokens_used=result.tokens)

Architecture

State-harness combines three physics-inspired mechanisms, implemented in Rust for microsecond-speed enforcement:

Agent Loop
    โ”‚
    โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  GrowthRatioGuard (Python SDK)          โ”‚
โ”‚  โ”œโ”€โ”€ Normalizes tokens โ†’ growth ratio   โ”‚
โ”‚  โ”œโ”€โ”€ Warmup baseline (first N turns)    โ”‚
โ”‚  โ””โ”€โ”€ Budget gate (min spend before trip)โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
               โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ–ผ          โ–ผ          โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚Lyapunovโ”‚ โ”‚  RG    โ”‚ โ”‚Holographic โ”‚
โ”‚Monitor โ”‚ โ”‚Decim.  โ”‚ โ”‚  Engine    โ”‚
โ”‚        โ”‚ โ”‚        โ”‚ โ”‚   (VSA)    โ”‚
โ”‚V(k)=S+ฮปฮธโ”‚ โ”‚TF-IDF โ”‚ โ”‚ Drift     โ”‚
โ”‚ฮ”V โ‰ฅ 0? โ”‚ โ”‚Compressโ”‚ โ”‚ Detection โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
   Rust        Rust        Rust
Component Purpose Speed
Lyapunov Monitor Tracks energy derivative ฮ”V(k). Trips when ฮ”V โ‰ฅ 0 for W consecutive steps. ~1ฮผs/step
RG Decimator Compresses conversation history using TF-IDF scoring. Retains structurally important messages. ~100ฮผs/compress
Holographic Engine VSA-based policy drift detection. Binds domain invariants to high-dimensional vectors. ~10ฮผs/check

Benchmarks

Evaluated across three complementary benchmarks spanning customer service, software engineering, and multi-turn reasoning. Full methodology and data in the research paper.

Summary: Token savings scale with loop length

Benchmark Avg Turns Token Savings Trip Rate Pass-Rate Impact
MINT (reasoning + coding) 1โ€“5 0.8% 0% None (29.2% โ†’ 28.5%)
ฯ„ยณ-bench (customer service) 3โ€“10 9% ~5% None (58% preserved)
SWE-bench Verified (coding) 10โ€“50 49.5% 43% 10/15 resolved preserved

Key finding: The monitor is non-invasive on short-loop agents (0โ€“9% savings, zero false trips) and highly effective on long-loop agents where token spirals concentrate (49.5% savings, 68.8% precision).

SWE-bench Verified (central result)

37 Django instances from SWE-bench Verified. Agent: moatless-tools SearchTree with 50-node budget. Model: Gemini 2.5 Flash.

Metric Baseline State-Harness (ฯ„=3.0, W=5)
Total tokens 19,838,665 10,011,520
Token savings โ€” 49.5%
Resolved 15 / 37 10 / 37
Precision โ€” 68.8%

The worst spirals โ€” failed tasks consuming 1.5โ€“1.6M tokens โ€” are terminated at 74โ€“83% savings per task. The guard trips at a median of node 23 (~46% through the budget), early enough for substantial savings but late enough for calibration.

Threshold sensitivity (Pareto frontier):

ฯ„ W Trips Token Savings Resolved Preserved Precision
1.5 3 32 83.1% 3 / 15 62.5%
2.0 5 27 69.1% 6 / 15 66.7%
3.0 5 16 49.5% 10 / 15 68.8%
5.0 3 9 24.0% 12 / 15 66.7%

ฯ„ยณ-bench Airline

50 tasks ร— 3 configurations. Agent handles airline reservations via tool calls.

Config Pass Rate Token Savings Notes
Baseline (no guard) 58% โ€” Full agent loop, no monitoring
Naive Cap (100K) 58% 0% No airline task exceeds cap
State-Harness (ฯ„=2.0) 58% 9% Non-invasive: same pass rate, fewer tokens

The naive cap achieves 0% savings because no airline task exceeds 100K tokens โ€” confirming that hard budget caps provide no value when set above the task's natural consumption envelope.

MINT (non-invasiveness validation)

284 tasks across GSM8K (48), MATH (100), HumanEval (45), MBPP (91). Agent uses up to 5 turns per task.

Category Baseline Success Harness Success Token Savings
reasoning/gsm8k 91.7% 91.7% 3.0%
reasoning/math 39.0% 37.0% โˆ’0.3%
coding/humaneval 0.0% 0.0% 2.8%
coding/mbpp 0.0% 0.0% 0.4%
Total 29.2% 28.5% 0.8%

Zero stability violations recorded. The monitor correctly identifies short-loop tasks as stable and does not intervene.

Reproducing the benchmarks

ฯ„ยณ-bench reproduction steps
# 1. Clone both repos
git clone https://github.com/vishal-dehurdle/state-harness.git
git clone https://github.com/sierra-research/tau-bench.git tau3-bench

# 2. Install state-harness
cd state-harness
python -m venv .venv && source .venv/bin/activate
pip install maturin && maturin develop --release

# 3. Install ฯ„ยณ-bench (with state-harness agent)
cd ../tau3-bench
uv sync
cp ../state-harness/tau3_integration/harness_agent.py src/tau2/agent/
cp ../state-harness/tau3_integration/naive_cap_agent.py src/tau2/agent/

# 4. Configure Vertex AI
export GOOGLE_CLOUD_PROJECT=your-project-id
export VERTEXAI_LOCATION=asia-south1  # or your preferred region

# 5. Run full benchmark
cd ../state-harness
./benchmarks/run_full_benchmark.sh

Per-domain threshold tuning:

Domain ฯ„ Budget Gate Rationale
Airline 2.0 8,000 Simple lookups; spirals are clear
Retail 2.5 12,000 Multi-item orders need more tokens per turn
Telecom 2.0 8,000 Sequential workflows; similar to airline

See benchmarks/ for full setup, configs, and reproduction instructions for all three benchmarks.

Future evaluations

  • Terminal-Bench โ€” Terminal-based agent tasks; tests command-line tool loops where spirals manifest as repeated failed commands
  • SWE-bench Pro โ€” Harder, contamination-resistant variant of SWE-bench
  • LiveCodeBench โ€” Freshly sampled coding problems with no training data overlap
  • Cross-model validation โ€” GPT-4o, Claude Sonnet 4, Llama 4 to validate model-agnosticity

Planned features

  • Adaptive threshold โ€” Auto-calibrate ฯ„ from warmup dynamics instead of fixed per-domain defaults
  • Causal intervention โ€” Instead of killing spiraling tasks, redirect them (e.g., inject summary, reset context)
  • Streaming support โ€” Real-time monitoring for streaming/voice agents

Configuration Guide

Parameter Default Description
token_budget 100,000 Hard ceiling on cumulative tokens
ratio_threshold 2.0 Growth ratio above which a turn counts as "escalating" (domain-tuned: airline=2.0, retail=2.5, telecom=2.0)
window 3 Consecutive escalating turns before circuit breaker trips
warmup_turns 3 Turns used to establish baseline (no monitoring during warmup)
budget_gate 8,000 Minimum cumulative tokens before the monitor can trip (retail: 12,000)
lambda_ 1.0 Error weighting in the Lyapunov energy function

Environment variable overrides (highest precedence, for threshold sweeps):

Env Var Description
HARNESS_RATIO_THRESHOLD Override ratio_threshold (e.g., 2.5)
HARNESS_BUDGET_GATE Override budget_gate (e.g., 12000)

Tuning tips:

  • More aggressive (catch spirals earlier): ratio_threshold=1.8, window=2
  • More conservative (fewer false positives): ratio_threshold=2.5, window=3
  • High-value tasks: Increase budget_gate to 20K+ to let expensive tasks run longer
  • Complex domains (retail, multi-tool): Start with ratio_threshold=2.5

Theoretical Foundations

State-harness applies control theory to LLM agent execution:

  • Lyapunov stability: The energy function V(k) = S(k) + ฮปฮธ(k) models token consumption as a dynamical system. When ฮ”V โ‰ฅ 0 for W consecutive steps, the system is provably unstable.
  • Renormalization Group (RG) theory: Message compression is modeled as coarse-graining โ€” eliminating high-frequency noise while preserving scale-invariant task objectives.
  • Vector Symbolic Architecture (VSA): Domain policies are bound to high-dimensional bipolar vectors (10,000-d, i8 space), enabling constant-time semantic drift detection outside the LLM context window.

Research

This library implements the framework described in:

Empirical Lyapunov Stability: Growth-Ratio Energy Functions as Leading Indicators of Agent Task Failure Vishal Verma, 2026 Read the full paper โ†’

Key findings from the paper:

  • Growth-ratio normalization achieves 49.5% token savings on SWE-bench with 68.8% precision
  • The monitor is non-invasive on short-loop agents (0.8% savings on MINT, zero false trips)
  • Token savings scale with loop length: 0.8% โ†’ 9% โ†’ 49.5% (MINT โ†’ ฯ„ยณ โ†’ SWE-bench)
  • The guard trips at a median of node 23 (~46% through the budget), early enough for savings, late enough for calibration

Based on the theoretical framework from:

The Fluid Dynamics of Multi-Agent AI: Resolving d'Alembert's Paradox of Generative Workflows Vishal Verma, 2026 Read โ†’


Contributing

Contributions are welcome. See CONTRIBUTING.md for dev environment setup, code style, and PR guidelines.


Security

For security vulnerabilities, see SECURITY.md. Please do not open public issues for security reports.


License

Split-core licensing:

Component License Notes
Rust Core (src/) BSL 1.1 Free for non-commercial + ARR < $1M. Converts to Apache 2.0 on May 26, 2030.
Python SDK (python/) Apache 2.0 Fully permissive.

See LICENSE.md for full details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

state_harness-0.2.0.tar.gz (103.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

state_harness-0.2.0-cp312-cp312-win_amd64.whl (264.9 kB view details)

Uploaded CPython 3.12Windows x86-64

state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (414.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (412.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl (367.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl (370.1 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

state_harness-0.2.0-cp311-cp311-win_amd64.whl (266.8 kB view details)

Uploaded CPython 3.11Windows x86-64

state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (416.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (411.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl (369.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl (373.2 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

state_harness-0.2.0-cp310-cp310-win_amd64.whl (268.8 kB view details)

Uploaded CPython 3.10Windows x86-64

state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (419.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (411.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl (368.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl (373.0 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file state_harness-0.2.0.tar.gz.

File metadata

  • Download URL: state_harness-0.2.0.tar.gz
  • Upload date:
  • Size: 103.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for state_harness-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f276485e416191956512a151ee396b4c829a8fd70bbcd17649b975c18a0a6825
MD5 6c8b9dcfc8c6fd87f37b26bc21fbd9d4
BLAKE2b-256 4dfb440b624866d2d18e398acbab27828085453d44dfd56e5904c04eb45ea69f

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0.tar.gz:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 44132a076e6c53c5be89ae6b65d3c245a00b4b52cef2ea3739bba3d9271379bf
MD5 9cfce33162d3bf94fbe61c6a33c1c07c
BLAKE2b-256 6c77340355010a6b98b99c6817b93526fd50dfe27ca7c96488b35a3aaa94cf5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d59ceeae4bb46eddd3e3e1866ca9ebf41ab46ee041e7585c6a969dc112eb39c
MD5 3c4714be9d0359821f29f682d602dc7c
BLAKE2b-256 4e98fe4b7adde4e093f2df2881bc93822dc293b5a5ff3f97f739824530362812

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4b0d48fdd3bc9e940bb53907d12cbfbc3165208669302966ffc735aa9734a7dc
MD5 191ac7a9ef4fc67298ce279b5f693e10
BLAKE2b-256 9791bdb93934465715d3cf1e9e6458fb379abf8208d81bf3cd2d13e313429452

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a0fef2bf5be4d23d5ff0ad361f2d71e4e6cde118a6e708d6aac77c22ef619ae9
MD5 ddbcd5680ed51144382a0d8140b0a950
BLAKE2b-256 a55126c8c054de8f1c1b8253fbe28337b2814570cfda002438494106a329ab68

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5e2bde8a31ff72b9780a0c572e8e7eae7787d4d30e309569323e7b9f7f70cdbf
MD5 6a5db37a1dd13bc7444b1eaa51ed403c
BLAKE2b-256 cfd81e4b79f89cbb92eec40ff9c4478d8f57acfad0cf4f6977daa13f8b0c0994

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8c6c4851d606aec5b602c80a3655a24d5dd9af0b67b902e221fb6b45098dc21e
MD5 076d0bb974fc0ff0f3967f162a92d7a4
BLAKE2b-256 62c4ef8b6a04d640bea695b3f7d8a0aa92ea3db510494159085a430a8c820f92

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-win_amd64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 35302ca9a8c7595a4a5dad1e4e4ad74da47fd153d62d7d5a1ef438c0dd0f8115
MD5 cfd124200d6fbfce581e47e64fe927e3
BLAKE2b-256 efa7cf6090aa27fdbbdcdb24e5d049c0e2720ebf3c76ac05c8907d5357f4b3ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a76520f1fbba5cb9b646c34cdd1099c6385daf22a75ba141ab11d2e1347bfe47
MD5 81c3c6b0d2006793f0496ec3eea9274b
BLAKE2b-256 97d0493bccb068bdad2ec29964d371eb9ae1f893181731eb94509eac9caaf8f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2bdbc6bcd2bdb9f57bed5ace30055a1106f6425cbcf35d9d46808f6bb383e23f
MD5 032fe9b584924a190c6f176bd8238f03
BLAKE2b-256 7e4dd44417851caea21392ca0d2b751378c9a4aa8ae388012ae4b993b1d6890d

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 65f49c2788a27309c02c8acf830656929d4b306d47b9c4165e76fdeb5420fa16
MD5 621b4268355eb9c3a71068b16df9d813
BLAKE2b-256 2e0a161f6c37fe993810e44e180005f890271f6d58cdafeea7c4e42042bb2654

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 12fac44fec4cb3324e26a5f7b29757ba17bcf2f851fa83d238fdfe8f6559d7da
MD5 91545cad99df95d436969b624b7e2a36
BLAKE2b-256 3a33d9cbc6114789bb26ac538aec63745871eaec4d97a7a59f802063dfada3ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-win_amd64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dcaa216118fcd3d116d2c471fd66992109e82d2dc9888b1522fe3f525bfdcc30
MD5 38b09b68fb37e408ba1712118b0ffe54
BLAKE2b-256 c59e073da404b20147d61fcd29c7cdda4076dcbfdc3df2cd0e62c0b5cbdd1fa4

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 aacf6c3d846b7e813966711e136d046eedcc9c6dfaec711917ee7442788b18d7
MD5 d150764900d3c47a5d245a3ab9c43055
BLAKE2b-256 d9fc5313f12170c90da979951ff0b18e9d57da900fdfe49e0fad414a2a7b9a56

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 846d920f115ee30ab7b2d06efe72d6c047b22b294d0691a9a30c576a9305dd0b
MD5 47aef25f7f8452d329212a9c0583da58
BLAKE2b-256 145778d2b885ed51296e3c9c2f642f1e041c6336015e7399fab18b14ecc49735

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4b3f8a177ff467e36d97c2d90a4509db5ec53f18603fbe432d83aafd7b7d28af
MD5 cadd83a00fce14a0d2a5b8697b7c9182
BLAKE2b-256 6b401e713e02bb77c77d05a53e34960488095147a2df377b843b3e104ceb9b89

See more details on using hashes here.

Provenance

The following attestation bundles were made for state_harness-0.2.0-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: release.yml on vishal-dehurdle/state-harness

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page