Skip to main content

Parsewall

Parsewall

Make every file inert before it reaches the model.

Release v1.0.0 Python 3.11+ Docker Compose ready

Fail closed Network-isolated worker Fixed JSON result

Quick start · Local install · Offline install · Codex plugin

Parsewall is a deterministic, fail-closed pre-LLM scanner for untrusted uploaded documents. It never asks an LLM to decide whether a document is safe. It parses bounded structures, renders visual formats, compares OCR with embedded text, and returns only this public result contract:

{
  "risk_level": "low | review | quarantine",
  "evidence": [],
  "location": [],
  "structural_anomalies": []
}

Even a low result does not make document content trusted. A low-only plain UTF-8 derivative is prefixed with an untrusted-data marker and must remain data, never an instruction source.

Install the Python CLI

python -m pip install parsewall
parsewall scan --input ./report.txt

The package also installs parsewall-api, parsewall-worker, and parsewall-mcp. The original document-firewall* commands remain available as compatibility aliases.

Use as a GitHub Action

Scan a checked-out document in a workflow. The action fails when the result reaches the configured fail-on level (quarantine by default).

steps:
  - uses: actions/checkout@v4
  - uses: gogooma125732/parsewall@v1
    id: parsewall
    with:
      input: path/to/document.pdf
      fail-on: review
  - run: echo "risk=${{ steps.parsewall.outputs.risk-level }}"

The action installs Parsewall in the runner environment and emits the fixed JSON result contract as an output.

Run the isolated HTTP product

docker compose up --build
curl -F file=@report.pdf http://127.0.0.1:8000/v1/scans

Open http://127.0.0.1:8000/ for the local browser upload interface. It uploads one supported file, follows the isolated worker status, displays only the fixed public result fields, and exposes a derivative download only for low results. The interactive OpenAPI explorer remains at /docs.

For the versioned one-command installation and operational checks, see deploy/LOCAL_INSTALL.md.

The API only accepts uploads and serves status/results. A separate worker scans jobs with no network, a read-only root filesystem, no Linux capabilities, and bounded CPU, memory, processes, and temporary storage.

Endpoints:

  • POST /v1/scans
  • GET /v1/scans/{job_id}
  • GET /v1/scans/{job_id}/result
  • GET /v1/scans/{job_id}/derivative (low results only)

Supported inputs are UTF-8/UTF-16 text, Markdown, HTML, DOCX, PPTX, XLSX, PDF, PNG, and JPEG. Unsupported, corrupt, encrypted, incomplete, or dependency- blocked scans fail closed.

Build distribution artifacts

Build the four distribution channels in order after the versioned Docker image exists locally:

python3 scripts/build_release.py --channel all --clean

Artifacts are written under dist/releases/<version>/ with SHA-256 hashes and a machine-readable release manifest:

  1. source-backed Docker Compose local installer (*-compose.tar.gz);
  2. architecture-specific offline Docker bundle (*-offline-<platform>.tar);
  3. Python wheel and sdist (python/);
  4. standalone Codex plugin and local marketplace ZIP files.

Installation details are in deploy/LOCAL_INSTALL.md, deploy/OFFLINE_INSTALL.md, deploy/PYTHON_CLI.md, and deploy/CODEX_PLUGIN.md.

Codex plugin and MCP

The distributable plugin is under plugins/document-injection-firewall. It contains the inspect-untrusted-files skill, a PreToolUse hook that blocks local raw-document reads, and an optional root-confined stdio MCP service.

Install the PyPI command and the Git-backed marketplace, then start a new Codex task:

uv tool install parsewall==1.0.0
codex plugin marketplace add gogooma125732/parsewall --ref main
codex plugin add document-injection-firewall@parsewall

Codex's current UserPromptSubmit hook schema exposes prompt text but not an attachment list, so the hook cannot claim to intercept native attachment ingestion. It is a local-tool guardrail; the skill and MCP workflow remain the mandatory pre-read gate.

Metadata

Release files for parsewall 1.0.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 parsewall 1.0.0
File Size Uploaded Provenance Actions
parsewall-1.0.0.tar.gz 1.6 MB Without provenance Details for parsewall-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for parsewall 1.0.0
File Interpreter ABI Platform Actions
parsewall-1.0.0-py3-none-any.whl Python 3 none any Details for parsewall-1.0.0-py3-none-any.whl

Total release size: 1.7 MB

Release files / parsewall-1.0.0.tar.gz

Download URL parsewall-1.0.0.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
1ae9cc0acbd5f8eb8a82787dd31d21e20502906835a6f63aac4e570aaaf5cee6
BLAKE2b-256 checksum
How to use checksums
f87b9b12718da51f2cf72e746a5c4f3977346f851bd6f5853e0bc74033bcacdf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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 / parsewall-1.0.0-py3-none-any.whl

Download URL parsewall-1.0.0-py3-none-any.whl
Size 56.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5c0554418c1d65648ad517734147b400fb69ee4673bdf5daca70b7b2e595e925
BLAKE2b-256 checksum
How to use checksums
b413fc629a5e9d28b72614334d0b7cc9de3463569ee01db71719d3f7449da71c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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}

Security for parsewall 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files No provenance

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