Metadata-Version: 2.4
Name: open-pseudonym
Version: 0.1.1
Summary: Open Pseudonym: keep personal data away from AI models without making them worse at the task. Task-aware stand-ins, local restore, secret handles and signed egress receipts.
Author: Ishan Srivastava
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/Ishan2036924/open-pseudonym
Project-URL: Specification, https://github.com/Ishan2036924/open-pseudonym/blob/main/spec/open-pseudonym.md
Keywords: pseudonymization,privacy,llm,pii,ai-agents,mcp,open-standard
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Security
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE
Requires-Dist: cryptography>=42
Provides-Extra: proxy
Requires-Dist: starlette>=0.40; extra == "proxy"
Requires-Dist: uvicorn>=0.30; extra == "proxy"
Requires-Dist: httpx>=0.27; extra == "proxy"
Provides-Extra: mcp
Requires-Dist: mcp<3,>=2.3; extra == "mcp"
Provides-Extra: browser
Requires-Dist: playwright>=1.50; extra == "browser"
Provides-Extra: openai
Requires-Dist: openai>=1.50; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.40; extra == "anthropic"
Provides-Extra: gliner
Requires-Dist: gliner>=0.2; extra == "gliner"
Provides-Extra: spacy
Requires-Dist: spacy>=3.7; extra == "spacy"
Provides-Extra: all
Requires-Dist: starlette>=0.40; extra == "all"
Requires-Dist: uvicorn>=0.30; extra == "all"
Requires-Dist: httpx>=0.27; extra == "all"
Requires-Dist: mcp<3,>=2.3; extra == "all"
Requires-Dist: playwright>=1.50; extra == "all"
Requires-Dist: openai>=1.50; extra == "all"
Requires-Dist: anthropic>=0.40; extra == "all"
Provides-Extra: test
Requires-Dist: pytest>=8; extra == "test"
Requires-Dist: anyio>=4; extra == "test"
Dynamic: license-file

# open-pseudonym (Python)

Keep personal data away from AI models without making them worse at the task. Task-aware stand-ins, local restore,
secret handles that are filled in outside the model, and signed receipts for every request that leaves.

```bash
pip install open-pseudonym              # core, needs only cryptography
pip install "open-pseudonym[proxy]"     # local proxy for OpenAI and Anthropic style APIs
pip install "open-pseudonym[mcp]"       # MCP middleware and gateway
pip install "open-pseudonym[browser]"   # Playwright handle filler
```

```python
from open_pseudonym import Session, Source

s = Session("draft_reply")
masked = s.mask("Hi Dana,\nyour Acme code is 482913.", Source(sender="no-reply@acme.com"))
print(masked.text)                                   # Hi <a fake name>, ... {{OTP_1}}.
print(s.restore(masked.text, reveal_handles=True))   # exactly the original
```

Try `opn demo`. The specification, guides and test vectors live at
<https://github.com/Ishan2036924/open-pseudonym>.

This is pseudonymisation, not anonymisation: what reaches the model is still personal data in law. Apache-2.0.
