Skip to main content

hash-edit (Python)

Line-hash anchored read/edit/write for AI coding agents — windowed reads, strict version checks, atomic writes.

Install

pip install hash-edit
# or
uv add hash-edit

Quick start

from hash_edit import HashEditHarness

h = HashEditHarness("/path/to/project")

# 1. Read — returns rendered lines with hashes and a full-file version digest
result = h.read("src/app.py")
# result["version"]  == "4a3f..."
# result["lines"]    == ["1:ab|import os", "2:cd|", "3:ef|def main(): ..."]
# result["total_lines"] == 3

# 2. Edit — anchored ops verified against expected_version
h.edit(
    "src/app.py",
    [
        {"op": "replace", "line": 3, "hash": "ef", "lines": ["def main():", "    pass"]},
    ],
    expected_version=result["version"],
)

# 3. Write — safely create or overwrite; expected_version required when overwriting
h.write("src/new_file.py", "# new content\n")

Windowed reads

For large files, pass start_line / end_line to read only the lines you need (saves 55–87% tokens):

result = h.read("src/app.py", start_line=100, end_line=150)
# result["lines"]       — 51 rendered lines, numbered 100–150
# result["total_lines"] — full file length (e.g. 1 200)
# result["version"]     — full-file digest, same as a whole-file read

The version is always the full-file blake2s digest, so a windowed read still gives you a valid expected_version to pass to edit().

Error classes

Error When it is raised
VersionConflictError The file changed between your last read() and the current edit() or write()
AnchorMismatchError A hash field does not match the current line; the error message includes updated rendered context so the agent can retry immediately
InvalidOperationError The edit payload is structurally invalid (missing field, out-of-range line, no-op replace, etc.)
PathEscapeError The requested path resolves outside the configured root directory
MixedNewlineError The file mixes newline styles (\n, \r\n, \r) and is rejected before mutation
FileEncodingError The file cannot be decoded with the configured encoding (UTF-8 by default)

All six inherit from HashEditError.

Further reading

Metadata

Release files for hash-edit 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hash-edit 0.1.0
File Size Uploaded
hash_edit-0.1.0.tar.gz 7.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hash-edit 0.1.0
File Interpreter ABI Platform
hash_edit-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 16.8 kB

Release files / hash_edit-0.1.0.tar.gz

Download URL hash_edit-0.1.0.tar.gz
Size 7.7 kB
Tags Source
SHA-256 checksum
How to use checksums
89d815a7825038458f8b3974664e85f240cb48e231aa2c20728233fce8bbfe57
BLAKE2b-256 checksum
How to use checksums
17a36268dd2a44a7d73db2be8bd60bdb406a70dda2deab74e35b23414c9edf61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / hash_edit-0.1.0-py3-none-any.whl

Download URL hash_edit-0.1.0-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
206a68efa46f39d87a1eb21c5c8abad08deffda618d74acec3115c4e556b0650
BLAKE2b-256 checksum
How to use checksums
7c7e3afe09f8511044d6b1bc611d342e2f31d39b7342e597998322bbaf4d14af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page