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.

Download files

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

Source Distribution

parsewall-1.0.0.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

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

parsewall-1.0.0-py3-none-any.whl (56.6 kB view details)

Uploaded Python 3

File details

Details for the file parsewall-1.0.0.tar.gz.

File metadata

  • Download URL: parsewall-1.0.0.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for parsewall-1.0.0.tar.gz
Algorithm Hash digest
SHA256 1ae9cc0acbd5f8eb8a82787dd31d21e20502906835a6f63aac4e570aaaf5cee6
MD5 43bcc26c6a00db1ffddee9c0ac9b349a
BLAKE2b-256 f87b9b12718da51f2cf72e746a5c4f3977346f851bd6f5853e0bc74033bcacdf

See more details on using hashes here.

File details

Details for the file parsewall-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: parsewall-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 56.6 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for parsewall-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5c0554418c1d65648ad517734147b400fb69ee4673bdf5daca70b7b2e595e925
MD5 dccba4befd6c7e893ba0cbf763cc998f
BLAKE2b-256 b413fc629a5e9d28b72614334d0b7cc9de3463569ee01db71719d3f7449da71c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 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