Skip to content
v0.11.4MIT

Search, retrieve, and manage documents in Paperless-ngx

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.11.4 - 2026-10-30

Added

  • Add portable Agent Plugins 1.0 packaging and an Agent Skills-compatible Paperless skill while retaining Claude Code integration.

Fixed

  • Launch the bundled MCP server in Codex without unresolved Claude-specific executable or credential placeholders.
  • Keep launcher helpers available when the host sanitizes PATH.
  • Remove temporary download files before starting the CLI.

Security

  • Update rustls-webpki to 0.103.16 to reject distrusted certificate intermediates (RUSTSEC-2026-0382).

0.11.3 - 2026-10-19

Changed

  • The x86_64 Linux binary needs glibc 2.18 or later, down from 2.39 in 0.11.2.

Security

  • Refresh dependencies via cargo update. This moves rustls to 0.23.46, which closes RUSTSEC-2026-0346 to RUSTSEC-2026-0349. RUSTSEC-2026-0349 covers an unauthenticated ServerHello that downgrades later connections to classical key exchange.

0.11.2 - 2026-10-07

Changed

  • Refresh dependencies via cargo update, including rmcp 3.5.1. This moves rustls to 0.23.45, which closes RUSTSEC-2026-0285, TLS 1.3 handshake messages accepted across encryption level boundaries.

Fixed

  • Drop the literal <system-reminder> tag from the skill nudge. Claude Code wraps hook context in its own reminder and, since 2.1.292, escapes tags in hook output, so Claude received an escaped tag.
  • Quote the plugin root in the hook commands. The hooks failed with exit 127 when the plugin directory path contained a space.

0.11.1 - 2026-08-24

Changed

  • Refresh dependencies via cargo update, including rmcp 3.1.4. This moves h2 to 0.4.18, which closes RUSTSEC-2026-0258, an unbounded queue of empty HTTP/2 DATA frames.

0.11.0 - 2026-08-13

Added

  • The plugin now asks for your Paperless-ngx URL and API token when you enable it, and stores the token in your system keychain. Leave both empty to keep using the credentials from pngx auth login.

Changed

  • The MCP server speaks protocol 2026-07-28. Older clients still negotiate 2025-06-18.
  • Truncated table cells now end with … instead of ... (comfy-table 8).

Fixed

  • A blank PNGX_URL or PNGX_TOKEN no longer overrides a stored login.

0.10.2 - 2026-06-17

Fixed

  • Resolve the bundled MCP server via ${CLAUDE_PLUGIN_ROOT}/bin/pngx instead of a bare pngx command. Plugin hosts spawn the stdio MCP server without the plugin's bin/ on PATH, so the bare name failed with "Executable not found in $PATH".

0.10.1 - 2026-05-28

Changed

  • Refresh transitive dependencies via cargo update.

0.10.0 - 2026-05-26

Added

  • Add Codex plugin metadata and marketplace packaging alongside the existing Claude Code plugin.
  • Add bundled MCP configuration for plugin and desktop hosts using pngx mcp.

Changed

  • Flatten the MCP server command to pngx mcp.
  • Make the plugin shim and binary-sync hook work with Codex plugin environment variables as well as Claude Code's variables.

0.9.1 - 2026-05-20

Security

  • Bump rustls-webpki to 0.103.13, clearing RUSTSEC-2026-0104 (a reachable panic when parsing certificate revocation lists). pngx does not parse CRLs, so it was not exploitable; the bump keeps cargo audit clean.

0.9.0 - 2026-05-20

Added

  • Add pngx documents notes <id> to list a document's notes, and pngx documents add-note <id> "<text>" / pngx documents remove-note <id> <note-id> to add and remove them.
  • Add MCP tools documents_notes, documents_add_note, and documents_delete_note mirroring the new note commands.

0.8.2 - 2026-04-21

Fixed

  • Fix pngx documents upload failing with {"document": ["No file was submitted."]} against Paperless-ngx served by granian (2.20.x and newer). The multipart body was sent Transfer-Encoding: chunked via ureq::SendBody::from_reader, which granian's dechunker presented as an empty body to Django's multipart parser. Now the encoded body is buffered before send so the request advertises Content-Length. The multipart encoder itself remains streaming.
  • Fix --wait bailing with invalid type: string "113", expected u64 on some Paperless versions. Task::related_document is now accepted as either a JSON number or the same integer as a JSON string.

0.8.1 - 2026-04-21

Fixed

  • Fix public upload_document_and_wait docs linking to a private item (TASK_UNKNOWN_THRESHOLD). cargo doc --no-deps --all is green again under RUSTDOCFLAGS=-D warnings.
  • Skip the taxonomy CLI integration tests on Windows. The tests use env_clear() when spawning pngx to control PATH, which strips essentials on Windows and causes WSAStartup to fail (os error 10106). Coverage stays on Linux and macOS runners.
  • Refresh transitive rustls-webpki to 0.103.12 to clear RUSTSEC-2026-0049, RUSTSEC-2026-0098, and RUSTSEC-2026-0099.

0.8.0 - 2026-04-21

