-
Notifications
You must be signed in to change notification settings - Fork 0
cleanroom.stub
id: cleanroom name: Cleanroom repo_path: ~/Documents/sw30labs/repos/cleanroom remote_url: https://github.com/sw30labs/cleanroom.git primary_language: Python framework: LangGraph (+ OpenAI-compatible oMLX / vLLM backends) category: developer-tools stacks: [langgraph, agentic, cli, mlx, dgx] ingested: 2026-08-18 last_commit_date: 2026-08-27
An agentic file-hygiene pipeline: Analyze → Recommend → Remediate → QA for any single input file, in any format. Cleanroom classifies the file, detects provenance marks, plans a ranked remediation, writes a cleaned *.cleaned.* sibling (never mutating the original in place), and QA-verifies the result with a bounded judge-and-revise loop. Built for hygiene and privacy on content you own.
The README draws an explicit line between verifiable and best-effort work, which is the repo's distinguishing feature:
-
Verifiable (counted): invisible-Unicode stripping (ZWSP, bidi, tags, exotic spaces); AI YAML frontmatter key removal (
ai,model,generator, …). - Partial: container metadata (PNG/JPEG C2PA/EXIF/XMP, DOCX/ODT props, PDF XMP) — flagged in Analyze, stripping pending a format-aware tool or an LLM-rewrite repackage.
- Best-effort: statistical token-sampling text watermarks, reduced by aggressive-strength LLM rewrite; the QA judge verdict itself.
- Out of scope: C2PA soft binding, pixel/audio/video watermarks, training backdoors and trigger phrases.
No tool can certify that a vendor detector will fail, and the repo says so rather than claiming erasure.
LangGraph topology start → analyze → recommend → remediate → qa → end, one agent per phase (classifier+reader, planner, editor, judge):
-
cleanroom/phases/phase1_analyze.py…phase4_qa.py— the four agents. -
cleanroom/pipeline.py,files.py— orchestration and safe atomic writes. -
cleanroom/llm.py,config.py,telemetry.py— provider client, typed settings, cost/token ledger. -
cleanroom/cli.py—inspect(no LLM),run,--preview,--strength safe|aggressive. -
cleanroom/web/— loopback-only dashboard (loopback binding and a loopback Host check) with a four-stage progress view, run history, and the LLM telemetry ledger.
Graceful degradation is the design invariant: the deterministic phases need no LLM at all, so a safe run produces a working cleaned file with the endpoint offline. Semantic read, rewrite, and judge steps are attempted and degrade rather than fail.
cleanroom.yaml selects provider: omlx (Apple Silicon MLX server, default DeepSeek-V4-Flash-0731-MXFP4-MLX) or provider: dgx (NVIDIA DGX vLLM, default Qwen/Qwen3.6-27B-FP8), with mlx/vllm accepted as aliases. Precedence is explicit args → env → YAML → built-in defaults; unknown keys and wrong types are rejected loudly for typo protection. Secrets stay in env vars only (OMLX_API_KEY / DGX_API_KEY). An optional independent model_final_judge can be set so the pass/fail verdict comes from a different model than the revise loop.
langgraph ≥1.0, httpx, pydantic ≥2, tenacity, pyyaml. Optional: pypdf ([pdf] extra); pytest + ruff ([dev]). Python 3.12–3.13, MIT licensed, v0.1.0.
No CI workflows yet. Makefile with make test; pytest configured in pyproject.toml (tests/test_core.py). setup_and_run.sh and setup_and_run_dgx.sh mirror the per-platform launcher convention used across the org.
- skillspector-trial — sibling static-analysis-plus-local-model reviewer; overlapping invisible-Unicode / ASCII-smuggling detection
- local-mlx-responsesAPI-server — the oMLX backend it targets by default
-
driftlab — same dual-launcher (
setup_and_run.sh/setup_and_run_dgx.sh) pattern - Tags: [python, langgraph, mlx, cuda, vllm, cli, security]