
watermarks-remover v0.5.0
تطبيق يضع الخصوصية أولاً ويزيل العلامات المائية للذكاء الاصطناعي من المحتوى الذي تملكه.
_ _ _ ____ ___ ____ ____ _ _ ____ ____ _ _ ____ ____ ____ _ _ ____ _ _ ____ ____
| | | |__| | |___ |__/ |\/| |__| |__/ |_/ [__ __ |__/ |___ |\/| | | | | |___ |__/
|_|_| | | | |___ | \ | | | | | \ | \_ ___] | \ |___ | | |__| \/ |___ | \
watermarks-remover
مهارة وكيل + خدمة Python بالمكتبة القياسية لإزالة علامات المصدر متعددة الموردين للذكاء الاصطناعي من النصوص والملفات — من أجل الخصوصية والنظافة على المحتوى الذي تملكه. المهارة عبارة عن عميل رفيع: تقود الآلية عبر HTTP، لذا لا يحتاج مضيف الوكيل إلى Python.
| الطبقة | الهدف | الكيفية |
|---|---|---|
| A | Unicode غير مرئي، مسافات غريبة، bidi، محارف الوسوم | نصوص Python حتمية |
| B | العلامات المائية النصية الإحصائية (أخذ عينات الرموز) | إعادة كتابة الوكيل + خطاف rewrite_text.py الاختياري |
| الملفات | C2PA / EXIF / XMP / خصائص المستند | PNG، JPEG، WebP، AVIF، HEIC، BMP، GIF، TIFF، SVG، PDF، DOCX، XLSX، PPTX، EPUB، ODT، HTML، Markdown، MP4/MOV/M4A/M4V، WAV، MP3، FLAC |
الموردون / الأنظمة البيئية (على مستوى الفئة): Claude، Gemini / SynthID-Text، أسطح المصدر لـ OpenAI، علامات open-LLM بنمط Kirchenbauer (القائمة الخضراء) و keyed-Gumbel / EXP (Aaronson).
أحدث إصدار: v0.7.0
مسار المهارة: skills/remove-ai-marks/
مسار الخدمة: service/
(الترحيل: كان سابقًا remove-claude-marks؛ لا يزال الاسم المستعار /remove-claude-marks موثقًا)
التثبيت (مهارة الوكيل)
المهارة لا تتضمن أي كود — بل تستدعي الخدمة عبر HTTP. ثبّت المهارة (markdown فقط) وابدأ الخدمة، ثم اضبط WATERMARKS_SERVICE_URL إذا لم تكن http://127.0.0.1:8765.
في Claude Code، أسرع طريق هو سوق الإضافات المضمّن — بدون استنساخ، ويحدّث في مكانه. في كل مكان آخر، مثبّت واحد يغطي كل مضيف مدعوم (Python 3.10+ بالمكتبة القياسية، بدون تبعيات):
python3 install_skill.py --skill remove-ai-marks --target claude-code
| المضيف | الهدف | مكان التثبيت |
|---|---|---|
| Claude Code (شخصي) | --target claude-code | ~/.claude/skills/<skill> (يحترم CLAUDE_CONFIG_DIR) |
| Claude Code (مشروع) | --target claude-project --project-dir PATH | PATH/.claude/skills/<skill> |
| Codex (شخصي) | --target codex | ~/.agents/skills/<skill> |
| Codex (مشروع) | --target codex-project --project-dir PATH | PATH/.agents/skills/<skill> |
| Cowork، claude.ai، الجلسات السحابية، الروتينات | --target cowork | dist/<skill>.zip للرفع ضمن Customize → Skills |
| Cursor | --target cursor (افتراضي) | ~/.cursor/skills/<skill> |
المهارات المُضمَّنة: remove-ai-marks (كاملة، مدعومة بخدمة) و
clean-user-facing-text (نصية فقط، مكتفية ذاتيًا). يطبعها --list.
تُحفظ التثبيتات الموجودة ما لم تمرر --force؛ يتم تجهيز الاستبدال
على مراحل أولًا ويُحتفظ بالتثبيت السابق كنسخة احتياطية باسم فريد.
يقوم --link بإنشاء روابط رمزية لهذا المستودع بدلًا من النسخ، بحيث
تُلتقط التعديلات مباشرة. على Windows، استخدم py install_skill.py ...؛
غلاف install-skill.sh مُوفَّر لأصداف macOS/Linux.
قبل كتابة أي شيء، يتحقق المُثبِّت من المهارة وفق قواعد تغليف
Agent Skills التي تفرضها عمليات الرفع إلى claude.ai
وواجهة Skills API: بيانات أمامية وفق المواصفة فقط (name، description،
license، compatibility، metadata، allowed-tools)، وname بحروف
صغيرة مفصولة بشرطات لا يتجاوز 64 حرفًا ويطابق الدليل، وdescription
غير فارغ لا يتجاوز 1024 حرفًا. بالإضافة إلى ذلك، يجب أن تتوافق حزمة Cowork
مع حد الرفع البالغ 30 ميغابايت، وهو ما يفرضه المُغلِّف.
طرفية Codex وسطح المكتب
ثبّت أيًا من المهارات المُضمَّنة لمستخدمك، أو ثبّت واحدة في مشروع معيّن:
python3 install_skill.py --skill remove-ai-marks --target codex
python3 install_skill.py --skill clean-user-facing-text --target codex
python3 install_skill.py --skill remove-ai-marks --target codex-project --project-dir /path/to/project
على Windows، استخدم py بدلاً من python3. افتح المشروع في Codex. في
الطرفية، استخدم /skills أو اكتب $ لاختيار مهارة؛ في تطبيق سطح المكتب،
اختر المهارة أو أشر إليها في موجّهك. أعد تشغيل Codex إذا لم تظهر المهارة
الجديدة. يتوفر تثبيت المشروع عندما يعمل Codex في ذلك المشروع.
بالنسبة إلى remove-ai-marks، ابدأ خدمة HTTP الموجودة من هذا المستودع
باستخدام make serve قبل استخدام المهارة (أو على Windows بدون make، شغّل
py service/scripts/server.py --host 127.0.0.1 --port 8765). تستخدم
WATERMARKS_SERVICE_URL (الافتراضي http://127.0.0.1:8765)، وتتحقق من /health،
وتستدعي نقطتي النهاية الموجودتين /inspect و /clean. إذا كانت الخدمة
تتطلب مفتاح API، فعيّن WATERMARKS_SERVER_API_KEY للعميل.
clean-user-facing-text مكتفية ذاتياً ولا تحتاج إلى الخدمة.
التنظيف التلقائي عبر hook (حتمي)
المهارة عبارة عن تعليمة: النموذج يقرر ما إذا كان سيستدعيها، والنموذج هو الشيء الذي ينتج العلامات. أما hook فيُنفَّذ بواسطة harness على كل استدعاء أداة مطابق، دون الحاجة إلى تعاون. وهذا يجعل الـ hook هو النصف الحتمي من سير العمل هذا.
تسجّل الإضافة hook من نوع PostToolUse على Write|Edit|MultiEdit|NotebookEdit
يشغّل service/scripts/hook_written_file.py
على الملف الذي كتبه الوكيل للتو. وضعان، بما يتوافق مع عرف pre-commit
القائم على الفحص افتراضياً:
| الوضع | السلوك |
|---|---|
check (الافتراضي) | يبلّغ عن علامات المصدر، ويترك الملف دون تغيير. تذهب النتائج إلى النموذج (exit 2)، حتى يتمكن من عرض تنظيفها. |
clean | يزيل العلامات في مكانها، ثم يخبر النموذج أن الملف على القرص قد تغيّر. |
عيّن الوضع من إعدادات الإضافة (Hook mode في /plugin manage،
يقرأه الـ hook باسم CLAUDE_PLUGIN_OPTION_HOOK_MODE)، أو باستخدام
WATERMARKS_HOOK_MODE=clean في البيئة. أمر الـ hook عمداً
لا يستبدل ${user_config.hook_mode}: يرفض Claude Code تشغيل
hook يشير إلى خيار لم يفتح المستخدم قط /plugin manage لتعيينه — فـ default
المعلن لا يلبّي ذلك — لذا فإن استبداله يعني
أن الـ hook لن يعمل بصمت أبداً عند تثبيت جديد. تعيد الكشف استخدام scan_file / is_actionable من audit_lib،
لذا يتفق الـ hook وبوابة pre-commit وتصدير CI
SARIF على ما يُعدّ قابلاً للتنفيذ؛ ويستدعي التنظيف clean_file.py، لذا لا تُكرَّر أي منطق تنظيف. يكتب وضع clean إلى
ملف مؤقت مجاور ويستبدل فقط عند وجود فرق حقيقي، لذا تحتفظ الملفات
التي كانت نظيفة بالفعل بـ mtime الخاص بها ولا تعيد تشغيل مراقبي الملفات.
بدون الإضافة، اربطه بنفسك في ~/.claude/settings.json (أو ملف
.claude/settings.json الخاص بالمشروع):
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit|NotebookEdit",
"hooks": [
{
"type": "command",
"command": "python3",
"args": ["/path/to/watermarks-remover/service/scripts/hook_written_file.py",
"--mode", "check"],
"timeout": 30
}
]
}
]
}
}
على Windows، استبدل python3 بـ py.