Added

  • Ship bin/pngx shim so the Claude Code plugin works without a separately installed pngx binary. The shim prefers any user-installed pngx on PATH; otherwise it reuses (or lazily downloads) a plugin-managed copy from GitHub releases matching the plugin's declared version.

  • Add SessionStart hook (hooks/ensure-binary.sh) that keeps the plugin-managed binary in sync in the background, never blocking session startup.

  • Add pngx tags create|update|delete, pngx correspondents create|update|delete, pngx document-types create|update|delete, and a new pngx storage-paths category with list|create|update|delete. All accept ID or exact name as input; ambiguous names surface a candidate list.

  • Add ApiError::BadRequest and ApiError::ValidationError variants and thread them through exit codes (both → 2) and --json-errors codes (bad_request, validation_error).

  • Add pngx documents upload FILE [--title] [--created] [--correspondent] [--document-type] [--tags] [--storage-path] [--asn] [--wait] [--wait-timeout]. Without --wait, prints the consumption task UUID; with --wait, polls /api/tasks/ until the task completes and prints the created document ID. The upload body streams directly from disk so multi-hundred-megabyte scans don't double in memory.

  • Add ApiError::TaskPending (wait timed out) and ApiError::TaskUnknown (task not visible after repeated polls, likely reaped by Celery) with --json-errors codes task_pending and task_unknown; both map to exit code 4.

  • Add pngx documents update ID with --title, --created, --correspondent, --document-type, --storage-path, --tags (replace-all), --add-tag/--remove-tag (atomic via bulk_edit), and --asn. Per-tag edits route through bulk_edit to avoid the read-modify-write race that --tags still carries.

  • Add pngx documents delete ID... (with --yes for non-interactive contexts), pngx documents tag IDS... TAGS..., pngx documents untag IDS... TAGS..., and a generic pngx documents bulk METHOD --ids ... --params '{...}' escape hatch.

  • Mirror every new CLI write command as an MCP tool: documents_upload, documents_update, documents_delete, documents_tag, documents_untag, documents_bulk_edit, plus {tags,correspondents, document_types,storage_paths}_{create,update,delete} and a storage_paths read tool. Writes carry readOnlyHint: false; every *_delete tool and documents_bulk_edit additionally carry destructiveHint: true.

Changed

  • Restructure the tags, correspondents, and document-types commands into subcommand groups. Bare pngx tags, pngx correspondents, and pngx document-types still list (default action); output flags (-o, -F) now live on the explicit list subcommand.
  • Narrow the plugin's pre-allowed settings.json permissions to read verbs only. Every mutating pngx verb now appears in the ask list — Claude Code prompts for permission on each invocation rather than pre-approving. Users may still promote commands to allow in their own runtime settings.
  • Tighten skills/paperless/SKILL.md allowed-tools frontmatter to an explicit list of read verbs. Writes are documented in prose and rely on the ask list for per-call approval.

0.7.1 - 2026-03-07

Fixed

  • Bump Claude Code plugin version to match release

0.7.0 - 2026-03-07

Added

  • Add -F/--fields flag for field filtering across all output commands
  • Add -o ndjson output format for streamable newline-delimited JSON
  • Add --json-errors flag and PNGX_JSON_ERRORS env var for structured error output on stderr
  • Add pngx mcp command for MCP (Model Context Protocol) server over stdio with 9 read-only tools
  • Add exit code 5 for configuration errors (missing URL or token)

Fixed

  • Emit structured JSON/NDJSON output for empty search and inbox results instead of a plain text message

0.6.3 - 2026-02-23

Fixed

  • Use session ID instead of parent PID for nudge hook deduplication marker

0.6.2 - 2026-02-20

Added

  • Auto-approve paperless skill invocation in plugin permissions

0.6.1 - 2026-02-20

Fixed

  • Fix plugin version not being picked up from marketplace cache

0.6.0 - 2026-02-20

Added

  • Plugin settings with default permissions for pngx commands
  • Memory support for paperless skill

Changed

  • Migrate nudge hook from PreToolUse workaround to PostToolUse

0.5.1 - 2026-02-09

Fixed

  • Fix plugin hook using PostToolUse additionalContext which is not implemented for built-in tools

0.5.0 - 2026-02-09

Added

  • Plugin hook that nudges agents to use the paperless skill when running pngx commands directly

0.4.0 - 2026-02-08

Added

  • auth status shows authenticated user display name

Fixed

  • Fix version and auth status failing on Paperless-ngx 2.x (nested API response)

0.3.0 - 2026-02-08

Added

  • inbox command to list unprocessed documents
  • version command shows Paperless-ngx server version when configured
  • auth status verifies server connection and shows server version

Changed

  • version command errors (exit 4) when configured server is unreachable
  • -o/--output flag only shown on commands that produce formatted output

0.2.0 - 2026-02-08

Changed

  • Bump MSRV to 1.93 (Rust edition 2024)
  • Upgrade etcetera to 0.11

0.1.0 - 2026-02-07

Added

  • pngx-client crate: API client library for Paperless-ngx
  • pngx crate: CLI binary with search, list, download commands
  • Configuration via TOML file, environment variables, and CLI flags
  • Multiple output formats: table, JSON, Markdown, plain
  • CI workflow with fmt, clippy, test (stable + MSRV 1.85), and docs
  • Release workflow with cross-compiled binaries
  • Agent skill for Paperless-ngx document search