Metadata-Version: 2.4
Name: supymem
Version: 0.1.0
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Dist: tiktoken>=0.5.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: litellm>=1.86.2,<2.0 ; python_full_version < '3.14'
Requires-Dist: click>=8.1.0
Requires-Dist: rich>=13.0.0
Requires-Dist: opentelemetry-api>=1.24.0
Requires-Dist: ast-grep-cli>=0.30.0
Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
Requires-Dist: agno>=1.0.0 ; extra == 'agno'
Requires-Dist: supymem[proxy,code,ml,memory,relevance,image,reports,otel,evals,voice,html,benchmark,mcp,spreadsheet] ; extra == 'all'
Requires-Dist: any-llm-sdk>=1.0.0 ; python_full_version >= '3.11' and extra == 'anyllm'
Requires-Dist: boto3>=1.28.0 ; extra == 'bedrock'
Requires-Dist: lm-eval[api]>=0.4.0 ; extra == 'benchmark'
Requires-Dist: openai>=1.0.0 ; extra == 'benchmark'
Requires-Dist: anthropic>=0.18.0 ; extra == 'benchmark'
Requires-Dist: tree-sitter-language-pack>=0.10.0,<1.0 ; extra == 'code'
Requires-Dist: tree-sitter>=0.25.2,<0.26 ; extra == 'code'
Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
Requires-Dist: pytest-cov>=4.0.0 ; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0 ; extra == 'dev'
Requires-Dist: ruff>=0.1.0 ; extra == 'dev'
Requires-Dist: mypy>=1.0.0 ; extra == 'dev'
Requires-Dist: pre-commit>=3.0.0 ; extra == 'dev'
Requires-Dist: openai>=1.0.0 ; extra == 'dev'
Requires-Dist: anthropic>=0.18.0 ; extra == 'dev'
Requires-Dist: litellm>=1.86.2,<2.0 ; python_full_version < '3.14' and extra == 'dev'
Requires-Dist: fastapi>=0.100.0 ; extra == 'dev'
Requires-Dist: uvicorn>=0.23.0,<1.0 ; extra == 'dev'
Requires-Dist: httpx[http2]>=0.24.0 ; extra == 'dev'
Requires-Dist: websockets>=13.0 ; extra == 'dev'
Requires-Dist: opentelemetry-sdk>=1.24.0 ; extra == 'dev'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.24.0 ; extra == 'dev'
Requires-Dist: ollama>=0.4.0 ; extra == 'dev'
Requires-Dist: langchain-ollama>=0.2.0 ; extra == 'dev'
Requires-Dist: hnswlib>=0.8.0 ; extra == 'dev'
Requires-Dist: sqlite-vec>=0.1.6 ; extra == 'dev'
Requires-Dist: sentence-transformers>=2.2.0,<6.0 ; extra == 'dev'
Requires-Dist: numpy>=1.24.0 ; extra == 'dev'
Requires-Dist: openpyxl>=3.1.0 ; extra == 'dev'
Requires-Dist: datasets>=2.14.0 ; extra == 'evals'
Requires-Dist: sentence-transformers>=2.2.0,<6.0 ; extra == 'evals'
Requires-Dist: numpy>=1.24.0 ; extra == 'evals'
Requires-Dist: scikit-learn>=1.3.0 ; extra == 'evals'
Requires-Dist: anthropic>=0.18.0 ; extra == 'evals'
Requires-Dist: openai>=1.0.0 ; extra == 'evals'
Requires-Dist: trafilatura>=1.6.0 ; extra == 'html'
Requires-Dist: pillow>=10.0.0 ; extra == 'image'
Requires-Dist: sentencepiece>=0.1.99 ; extra == 'image'
Requires-Dist: rapidocr-onnxruntime>=1.4.0,<2 ; python_full_version < '3.13' and extra == 'image'
Requires-Dist: rapidocr>=3.0,<4 ; python_full_version >= '3.13' and extra == 'image'
Requires-Dist: onnxruntime>=1.7,<2 ; python_full_version >= '3.13' and extra == 'image'
Requires-Dist: langchain-core>=1.3.3,<4.0 ; extra == 'langchain'
Requires-Dist: langchain-openai>=1.1.14,<2.0 ; extra == 'langchain'
Requires-Dist: mcp>=1.0.0 ; extra == 'mcp'
Requires-Dist: httpx>=0.24.0 ; extra == 'mcp'
Requires-Dist: hnswlib>=0.8.0 ; extra == 'memory'
Requires-Dist: sqlite-vec>=0.1.6 ; extra == 'memory'
Requires-Dist: sentence-transformers>=2.2.0,<6.0 ; extra == 'memory'
Requires-Dist: mem0ai>=1.0.0,<2.0 ; extra == 'memory-stack'
Requires-Dist: qdrant-client>=1.9.0,<2.0 ; extra == 'memory-stack'
Requires-Dist: neo4j>=5.20.0,<7.0 ; extra == 'memory-stack'
Requires-Dist: torch>=2.0.0 ; extra == 'ml'
Requires-Dist: transformers>=4.30.0,<6.0 ; extra == 'ml'
Requires-Dist: huggingface-hub>=1.5.0,<2.0 ; extra == 'ml'
Requires-Dist: opentelemetry-sdk>=1.24.0 ; extra == 'otel'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.24.0 ; extra == 'otel'
Requires-Dist: fastapi>=0.100.0 ; extra == 'proxy'
Requires-Dist: uvicorn>=0.23.0,<1.0 ; extra == 'proxy'
Requires-Dist: httpx[http2]>=0.24.0 ; extra == 'proxy'
Requires-Dist: openai>=2.14.0 ; extra == 'proxy'
Requires-Dist: mcp>=1.0.0 ; extra == 'proxy'
Requires-Dist: magika>=0.6.0 ; extra == 'proxy'
Requires-Dist: zstandard>=0.20.0 ; extra == 'proxy'
Requires-Dist: websockets>=13.0 ; extra == 'proxy'
Requires-Dist: onnxruntime>=1.16.0 ; extra == 'proxy'
Requires-Dist: transformers>=4.30.0,<6.0 ; extra == 'proxy'
Requires-Dist: watchdog>=4.0.0 ; extra == 'proxy'
Requires-Dist: sqlite-vec>=0.1.6 ; extra == 'proxy'
Requires-Dist: supymem[proxy] ; extra == 'proxy-prod'
Requires-Dist: gunicorn>=21.0.0 ; sys_platform != 'win32' and extra == 'proxy-prod'
Requires-Dist: torch>=2.0.0 ; sys_platform == 'darwin' and extra == 'pytorch-mps'
Requires-Dist: sentence-transformers>=2.2.0 ; sys_platform == 'darwin' and extra == 'pytorch-mps'
Requires-Dist: fastembed>=0.4.0 ; extra == 'relevance'
Requires-Dist: numpy>=1.24.0 ; extra == 'relevance'
Requires-Dist: jinja2>=3.0.0 ; extra == 'reports'
Requires-Dist: openpyxl>=3.1.0 ; extra == 'spreadsheet'
Requires-Dist: xlrd>=2.0.1 ; extra == 'spreadsheet'
Requires-Dist: strands-agents>=0.1.0 ; extra == 'strands'
Requires-Dist: onnxruntime>=1.16.0 ; extra == 'voice'
Requires-Dist: transformers>=4.30.0,<6.0 ; extra == 'voice'
Requires-Dist: torch>=2.0.0 ; extra == 'voice'
Requires-Dist: supymem[voice] ; extra == 'voice-train'
Requires-Dist: datasets>=2.14.0 ; extra == 'voice-train'
Requires-Dist: accelerate>=0.20.0 ; extra == 'voice-train'
Provides-Extra: agno
Provides-Extra: all
Provides-Extra: anyllm
Provides-Extra: bedrock
Provides-Extra: benchmark
Provides-Extra: code
Provides-Extra: dev
Provides-Extra: evals
Provides-Extra: html
Provides-Extra: image
Provides-Extra: langchain
Provides-Extra: mcp
Provides-Extra: memory
Provides-Extra: memory-stack
Provides-Extra: ml
Provides-Extra: otel
Provides-Extra: proxy
Provides-Extra: proxy-prod
Provides-Extra: pytorch-mps
Provides-Extra: relevance
Provides-Extra: reports
Provides-Extra: spreadsheet
Provides-Extra: strands
Provides-Extra: voice
Provides-Extra: voice-train
License-File: LICENSE
License-File: NOTICE
Summary: Local-first token and context savings for Claude Code
Keywords: llm,openai,anthropic,claude,gpt,context,token,optimization,compression,caching,proxy,ai,machine-learning
Author: Supymem
Maintainer: Supymem
License-Expression: Apache-2.0
Requires-Python: >=3.10
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Documentation, https://github.com/contextplz/supymem-cli#readme
Project-URL: Homepage, https://supymem.com
Project-URL: Issues, https://github.com/contextplz/supymem-cli/issues
Project-URL: Repository, https://github.com/contextplz/supymem-cli

