You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -412,15 +412,17 @@ future local OCR engine is optional planned work, not a current capability.
412
412
The signature tools implement a **two-tier model** agreed with Max Ferguson on 2026-04-09:
413
413
414
414
-**Tier 1 (this repo, local, free)**: Visible stamp via pdf-lib. `apply_signature` stamps a saved signature + writes an audit trail to PDF metadata. NOT legally-binding. NOT cryptographic.
415
-
-**Tier 2 (Lumin API handoff, future)**: Cryptographic signing with timestamp and certificate. `request_lumin_signature` will route prepared packets to Lumin.
415
+
-**Tier 2 (optional Lumin API handoff)**: The six `*_lumin_*` workflow tools connect a public PKCE client, preview an exact prepared packet, send one confirmed request without automatic retry, poll status, and download a completed artifact. The PDF and listed recipient details leave the device only at the confirmed send step. Lumin, not PDF Tools, provides the remote signing service and its completion certificate.
416
416
417
417
**Human-intent constraint** (critical): `apply_signature` requires `user_intent_statement` + `user_confirmed_at` (ISO-8601, within last 24h). This is a legal requirement per Max: *"there's gotta be intent. Having the agent just kind of go and stamp signatures on a document without someone telling it to is not really allowed."* Agents MUST obtain these from the user and never fabricate. The validation enforces length/recency sanity checks; the intent is stored in PDF Keywords metadata for audit.
418
418
419
419
**Coordinate system**: All signature tools use **top-left origin** (x from left, y from top) in PDF points (72pt = 1 inch). Internally converted to pdf-lib's bottom-left — agents/users never need to think about it.
420
420
421
421
**Agent-safe vs human-gated split**:
422
422
- Agent-safe (no intent check): `create_signature`, `list_signatures`, `add_signature_field`, `prepare_signing_packet`
423
-
- Human-gated (requires intent): `apply_signature` only
423
+
- Human-gated (requires intent): `apply_signature` and `send_lumin_request`. The
424
+
Lumin send tool validates exact recent confirmation values, but the host and
425
+
agent remain responsible for passing only values the user actually supplied.
Copy file name to clipboardExpand all lines: README.md
+38-1Lines changed: 38 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -56,7 +56,7 @@ Claude already knows how to read PDFs in limited ways. PDF Tools goes much furth
56
56
57
57
-**Interactive viewer:** page navigation, zoom, search, fullscreen, text selection, and form-field sidebar
58
58
-**Form workflows:**`fill_pdf`, `read_pdf_fields`, `bulk_fill_from_csv`, and reusable profiles
59
-
-**Sign mode:** signature/date zone detection, saved or drawn local signatures, text stamping, inspect-region, and preview-to-zone flows
59
+
-**Sign mode:** signature/date zone detection, saved or drawn local signatures, text stamping, inspect-region, preview-to-zone flows, and optional consent-gated Lumin e-signing
60
60
-**URL-to-PDF workflows:** fetch HTTP(S) PDF links to the local machine when sandboxed web fetches are blocked
61
61
-**Page organization:** merge, split, rotate, reorder, and apply full page plans in one pass
62
62
-**Extraction and analysis:** page-bounded reads, text search, page/region rendering, CSV export, page-level analysis, metadata, and validation
@@ -99,6 +99,37 @@ content, so the complete workflow is not necessarily zero egress.
99
99
- Inspect a region, preview it, and turn it into a typed signing zone when automatic detection is not enough
100
100
- Prepare a provider-neutral handoff receipt that binds the exact local input/output, typed zones, participant roles, page geometry, and unresolved inputs without contacting a signing provider
101
101
- Keep signing edits local, with active-document tracking and backup behavior for same-file mutations
102
+
- Optionally connect a Lumin account with browser-based PKCE, preview the exact recipients and disclosure locally, and send the prepared PDF only after the user confirms the exact sending statement
103
+
- Check an existing Lumin request by polling and download an agreement or completion certificate without exposing the temporary signed URL or replacing an existing local file
104
+
105
+
### Optional Lumin e-signing
106
+
107
+
Lumin e-signing is an explicit external workflow. The rest of PDF Tools stays
108
+
local-first. PDF Tools contacts Lumin only when a Lumin tool is called. Sending
109
+
requires a provider-ready `prepare_signing_packet` receipt, a local preview, a
110
+
connected Lumin session, and the user's fresh verbatim confirmation. The
111
+
prepared PDF plus listed names and email addresses then leave the device and are
112
+
handled by Lumin.
113
+
114
+
PDF Tools can validate the exact confirmation text and its freshness, but it
115
+
cannot independently prove who typed it. The MCP host must present the
116
+
destructive tool action, and the agent must pass only the user's actual words
117
+
and time. Agents must never fabricate either value.
118
+
119
+
Configure a public OAuth client ID in the extension's **Lumin OAuth Client ID**
120
+
setting. Other stdio hosts may set `LUMIN_OAUTH_CLIENT_ID`; Agent Plugin users
121
+
may set `luminOAuthClientId` in the plugin's private `config.json`. Register the
122
+
exact redirect URI `http://127.0.0.1/callback`. The OAuth access token stays only
123
+
in the running PDF Tools process. It is not returned, logged, or written to
124
+
disk, and a restart requires connecting again.
125
+
126
+
The create call is one-shot and has no automatic retry. If the provider outcome
127
+
is uncertain, PDF Tools preserves that uncertainty and will not create another
128
+
request under the same authority. Status polling is the current desktop path.
129
+
Lumin app webhooks require a private server app and are not part of this public
130
+
PKCE workflow. The durable signing-operation store currently supports macOS and
131
+
Linux. The public Lumin workflow fails closed on Windows until a reviewed
132
+
ACL-aware state adapter exists.
102
133
103
134
### Page Organization Tools
104
135
@@ -229,6 +260,12 @@ the `.mcpb` manifest that ordinary model workflows discover.
0 commit comments