# Supymem CLI

Local-first token and context savings for Claude Code.

Supymem wraps Claude Code through a local optimization proxy that compresses large tool outputs, stores originals locally, and lets Claude retrieve them on demand.

```bash
pip install supymem
supymem wrap claude
supymem stats
supymem unwrap claude
supymem doctor
```

## Quick start

1. Install the CLI:

```bash
pip install supymem
```

2. Launch Claude Code through Supymem:

```bash
supymem wrap claude
```

This starts or reuses a local proxy on `http://127.0.0.1:8787`, routes Claude through it, sets `ENABLE_TOOL_SEARCH=true`, and registers the Supymem MCP retrieval server.

3. Check savings:

```bash
supymem stats
```

4. Restore Claude settings when done:

```bash
supymem unwrap claude
```

## Commands

| Command | Description |
|---------|-------------|
| `supymem wrap claude` | Launch Claude Code through the Supymem proxy |
| `supymem unwrap claude` | Remove Supymem-managed Claude/MCP settings |
| `supymem proxy --port 8787` | Start the local optimization proxy |
| `supymem doctor` | Check local installation and proxy health |
| `supymem stats` | Show local compression/token savings |
| `supymem mcp install` | Register the Supymem MCP server with Claude |
| `supymem update` | Check for and install CLI updates |

## State and privacy

- Runtime state is stored under `~/.supymem`.
- Compressed originals are stored locally and retrievable via `supymem_retrieve`.
- Supymem collects anonymous, content-free usage telemetry by default when a telemetry endpoint is configured. We never send prompts, code, file paths, API keys, or Claude messages.
- Disable telemetry with `SUPYMEM_TELEMETRY=0`, `DO_NOT_TRACK=1`, or `supymem telemetry off`.

## Attribution

Supymem CLI includes software derived from [Headroom](https://github.com/headroomlabs-ai/headroom), licensed under Apache 2.0. Headroom attribution notices are preserved in `NOTICE`. Supymem is not affiliated with or endorsed by Headroom.

## License

Apache License 2.0. See `LICENSE` and `NOTICE`.

